Access中的简单SQL查询失败,出现分号错误
问题描述:
因此,我正在同时学习Access 2007,Visual Basic和SQL。不理想。Access中的简单SQL查询失败,出现分号错误
我将此代码附加到标准向导生成的界面中的按钮。我试图从tblA复制一行到tblB。每次执行代码时,我都会收到消息“Run-time error'3137'SQL语句末尾缺少分号(;)”。
我猜这是期待SQL语句在WHERE之前终止?但是,如果没有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
答
语法错误,您需要删除“VALUES”关键字。
这是假设ID,[名称],[某些值]和[其他值]是tblB的列名称(我最后两个名称有“价值”的一些犹豫)。
值()SQL语法是用来提供即时的价值,但因为你得到从TBLA值,查询应该是这样的:
strSQL = "INSERT INTO [tblB] " & _
"(ID, [Name], [Some value], [Some other value]) " & _
"SELECT * FROM tblA " & _
"WHERE ID = '" & Me.ID & "' " & _
";"
编辑:我也令牌之间添加空格。赶上尼克D,谢谢你注意到这一点!
答
mjv是正确的。您必须删除VALUES
关键字,你也应该把关键字之间的空间,即:
"SELECT * FROM tblA" & _
"WHERE ID = '" & Me.ID & "' " & _
的为"...FROM tblAWHERE ID..."
答
你的表后把字段名的值子句中,而不是上面将加盟名字,并且在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
良好的渔获物,尼克,我错过了这个“细节”。团队合作! – mjv 2009-10-06 06:49:34
团队合作可以创造奇迹;-) – 2009-10-06 07:04:27