在vba 代码中有如下的内容需要进行一个比较。Dim rs as dao.recordsetset rs = CurrentDB.OpenRecordset("table1", dbopentable, dbinconsistent)rs.movefirstdo until rs.eof
if rs.[ID TB1] = Nz(Me.myEditBox1.value) then
msgbox "发现一个重复项目"
end if
rs.movenext
loop
... ... ...
我希望在myEditBox这个textbox里面输入一个值后,
用do until循环到table1之中寻找[ID TB1]项是否有同样的值在重复。
(table1中的[ID TB1]字段在table1中是长整数型)可是却发现,这个比较if rs.[ID TB1] = Nz(Me.myEditBox1.value) 在
rs.[ID TB1] 和 Nz(Me.myEditBox1.value)的值同为一个整数
(比如591)的时候,
无法被视为相等,msgbox 无法被执行到。并且在调试中发现
如果把等式 if rs.[ID TB1] = Nz(Me.myEditBox1.value)
无论换成: if 591 = Nz(Me.myEditBox1.value)
或者换成: if 591 = rs.[ID TB1]
都能够被正确的执行请问这个比较有什么问题?
正确的写法应该是怎样?
if rs.[ID TB1] = Nz(Me.myEditBox1.value) then
msgbox "发现一个重复项目"
end if
rs.movenext
loop
... ... ...
我希望在myEditBox这个textbox里面输入一个值后,
用do until循环到table1之中寻找[ID TB1]项是否有同样的值在重复。
(table1中的[ID TB1]字段在table1中是长整数型)可是却发现,这个比较if rs.[ID TB1] = Nz(Me.myEditBox1.value) 在
rs.[ID TB1] 和 Nz(Me.myEditBox1.value)的值同为一个整数
(比如591)的时候,
无法被视为相等,msgbox 无法被执行到。并且在调试中发现
如果把等式 if rs.[ID TB1] = Nz(Me.myEditBox1.value)
无论换成: if 591 = Nz(Me.myEditBox1.value)
或者换成: if 591 = rs.[ID TB1]
都能够被正确的执行请问这个比较有什么问题?
正确的写法应该是怎样?
variant 各种数据类型的 Variant。
Valueifnull 可选参数(除非在查询中使用)。一个 Variant,提供当 variant 参数为 Null 时的返回值。该参数使您能够返回一个值(除了 0 或空字符串以外的其他值)。
注意 如果在查询的表达式中使用了不带 ValueIfNull 参数的 Nz 函数,则对包含 Null 值的字段,其返回结果为空字符串。
目前出问题还不是Nz(Me.myEditBox1.value)为空值的情况,
目前的问题是Nz(Me.myEditBox1.value)和rs.[ID TB1]均同时为有效数值,
比如591, 9002235之类的数值时,无法被检出相等。
结果是什么
如果可以的话,
上传你的MDB到www.access911.net/csdn
只要有问题的表、查询,用WINRAR压缩
msgbox Me.myEditBox1.value & rs.[ID TB1]
的显示值是591591
(当我输入591到text box 时)可是下面的
if rs.[ID TB1] = Nz(Me.myEditBox1.value,0)
却无法被检出相等
上传你的MDB到www.access911.net/csdn
只要有问题的表、查询,用WINRAR压缩
if rs.[ID TB1]+0 = Nz(Me.myEditBox1.value,0)+0
看来是有普遍性的现象 http://access911.net/csdn/FileDescription.asp?mdb=2011-5-26&id=30
类型不匹配
都需要这样的变换才能够比较么?
如果用typename函数测rs![ID MOLT]的时候,得到的结果是field,而且 If Val(rs![ID MOLT]) = Nz(Me.test0, 0) Then
也可以得到正确的结果。那么说用dao得到的字段值也和 textbox 的输入值一样
如果要进行比较的时候最好 进行型变换。
行不?
比如你可以直接在SELCET在打开数据记录的时候就加上WHERE条件直接得到包含目标条件的记录.
即使已经全部打开数据记录的情况下,也可以使用resordset的filter属性来筛选记录.
以上两种方法只要你看一下recordcount是否为0就知道是否有符合条件的记录存在了.
其次,如果当你的数据库内没有记录,或者记录中这个"ID TB1"字段内容有空值,你的代码就很杯具.
不管怎么说,使用循环再逐条记录比较的方法去找某条特定记录是很不靠谱的做法.
VB里面的数组什么可以这么用,但是数据库其实是有自己的一套方法的,你最好还是按数据库的方法来办.