2012-05-24 91 views
2

當調用此查詢時,我在運行期間不斷收到語法錯誤。ADOQuery INSERT INTO語句中的SQL語法錯誤

adoquery1.Active := false; 
adoquery1.SQL.Clear; 
SQLQuery := 'INSERT INTO Comics '; 
SQLQuery := SQLQuery + '(Name,Issue,Series,Volume,Poster,'; 
SQLQuery := SQLQuery + 'Desc,Writer,Artist,Read,Link,Extra) '; 
SQLQuery := SQLQuery + 'VALUE('+ quotedstr(SeriesName+' '+IssueNumber); 
SQLQuery := SQLQuery + ','+ quotedstr(IssueNumber); 
SQLQuery := SQLQuery + ','+ quotedstr(SeriesName); 
SQLQuery := SQLQuery + ','+ quotedstr(VolumeNumber); 
SQLQuery := SQLQuery + ','+ quotedstr(Poster); 
SQLQuery := SQLQuery + ','+ quotedstr(Desc); 
SQLQuery := SQLQuery + ','+ quotedstr(Writer); 
SQLQuery := SQLQuery + ','+ quotedstr(Artist); 
SQLQuery := SQLQuery + ','+ quotedstr(haveRead); 
SQLQuery := SQLQuery + ','+ quotedstr(filelink); 
SQLQuery := SQLQuery + ','+ quotedstr(Extra); 
SQLQuery := SQLQuery + ')'; 
memo1.Text := SQLQuery; 
adoquery1.SQL.Add(SQLQuery); 
adoquery1.Active := true; 

當我做memo1.text = sqlquery,它看起來沒問題,有什麼建議嗎? 這是我在memo1.text得到..

INSERT INTO Comics (Name,Issue,Series,Volume,Poster,Desc,Writer,Artist,Read,Link,Extra VALUE('xmen 8','8','xmen','1','na','Some Description','BOBwriter','BOBArtist','Yes','C:\Comics\xmen8.cbr','Some Extra info') 
+0

這只是**如此**錯誤。請在'參數化查詢'上進行一些搜索,而不是進行所有的字符串連接。您將節省大量的麻煩,使您的代碼更清潔,更清晰,更安全。 –

回答

5

Desc是一個保留字,所以你應該使用[Desc]或反引號括起來(我不知道你使用的數據庫)。
更多:我認爲它應該是VALUES(而不是VALUE(

INSERT INTO Comics 
    (Name, Issue, Series, Volume, Poster, [Desc], 
    Writer, Artist, [Read], Link, Extra) 
VALUES 
    ('xmen 8', '8', 'xmen', '1', 'na', 'Some Description', 
    'BOBwriter', 'BOBArtist', 'Yes', 'C:\Comics\xmen8.cbr','Some Extra info') 
+0

我厭倦了使用值和值,還將var DESC更改爲Descrip,相同的錯誤。 –

+0

@GlenMorse:你試過我寫的查詢嗎?我也使用括號'Read' – Marco

+0

@GlenMorse:你不應該改變你的var名稱,但你的查詢!保留字是在你的查詢內... – Marco

3

括起來Reserved WordDESCbrackets

adoquery1.Active := false; 
adoquery1.SQL.Clear; 
SQLQuery := 'INSERT INTO Comics '; 
SQLQuery := SQLQuery + '(Name,Issue,Series,Volume,Poster,'; 
SQLQuery := SQLQuery + '[Desc],Writer,Artist,[Read],Link,Extra) '; 
SQLQuery := SQLQuery + 'VALUES ('+ quotedstr(SeriesName+' '+IssueNumber); 
SQLQuery := SQLQuery + ','+ quotedstr(IssueNumber); 
SQLQuery := SQLQuery + ','+ quotedstr(SeriesName); 
SQLQuery := SQLQuery + ','+ quotedstr(VolumeNumber); 
SQLQuery := SQLQuery + ','+ quotedstr(Poster); 
SQLQuery := SQLQuery + ','+ quotedstr(Desc); 
SQLQuery := SQLQuery + ','+ quotedstr(Writer); 
SQLQuery := SQLQuery + ','+ quotedstr(Artist); 
SQLQuery := SQLQuery + ','+ quotedstr(haveRead); 
SQLQuery := SQLQuery + ','+ quotedstr(filelink); 
SQLQuery := SQLQuery + ','+ quotedstr(Extra); 
SQLQuery := SQLQuery + ')'; 
memo1.Text := SQLQuery; 
adoquery1.SQL.Add(SQLQuery); 
adoquery1.Active := true; 
2

使用Values代替value
說明和讀取是保留的關鍵字,請將其括在方括號中。
您忘記在Values關鍵字前繼續關閉括號。

INSERT INTO Comics 
      (Name, 
      Issue, 
      Series, 
      Volume, 
      Poster, 
      [Desc], 
      Writer, 
      Artist, 
      [Read], 
      Link, 
      Extra) 
VALUES  ('xmen 8', 
      '8', 
      'xmen', 
      '1', 
      'na', 
      'Some Description', 
      'BOBwriter', 
      'BOBArtist', 
      'Yes', 
      'C:\Comics\xmen8.cbr', 
      'Some Extra info')