我使用Delphi XE2和AnyDAC以及MSAccess数据库。
表' timea'有5个字段:
Rec_No自动编号
应用文字
User_ID文本
PW文字
评论备忘录
此代码抛出以下错误。该查询在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。'。
答案 0 :(得分:0)
SQL和Delphi都使用单引号作为字符串边界。既然你想在字符串中输入,那么你必须"转义"它使用doube单引号。
例如,如果你写S := 'Guns''N''Roses'
,变量S
将包含字符串Guns'N'Roses
- 12个字符,而不是14个。
连接字符串值时要小心,因为它们也可能包含单引号。在这种情况下编写查询的推荐方法是,例如:
sql := 'INSERT INTO Table (Col) VALUES (' + QuotedStr(Val) + ')';
函数QuotedStr
将小心并将字符串中的所有单引号加倍。这对于避免插入黑客也很重要。