我正在使用此代码并获得类型不匹配的错误,运行时错误'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)
哇,那段代码需要一些工作!
加号运算符是这里的罪魁祸首.您可以使用小型测试用例轻松验证这一点.
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已经过时了,那些无关紧要的括号是什么?
您要求编译器执行此代码中可能不应执行的操作.
| 归档时间: |
|
| 查看次数: |
1023 次 |
| 最近记录: |