Access中的简单SQL查询失败,缺少分号错误

时间:2009-10-06 06:33:26

标签: sql ms-access vba

所以,我正在学习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

3 个答案:

答案 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..."

加入