如何在访问表单上的文本框的验证规则中使用 DLookup

Posted

技术标签:

【中文标题】如何在访问表单上的文本框的验证规则中使用 DLookup【英文标题】:How do I go about using DLookup in a validation rule of a text box on a form in access 【发布时间】:2009-11-03 13:49:41 【问题描述】:

我正在尝试将 DLookup 用于 Access 中表单上的 TextBox 的 ValidationRule。

根据上找到的示例 MSDN 我用过

dlookup("ABKUERZUNG", "tblABKUERZUNG", "ABKUERZUNG=[Forms]![frmMutBetriebspunkt]![BP_ABKUERZUNG]") is null

这不起作用:您输入的表达式包含无效语法

现在,如果有人知道这个无效语法到底是什么以及在哪里,我将不胜感激。

谢谢 雷内

编辑:将错误的 ' 更正为 "(这不是问题的原因)

【问题讨论】:

您粘贴的示例有效。我复制并粘贴了所有对象名称。你有验证文本吗? 【参考方案1】:

如果在代码中使用函数,参数分隔符是逗号(,),但在GUI 编辑器中是分号(;)。这可能是您的语法错误。

那就试试吧:

=Dlookup("field";"table";"where")

【讨论】:

就是这样!非常感谢你。为了记录,我使用了 =DLookUp("ABKUERZUNG";"tblBETRIEBSPUNKT";"ABKUERZUNG=[Forms]![frmMutBetriebspunkt]![BP_ABKUERZUNG]") 为 Null 以确保 ABKUERZUNG 不存在于表。 呃,什么?哪里 ”;”函数参数的有效分隔符?我无法让它在 A2003 的任何地方被接受。这可能是本地化问题吗? 如果在计算的表单域或报表域中使用函数,则必须使用 ;就像在 Excel 中一样。但我只能说德语版的 Office。【参考方案2】:

已编辑

代码:

If IsNull(dlookup( _
"ABKUERZUNG", "tblABKUERZUNG", _
"ABKUERZUNG=[Forms]![frmMutBetriebspunkt]![BP_ABKUERZUNG]")) Then

对于验证规则:

dlookup("ABKUERZUNG", "tblABKUERZUNG", "ABKUERZUNG=[Forms]![frmMutBetriebspunkt]![BP_ABKUERZUNG]")=Null

【讨论】:

我正在尝试将表达式输入到 ValidationRule 中,并尝试将表达式放入 IF .. THEN .. TRUE END IF 中仍然会带来相同的错误消息。 另外,如果我使用表格的数字主键而不是 ABKUERZUNG,它不会改变任何东西。 道歉 - 这种格式不需要分隔符。我注意到你在 Where 语句的开头有一个单引号,它应该是一个双引号 (")。你在哪里有这个代码?在一个模块中? 当我手动将文本复制到 *** 时,' 是一个错误。在原始代码中,我有一个“。代码 frmMutBetriebspunkt 表单上的文本框的 ValidationRule。【参考方案3】:

您可能想要隔离您为过滤器创建的字符串,因此您可以在即时窗口中检查该值是否符合您的预期。

dim sFilter as String

sFilter = "ABKUERZUNG='" & [Forms]![frmMutBetriebspunkt]![BP_ABKUERZUNG] & "'"

dlookup("ABKUERZUNG", "tblABKUERZUNG", sFilter) is null

【讨论】:

这不是真的。在即时窗口中尝试一下。 所以在编码时习惯这样做,我没有意识到它不是必需的。进行了更改。 是的,但是您依赖 Access 表达式服务来正确解析 DLookup() 代码内部的引用,而您无法控制。我几乎从不使用 DLookup(),但如果我这样做了,我会在将任何内容传递给它之前解析控件引用。

以上是关于如何在访问表单上的文本框的验证规则中使用 DLookup的主要内容,如果未能解决你的问题,请参考以下文章

在文本更改时访问文本框的复制值

如何设置验证规则:MS 访问中的“任务开始日期 >= 项目开始日期”

如何在 VBA 中获取对文本框控件的引用而不是文本框的值

Access 2016 表单控件验证规则未触发

使用 vuetify 规则进行验证的时间

访问列表框,包括来自文本框的信息