【问题标题】:ADOQuery SQL Syntax error in INSERT INTO StatementINSERT INTO 语句中的 ADOQuery SQL 语法错误
【发布时间】:2012-05-24 06:35:21
【问题描述】:

调用此查询时,我在运行时不断收到语法错误。

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')

【问题讨论】:

  • 这只是所以错了。请在parameterized queries 上进行一些搜索,而不是进行所有字符串连接。你会为自己省去大量的麻烦,并使你的代码更干净、更清晰、更安全。

标签: sql delphi


【解决方案1】:

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')

【讨论】:

  • 我厌倦了使用值和值,还将 var DESC 更改为描述,同样的错误..
  • @GlenMorse:你试过我写的查询吗?我也用括号表示Read
  • @GlenMorse:您不应该更改您的 var 名称,而是您的查询!保留字在您的查询中...
【解决方案2】:

Reserved Word DESCbrackets 括起来

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;

【讨论】:

    【解决方案3】:

    使用Values 而不是value
    Desc 和 Read 是保留关键字,因此请将 then 括在方括号中。
    你忘了在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') 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多