FireDAC TFDScript error trying to drop a non-existent table
02:08 28 Feb 2017

I have a nasty error when executing a Firedac TFDScript error trying to drop a non-existent table:

  • Delphi Berlin 10.1 Upd 2
  • Database Firebird 2.5

It give an error when calling FDScript.ExecuteAll (it passes the FDScript.ValidateAll without any problem)

The code I am executing is as follows:

FDScript: TFDScript;

{...}

begin
  FDScript.ScriptOptions.Reset;
  FDScript.SQLScripts.Clear;
  FDScript.SQLScriptFileName := '';
  FDScript.ScriptOptions.CommandSeparator := ';';
  FDScript.ScriptOptions.CommitEachNCommands := 1;
  FDScript.ScriptOptions.DropNonexistObj := True;  // seems to ignore this directive

  FDConnection.StartTransaction;
  try
    FDScript.SQLScripts.Add.SQL.Add('drop table countries;');     

    FDScript.ValidateAll; // no errors here

    ScriptStatus := GetEnumName(TypeInfo(TFDScriptStatus), Ord(FDScript.Status));
    if FDScript.Status = ssFinishSuccess then begin

      FDScript.ExecuteAll; // ERROR HERE! TABLE COUNTRIES DOES NOT EXIXTS

      if FDScript.TotalErrors = 0 then begin
        FDConnection.Commit;
      end
      else begin
        FDConnection.Rollback;
      end;
    end
    else begin
      FDConnection.Rollback;
    end;
  except
    FDConnection.Rollback;
    raise;
  end;
end;
delphi firedac delphi-10.1-berlin