2

我正在使用 Delphi XE2 和 AnyDAC 以及一个 MSAccess 数据库。

表“timea”有 5 个字段:

Rec_No AutoNumber
App text
User_ID text
PW text
Comment memo

此代码引发以下错误。该查询在 Access 查询设计器中运行良好。

sql := 'INSERT INTO [timea] (App, User_ID, PW, Comment) VALUES ("zoo", "Bill", "mi7", "Liger");';
adconnection1.ExecSQL(sql);

项目 PWB.exe 引发异常类 EMSAccessNativeException,消息为“[AnyDAC][Phys][ODBC][Microsoft][ODBC Microsoft Access Driver] 参数太少。预计 4.'。

4

1 回答 1

0

SQL 和 Delphi 都使用单引号作为字符串边界。由于您想在字符串中包含单引号因此您必须使用双引号“转义”它。

例如,如果您编写S := 'Guns''N''Roses'的变量S将包含字符串Guns'N'Roses- 12 个字符,而不是 14 个字符。

连接字符串值时要小心,因为它们也可能包含单引号。在这种情况下,推荐的编写查询的方法是,例如:

sql := 'INSERT INTO Table (Col) VALUES (' + QuotedStr(Val) + ')';

函数QuotedStr会小心处理字符串中的所有单引号。这对于避免插入黑客也是必不可少的。

于 2014-08-19T11:16:49.817 回答