请教,一个和数据的类型和比较的问题
在vba 代码中有如下的内容需要进行一个比较。
Dim rs as dao.recordset
set rs = CurrentDB.OpenRecordset("table1", dbopentable, dbinconsistent)
rs.movefirst
do 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]
都能够被正确的执行
请问这个比较有什么问题?
正确的写法应该是怎样?
[解决办法]
使用 Nz 函数可以返回 0,或一个空字符串(" ") ,或者当一个 Variant 为 Null 时,该函数返回其他的指定值。例如,您可以使用该函数将 Null 值转换为其他值并防止它通过表达式扩散。
语法
Nz(variant[, valueifnull])
Nz 函数具有如下参数:
参数 说明
variant 各种数据类型的 Variant。
Valueifnull 可选参数(除非在查询中使用)。一个 Variant,提供当 variant 参数为 Null 时的返回值。该参数使您能够返回一个值(除了 0 或空字符串以外的其他值)。
注意 如果在查询的表达式中使用了不带 ValueIfNull 参数的 Nz 函数,则对包含 Null 值的字段,其返回结果为空字符串。
[解决办法]