在vb6中获取类型不匹配的错误

0 sql vb6 oracle

我正在使用此代码并获得类型不匹配的错误,运行时错误'13'错误在行中,标记如下,特别是错误是由于prereq.paid=" + rs1!paid + " "查询中的condition()所在...

rs1.Open "select name,nposts,postad.paid as paid from ad,post,postad where ad.adid = " +
         cmbAdno.Text +
         " and ad.adid=postad.adid and postad.pid=post.pid ", con, adOpenDynamic, 
         adLockOptimistic

While Not rs1.EOF
  cmbTitle.AddItem (rs1!Name)    
  rs1.MoveNext
Wend

rs1.MoveFirst

cmbTitle.Text = rs1!Name
txtNposts.Text = rs1!nposts

If IsNumeric(rs1!paid) Then
  MsgBox (rs1!paid + 1)
End If

**rs2.Open "select title from postad,prereq where postad.paid = prereq.paid and prereq.paid=" + 
        rs1!paid + " ", con, adOpenDynamic, adLockOptimistic**

While Not rs2.EOF
  lstPrereq.AddItem (rs2!Title)
  rs2.MoveNext
Wend

rs2.Close

rs1.Close
Run Code Online (Sandbox Code Playgroud)

Bob*_*b77 5

哇,那段代码需要一些工作!

加号运算符是这里的罪魁祸首.您可以使用小型测试用例轻松验证这一点.

Dim ADO_Field_Value As Variant
Dim S As String

ADO_Field_Value = True

On Error Resume Next
S = "text" + ADO_Field_Value + ""
If Err Then MsgBox "Plus failed, err " & CStr(Err)
Err.Clear
S = "text" & ADO_Field_Value & ""
If Err Then MsgBox "Amp failed, err " & CStr(Err)
Run Code Online (Sandbox Code Playgroud)

如果你运行它,"+"产生错误13,而"&"按预期工作.

使用&符号进行连接.唯一的分类,有点与古代的向后兼容.使用它需要编译器猜测您的意图,以便解决运算符的软重载.

你的"Null hack"将空字符串连接到.Value并不是特别聪明.如果rs1有一个Null,你最终会得到一个SQL语法错误,除非你使用"+"来获得错误94.

通过显式使用.Value而不是让编译器猜测您想要Field的默认属性,ADO字段值更安全.虽然/ Wend已经过时了,那些无关紧要的括号是什么?

您要求编译器执行此代码中可能不应执行的操作.