Gor*_*ner 1 delphi sqlite firedac
我正在尝试将另一个数据库中的记录加载到 SQLite 中。我正在使用 Delphi 10.4 (Firemonkey) 和 FireDAC 查询组件。当我将以下查询字符串传递给 Query 组件时:
INSERT INTO BrandName (BrandName, WebSite, Email) values ("Mount It!", "", "")
Run Code Online (Sandbox Code Playgroud)
它失败,但有以下异常:
Project MigrateData.exe raised exception class ESQLiteNativeException with message '[FireDAC][Phys][SQLite] Error: 2 values for 3 columns'.
Run Code Online (Sandbox Code Playgroud)
当我删除“!” 从文件中的记录来看,它会正常处理,如果我在 SQLite DB 浏览器中运行此查询,它也会正常执行。
我正在使用 sqlite3.dll 版本 3.36。这是我正在使用的代码,以防万一:
with MemDataMod.BrandTable do begin
First;
while not EOF do begin
SQLStr := 'INSERT INTO BrandName (BrandName, WebSite, Email)'
+ ' values ("' + FieldByName('BrandName').AsString + '", "'
+ FieldByName('WebSite').AsString + '", "'
+ FieldByName('Email').AsString + '")';
MySQLDB.BlankQuery.SQL.Clear;
MySQLDB.BlankQuery.SQL.Append(SQLStr);
MySQLDB.BlankQuery.ExecSQL;
Next;
end;
end;
Run Code Online (Sandbox Code Playgroud)
我无法想象为什么“!” 会有所作为,但它似乎。任何帮助,将不胜感激。
该!(惊叹号)字符,和其他几个人,需要FireDAC SQL特殊处理,因为他们有它特殊的含义。
这在预处理命令文本 (FireDAC)文档的“特殊字符处理”部分中有完整记录,请参阅该部分中的 ResourceOptions MacroCreate、MacroExpand、EscapeExpand属性。
顺便说一句,通过连接包含用户输入或从中派生的字段值的文本来构建 SQL 是一个坏主意,因为它容易受到SQL 注入攻击。