TFDScriptを利用し、特定のエスケープ文字を含むSQLを実行すると、その文字が無視される
問題
TFDScriptコンポーネントを利用して、 & や ! などの特定のエスケープ文字を含むSQLを実行した時、その文字が無視されます。
以下は、そのコード例です。
with FDScript1.SQLScripts do
begin
with Add do
begin
Name := 'root';
SQL.Add('@data_insert1');
SQL.Add('@data_insert2');
end;
with Add do
begin
Name := 'data_insert1';
SQL.Add('insert into Sample(DATA) values(''abc|&|def123'')');
end;
with Add do
begin
Name := 'data_insert2';
SQL.Add('insert into Sample(DATA) values(''abc|!|def123'')');
end;
FDScript1.ExecuteAll;
end;
上記のFDScriptコンポーネントを実行すると、SampleテーブルのDATAフィールドに挿入される2件のデータの結果は、以下の通りです。
abc||def123
abc||def123
上記の結果のように & と ! の文字は無視されます。
解決
この問題を解決するためには、TFDScript.ScriptOptionsのMacroExpand=falseに変更してください。
「FireDAC.Comp.Script.TFDScriptOptions.MacroExpand」
https://docwiki.embarcadero.com/Libraries/ja/FireDAC.Comp.Script.TFDScriptOptions.MacroExpand