2009-10-06 176 views
2

因此,我正在同时学习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 

回答

3

语法错误,您需要删除“VALUES”关键字。
这是假设ID,[名称],[某些值]和[其他值]是tblB的列名称(我最后两个名称有“价值”的一些犹豫)。
值()SQL语法是用来提供即时的价值,但因为你得到从TBLA值,查询应该是这样的:

strSQL = "INSERT INTO [tblB] " & _ 
    "(ID, [Name], [Some value], [Some other value]) " & _ 
    "SELECT * FROM tblA " & _ 
    "WHERE ID = '" & Me.ID & "' " & _ 
    ";" 

编辑:我也令牌之间添加空格。赶上尼克D,谢谢你注意到这一点!

0

mjv是正确的。您必须删除VALUES关键字,你也应该把关键字之间的空间,即:

"SELECT * FROM tblA" & _ 
"WHERE ID = '" & Me.ID & "' " & _ 

的为"...FROM tblAWHERE ID..."

+0

良好的渔获物,尼克,我错过了这个“细节”。团队合作! – mjv 2009-10-06 06:49:34

+0

团队合作可以创造奇迹;-) – 2009-10-06 07:04:27

2

你的表后把字段名的值子句中,而不是上面将加盟名字,并且在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