在尝试删除不存在的表时执行Firedac TFDScript错误时出现了一个令人讨厌的错误:
调用FDScript.ExecuteAll时出错(它传递FDScript.ValidateAll没有任何问题)
我正在执行的代码如下:
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;
答案 0 :(得分:0)
实施似乎是正确的。引擎检查引发的异常是否为ekObjNotExists种,如果是,则DropNonexistObj属性已启用且命令类型为 DROP 或 ALTER ,它会记录到它的控制台。否则重新引发捕获的异常。
唯一的解释是,您正在看到调试器显示的异常消息对话框。即使对于已处理的异常,也会显示这些对话框(只要您不想将它们添加到忽略列表中或关闭此功能,您就不应该这样做。)