我正在使用Delphi XE2和AnyDAC和一个MSAccess数据库。
表“ timea”具有5个字段:
Rec_No AutoNumber 应用程序文本 User_ID文本 PW文本 注释备注
此代码将引发以下错误。该查询在Access查询设计器中工作正常。
sql := 'INSERT INTO [timea] (App, User_ID, PW, Comment) VALUES ("zoo", "Bill", "mi7", "Liger");'; adconnection1.ExecSQL(sql);
项目PWB.exe引发了带有消息’[AnyDAC] [Phys] [ODBC] [Microsoft] [ODBC Microsoft Access Driver]的异常类EMSAccessNativeException。参数太少。预期4.’。
SQL和Delphi都使用单引号作为字符串边界。既然你想有烧灼引号 内 的字符串,你要“逃跑”使用doube单引号吧。
例如,如果您编写S := 'Guns''N''Roses'该变量S将包含字符串Guns'N'Roses-12个字符,而不是14个字符。
S := 'Guns''N''Roses'
S
Guns'N'Roses
连接字符串值时要小心,因为它们也可能包含单引号。在这种情况下,推荐的查询写方法是:
sql := 'INSERT INTO Table (Col) VALUES (' + QuotedStr(Val) + ')';
函数QuotedStrwll会小心并且将字符串中的所有单引号引起来加倍。这对于避免插入黑客攻击也是必不可少的。
QuotedStr