Parameters VB6出现空值问题
我正在用VB6开发一个应用程序。我遇到了一个似乎是小问题,但它是恼人的,我无法修复它。我正在做的是尝试将2个值传递给一个函数Parameters VB6出现空值问题,parameters,null,vb6,Parameters,Null,Vb6,我正在用VB6开发一个应用程序。我遇到了一个似乎是小问题,但它是恼人的,我无法修复它。我正在做的是尝试将2个值传递给一个函数 Private Sub cmdSearch2P_Click() Call AxisSearch(2, cboDiagId) End Sub 这是我要传递给的函数 Private Sub AxisSearch(plngAxis As Long, pcbo As ComboBox) 发生的情况是,cboDiagID是一个空值,函数不接受该值。 为了让它工作,它需要
Private Sub cmdSearch2P_Click()
Call AxisSearch(2, cboDiagId)
End Sub
这是我要传递给的函数
Private Sub AxisSearch(plngAxis As Long, pcbo As ComboBox)
发生的情况是,cboDiagID
是一个空值,函数不接受该值。
为了让它工作,它需要是“”。我不知道为什么,但我正在开发另一个应用程序,它们具有类似的功能。所以我试着做一些类似的事情
Private Sub cmdSearch2P_Click()
If IsNull(cboDiagID) Then
cbodiagID = ""
End if
Call AxisSearch(2, cboDiagId)
End Sub
但它仍然以空值传递。我知道“”是空的,但是,有没有办法使它不说空而改为“”
编辑:看起来另一个应用程序正在使用VB6 combobox,而我正在编辑的应用程序使用combobox 2.0控件。这就是问题的原因吗 找到了答案。不管它是NULL还是“”,因为现在的combobox是combobox 2.0,我不能在函数中将它作为combobox传递,但这解决了它
Private Sub AxisSearch(plngAxis As Long, pcbo As msforms.ComboBox)
更具体地说,是msforms.combobox解决了这个问题。不管它是NULL还是“”,因为现在的combobox是combobox 2.0,我不能在函数中将它作为combobox传递,但这解决了它
Private Sub AxisSearch(plngAxis As Long, pcbo As msforms.ComboBox)
更具体地说,msforms.combobox只是为了回答您最初的问题:首先,
“
不是Null
,它是一个空字符串,这是不同的。如果要将Null
转换为空字符串,只需向其添加一个空字符串:Null&“
计算结果为”
这可能是一个方便的技巧。当您试图用数据库表中的值填充控件(例如,标签或文本框)时,会经常出现这种情况。例如(假设txtMyBox是文本框,rs是ADO记录集对象):
现在,如果字段不包含任何数据,这将抛出一个错误,因为您不能将文本框的值设置为Null
。要解决此问题,可以执行以下操作:
If Not IsNull(rs.Fields("myField")) Then
txtMyBox = rs.Fields("myField")
Else
txtMyBox = ""
End If
这很麻烦。您可以使用三元运算符简化它:
txtMyBox = IIf (Not IsNull(rs.Fields("myField")), rs.Fields("myField"), "")
这是更好的,但仍然笨重。幸运的是,您也可以这样做:
txtMyBox = rs.Fields("myField") & ""
因为将空字符串连接到字符串不会对其产生影响,而将空字符串连接到空值会产生空字符串。仅回答您最初的问题:首先,
“
不是null
,它是一个空字符串,这不是一回事。如果要将Null
转换为空字符串,只需向其添加一个空字符串:Null&“
计算结果为”
这可能是一个方便的技巧。当您试图用数据库表中的值填充控件(例如,标签或文本框)时,会经常出现这种情况。例如(假设txtMyBox是文本框,rs是ADO记录集对象):
现在,如果字段不包含任何数据,这将抛出一个错误,因为您不能将文本框的值设置为Null
。要解决此问题,可以执行以下操作:
If Not IsNull(rs.Fields("myField")) Then
txtMyBox = rs.Fields("myField")
Else
txtMyBox = ""
End If
这很麻烦。您可以使用三元运算符简化它:
txtMyBox = IIf (Not IsNull(rs.Fields("myField")), rs.Fields("myField"), "")
这是更好的,但仍然笨重。幸运的是,您也可以这样做:
txtMyBox = rs.Fields("myField") & ""
因为将空字符串连接到字符串不会对其产生任何影响,而将空字符串连接到空值会产生空字符串。有人吗?最细微的线索?
“
不是Null
,Null
不是Nothing
,Nothing
不是Empty
,Empty
不是vbNullString
,vbNullString
不是”
。cboDiagID
的类型是什么?行cboDiagID=“”
不能将cboDiagID
设置为空值。如果cbodiagID
是一个组合框,则行cbodiagID=“”
将cbodiagID
的默认属性设置为“”。AFAICR默认属性为Text
,因此该行相当于cbodiagID.Text=”“
。默认属性是VB6ANyone中的经典gotcha?最细微的线索?“
不是Null
,Null
不是Nothing
,Nothing
不是Empty
,Empty
不是vbNullString
,vbNullString
不是”
。cboDiagID
的类型是什么?行cboDiagID=“”
不能将cboDiagID
设置为空值。如果cbodiagID
是一个组合框,则行cbodiagID=“”
将cbodiagID
的默认属性设置为“”。AFAICR默认属性为Text
,因此该行相当于cbodiagID.Text=”“
。默认属性是VB6中的经典问题