项目CompetitionServer.exe引发了异常类ESQLiteException,并显示消息'执行SQL时出错 错误[1]:SQL错误或缺少数据库 “INSERT INTO MatchesTable(MatchesID,RoundID,AkaFirstName,AoFirstName)VALUES(1,2,p,o)”:没有这样的列:p'。流程停止了。使用步骤或运行继续。
是的,p不是列,它是我试图插入的数据。我该如何解决这个问题?
答案 0 :(得分:3)
在SQL中,作为数据的字符串常量必须用引号括起来。否则,字符串将被解释为关键字,表名或列名,这就是这里发生的事情。使用'p'代替普通p。
答案 1 :(得分:2)
你的值'p'是一个常数,所以你需要把它放在引号中。所以声明必须是
INSERT INTO MatchesTable(MatchesID,RoundID,AkaFirstName,AoFirstName)VALUES(1,2,'p','o')
答案 2 :(得分:2)
您必须使用SQL参数。标准的Delphi方法:
Query1.SQL.Text := 'INSERT INTO MatchesTable(MatchesID,RoundID,AkaFirstName,AoFirstName)VALUES(1,2,:p,:o)';
Query1.Params[0].Value := ...;
Query1.Params[1].Value := ...;
Query1.ExecSQL;
但细节可能取决于您使用的数据访问组件。