Parameters VB6出现空值问题

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是一个空值,函数不接受该值。 为了让它工作,它需要

我正在用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()
    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中的经典问题