所以,我正在学习Access 2007,Visual Basic和SQL。不理想。
我将此代码附加到标准向导生成的界面中的按钮。我正在尝试将一行从tblA复制到tblB。每次执行代码时,我都会收到消息“运行时错误'3137'在SQL语句结束时缺少分号(;)。”
我猜测它会在WHERE之前提前终止SQL语句吗?但是如果没有WHERE,我如何将添加附加到特定的行ID?
Private Sub buttonAdd_Click()
Dim strSQL As String
strSQL = "INSERT INTO [tblB]" & _
"VALUES (ID, [Name], [Some value], [Some other value])" & _
"SELECT * FROM tblA" & _
"WHERE ID = '" & Me.ID & "' " & _
";"
DoCmd.RunSQL strSQL
End Sub
答案 0 :(得分:3)
语法错误,您需要删除“VALUES”关键字
这假设ID,[Name],[Some value]和[Some other value]是tblB的列名(我的一些犹豫,最后两个名称有“value”)。
VALUES()SQL语法用于提供立即值,但由于您从tblA获取值,因此查询应如下所示:
strSQL = "INSERT INTO [tblB] " & _
"(ID, [Name], [Some value], [Some other value]) " & _
"SELECT * FROM tblA " & _
"WHERE ID = '" & Me.ID & "' " & _
";"
编辑:我还在令牌之间添加了空格。好的赶上尼克D,谢谢你注意到这一点!
答案 1 :(得分:2)
您已将字段名称放在values子句中而不是在表名后面,并且tbla和where之间缺少空格。 value子句后跟select和缺少的空格都可能导致错误消息。
strSQL = "INSERT INTO [tblB] (ID, [Name], [Some value], [Some other value])" & _
"SELECT * FROM tblA " & _
"WHERE ID = '" & Me.ID & "'"
最后的分号现在不再需要了。如果一次运行多个查询,则只需要它来分隔查询。
此外,如果ID字段是数字,则不应该在值周围有撇号:
strSQL = "INSERT INTO [tblB] (ID, [Name], [Some value], [Some other value])" & _
"SELECT * FROM tblA " & _
"WHERE ID = " & Me.ID
答案 2 :(得分:0)
mjv是对的。您必须删除VALUES
关键字,并且还应在关键字之间添加空格,即:
"SELECT * FROM tblA" & _
"WHERE ID = '" & Me.ID & "' " & _
上述内容将以"...FROM tblAWHERE ID..."