我允许我的用户在列表框中选择一个项目,然后单击一个按钮将数据放入其自己的表中。
这是我的代码:
Dim varItem As Variant
Dim strSQL As String
For Each varItem In Me.LettersDueList.ItemsSelected
strSQL = "INSERT INTO tbl_OmbudsmanCompletedWorkTEST (CustomerAccountNumber, NoteTypeDescription, BusinessAreaDescription, NotePurposeCode, CSUserID, AdvisorName, Site) " _
& "Values(" & Me.LettersDueList.Column(0, varItem) & ", " _
& Me.LettersDueList.Column(1, varItem) & ", " _
& Me.LettersDueList.Column(2, varItem) & ", " _
& Me.LettersDueList.Column(3, varItem) & ", " _
& Me.Text43.Value & "," _
& Me.Text21.Value & "," _
& Me.LettersDueList.Column(6, varItem) & ")"
CurrentDb.Execute strSQL, dbFailOnError
Next
我的代码在此行调试:
& Me.LettersDueList.Column(1, varItem) & ", " _
错误:
Syntax Error (Missing Operator)
我出错的任何想法?
由于
答案 0 :(得分:1)
看起来你在文本字段周围缺少单引号''
,例如:
"'" & Me.LettersDueList.Column(1, varItem) & "', "
。
顺便说一句,你应该考虑StringFormat
助手功能,它会让你的生活更轻松。
Public Function StringFormat(ByVal Item As String, ParamArray args() As Variant) As String
Dim idx As Integer
For idx = LBound(args) To UBound(args)
Item = Replace(Item, "{" & idx & "}", args(idx))
Next idx
StringFormat = Item
End Function
您的SQL字符串将如下所示:
Dim varItem As Variant
Dim strSQL As String
For Each varItem In Me.LettersDueList.ItemsSelected
strSQL = StringFormat("INSERT INTO tbl_OmbudsmanCompletedWorkTEST (CustomerAccountNumber, NoteTypeDescription, BusinessAreaDescription, NotePurposeCode, CSUserID, AdvisorName, Site) " & _
"VALUES('{0}','{1}','{2}','{3}','{4}','{5}','{6}');", _
Me.LettersDueList.Column(0, varItem), _
Me.LettersDueList.Column(1, varItem), _
Me.LettersDueList.Column(2, varItem), _
Me.LettersDueList.Column(3, varItem), _
Me.Text43.Value, _
Me.Text21.Value, _
Me.LettersDueList.Column(6, varItem))
CurrentDb.Execute strSQL, dbFailOnError
Next
只需删除数字字段上的单引号'{0}'
。
尽管如此,我个人更喜欢参数化查询:
PARAMETERS [prm1] Text (255), [prm2] Text (255), [prm3] Text (255);
INSERT INTO YourTableName ( Field1, _Field2, Field3 )
SELECT [prm1], [prm2], [prm3];
...
With CurrentDb.QueryDefs("QueryName")
.Parameters("[prm1]").Value = Value1
.Parameters("[prm2]").Value = Value2
.Parameters("[prm3]").Value = Value3
.Execute dbFailOnError
End With
StringFormat
是一个自定义辅助函数,它模仿C# String.Format()
方法。
简化版本(如提供的版本)接受两个参数String
和ParamArray()
,并通过替换String
,{{1}返回连接的{0}
使用指定索引处提供的参数。
所以在SQL字符串场景中:
{1}, ...
成为:
"FirstName='" & firstName_ & "' And LastName='" & lastname_ & "'"
您可以在此处详细了解"FirstName='{0}' And LastName='{1}'", firstName_, lastname_
方法:https://msdn.microsoft.com/en-us/library/system.string.format(v=vs.110).aspx#Starting
上面引用的简化版本来自Rob Cooper和Michael Tucker撰写的 Expert Access 2007编程:http://www.wrox.com/WileyCDA/WroxTitle/Expert-Access-2007-Programming.productCd-0470174021.html
最后,您可以在此处看到来自Mat的马克杯的完整实施:https://codereview.stackexchange.com/questions/30817/a-csharpish-string-format-formatting-helper/31000#31000