Ms access 如何以文本框为标准,使具有数字值的Access文本框等于DLookup

Ms access 如何以文本框为标准,使具有数字值的Access文本框等于DLookup,ms-access,textbox,lookup,Ms Access,Textbox,Lookup,我真的不知道为什么这不起作用,但我正在努力让以下几点起作用: If Me.Text1 = DLookup("Field1", "Test1_Table", "Test1_Table.Field1= _ & Me.Text1") Then MsgBox "It works" Else End If 上面的代码是我正在处理的一个更大项目的测试代码,因此表名和字段名仅用于测试。此外,字段1是一个数字字段。基本上,当我在Text1中输入1时,我希望DLookup功能在Test1

我真的不知道为什么这不起作用,但我正在努力让以下几点起作用:

If Me.Text1 = DLookup("Field1", "Test1_Table", "Test1_Table.Field1= _
     & Me.Text1") Then
   MsgBox "It works"
Else
End If
上面的代码是我正在处理的一个更大项目的测试代码,因此表名和字段名仅用于测试。此外,字段1是一个数字字段。基本上,当我在Text1中输入1时,我希望DLookup功能在Test1_Table.Field1中找到1,并给我一条消息说明它是有效的。我能够将其用于字符串值,例如:

If Me.Text1 = DLookup("Field1", "Test1_Table", "Test1_Table.Field1='" _
    & Me.Text1 & "'")Then
同样,当在文本1中输入1时,这也起作用:

If 1 = DLookup("Field1", "Test1_Table", "Test1_Table.Field1= _
    & Me.Text1") Then
但是,我尝试过:

If Me.Text1 = DLookup("Field1", "Test1_Table", "Test1_Table.Field1= _
    & Forms!TestSearch_Form!Text0)Then

等等

我尝试过许多不同的组合,在处理数值时,似乎无法使两者相等。有人知道我遗漏了什么或有什么想法吗

谢谢,

达米翁

尝试在DLookup中执行过多vba可能会造成问题?

如何:

 If Not IsNull(DLookup("Field1", "Test1_Table", "Field1=" & Me.Text1)) Then
这仅在Field1定义为数字字段时有效,如果它是datetime或text字段,则需要分隔符

编辑:

上述语句要么等于Me.Text1的值,要么为null。使用DllookUp的另一种方法是:

 SomeVar=DLookup("Field1", "Test1_Table", "Field1=" & Me.Text1)
SomeVar要么为null,即未找到,要么返回值或Field1,它等于Me.Text1,因为这是我们在Where语句中要求的。从中可以看出,返回Field1的值是毫无意义的,它要么找到并等于text1,要么找不到并为null。获取DlookUp值的唯一原因是您正在表中查找其他值或计算

在此之后,重要的是要记住,您正在寻找一个精确匹配,小数点右侧的小数值可能会有很大的不同,您不太可能在小数点右侧查找。

如果CInt(Me.Text1)=DLookup(“Field1”、“Test1_Table”、“Test1_Table.Field1=“&Me.Text1”),那么

上面的代码工作得很好。多亏了吉尼斯,我才能够利用我的原始代码,将CInt添加到if语句中

同时,感谢大家的投入


DFM

在第一个代码示例中,“Test1_Table.Field1=&Me.Text1”)实际上应该是“Test1_Table.Field1=“&Me.Text1”)。然而,这仍然不起作用。谢谢,我们的报价大多放错地方了。如果这是一个打字错误,那么你还需要确保你的类型是正确的。比较十进制数字可能会有问题。@Remou:他们两次说“numeric”,一次说“numeric”。正如您所知,在ACE/Jet SQL语法中,NUMERIC是DECIMAL的同义词@DFM:我们在这里谈论的是十进制值吗?谢谢你的回答-不幸的是,这不起作用。我不断得到“做点别的”,这告诉我代码不是在寻找数值。关于其他信息,field1有四条记录,分别为1,2,3,4。当我尝试测试代码时,我在文本框中输入1,使其尽可能简单。这可能是DLookup(?)的一个限制,我可以复制您的测试失败,但它在使用时起作用:CInt(Me.Text1)=…感谢您的响应-为了使我的查找工作正常,我需要使DLookup与文本框相等。在这种情况下,我认为我不能使用上面的代码。字段1设置为数字字段。wierd的意思是-如果1=DLookup(“Field1”、“Test1_Table”、“Field1=“&Me.Text1”),那么。。。当我在文本框中输入1时工作,但当我用Me.Text1替换“if”后的1并在文本框中输入1时,查找无法识别字段1中的值1。为什么不使用DCount()代替DLookup()?您想知道的不是返回值(您已经知道),而是记录的计数。也就是说,除非您对示例进行了太多的简化,并且您确实返回了一个与您正在搜索的值不同的值。
 If Not IsNull(DLookup("Field1", "Test1_Table", "Field1=" & Me.Text1)) Then
 SomeVar=DLookup("Field1", "Test1_Table", "Field1=" & Me.Text1)