TFDScriptを利用し、特定のエスケープ文字を含むSQLを実行すると、その文字が無視される

提供: Support
移動先: 案内検索

問題

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