2009-10-06 177 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