我正在制作一个表格,将一些记录添加到我的数据库和我有些问题。如果用户填写了名为“产品”的字段,我想通过显示该产品在数据库中的可见图片来通知他。 (我只是想告诉他 - 不要禁止添加选项)
我有这个代码,不幸的是它给了我一个错误(运行时错误没有运算符)
Private Sub ProductText_LostFocus()
Dim cnn as New ADODB.Connection
Dim strSQL as String
Dim rs as New ADODB.Recordset
Set cnn = CurrentProject.Connection
strSQL = "Select Product FROM Shopping WHERE Product = " & ProductText.Value
Set rs = cnn.Execute(strSQL)
If rs.RecordCount > 0 then
ShowPicture.Visible = True
End if
End sub
我做错了什么?
答案 0 :(得分:1)
如果您使用带有强类型Command
对象的Parameter
对象,则无需担心在参数值中包含或转义引号,另外还可以免受SQL injection的豁免
这里我简化了您的代码并假设您的Product
列为NVARCHAR(255)
,即可变宽度Unicode(无压缩)文本:
Private Sub ProductText_LostFocus()
Dim cmd As New ADODB.Command
With cmd
Set .ActiveConnection = CurrentProject.Connection
.CommandText = "Select Product FROM Shopping WHERE Product = ?;"
.CommandType = adCmdText
.Parameters.Append .CreateParameter(, adVarWChar, , 255, ProductText.Value)
If Not .Execute().EOF Then
ShowPicture.Visible = True
End If
End With
End Sub
答案 1 :(得分:0)
你有几个不同的问题。
首先,不要创建cnn和rs的新实例,因为它们将在以后设置或创建:
Dim cnn as ADODB.Connection
Dim strSQL as String
Dim rs as ADODB.Recordset
其次,您需要将产品括在SQL中的引号中(如果producttext包含单引号,您可能需要执行其他工作):
strSQL = "Select Product FROM Shopping WHERE Product = '" & ProductText.Value & "'"