Triggers need to be exported after tables, just like views. Fixes issue #2077.

This commit is contained in:
Ansgar Becker
2010-07-14 10:58:53 +00:00
parent aad99190ae
commit b97c41bc6c

View File

@ -434,7 +434,7 @@ end;
procedure TfrmTableTools.Execute(Sender: TObject); procedure TfrmTableTools.Execute(Sender: TObject);
var var
DBNode, TableNode: PVirtualNode; DBNode, TableNode: PVirtualNode;
DBObjects, Views: TDBObjectList; DBObjects, LateObjects: TDBObjectList;
DBObj: TDBObject; DBObj: TDBObject;
i: Integer; i: Integer;
ProcessNodeFunc: procedure(DBObj: TDBObject) of Object; ProcessNodeFunc: procedure(DBObj: TDBObject) of Object;
@ -450,15 +450,15 @@ begin
FToolMode := tmBulkTableEdit; FToolMode := tmBulkTableEdit;
ResultGrid.Clear; ResultGrid.Clear;
FResults.Clear; FResults.Clear;
Views := TDBObjectList.Create; LateObjects := TDBObjectList.Create;
Views.OwnsObjects := False; // So we can .Free that object afterwards without loosing the contained objects LateObjects.OwnsObjects := False; // So we can .Free that object afterwards without loosing the contained objects
TreeObjects.SetFocus; TreeObjects.SetFocus;
ProcessNodeFunc := nil; ProcessNodeFunc := nil;
FHeaderCreated := False; FHeaderCreated := False;
DBNode := TreeObjects.GetFirstChild(TreeObjects.GetFirst); DBNode := TreeObjects.GetFirstChild(TreeObjects.GetFirst);
while Assigned(DBNode) do begin while Assigned(DBNode) do begin
if not (DBNode.CheckState in [csUncheckedNormal, csUncheckedPressed]) then begin if not (DBNode.CheckState in [csUncheckedNormal, csUncheckedPressed]) then begin
Views.Clear; LateObjects.Clear;
TableNode := TreeObjects.GetFirstChild(DBNode); TableNode := TreeObjects.GetFirstChild(DBNode);
while Assigned(TableNode) do begin while Assigned(TableNode) do begin
if (csCheckedNormal in [TableNode.CheckState, DBNode.CheckState]) and (TableNode.CheckType <> ctNone) then begin if (csCheckedNormal in [TableNode.CheckState, DBNode.CheckState]) and (TableNode.CheckType <> ctNone) then begin
@ -473,8 +473,8 @@ begin
tmBulkTableEdit: ProcessNodeFunc := DoBulkTableEdit; tmBulkTableEdit: ProcessNodeFunc := DoBulkTableEdit;
end; end;
// Views have to be exported at the very end so at least all needed tables are ready when a view gets imported // Views have to be exported at the very end so at least all needed tables are ready when a view gets imported
if DBObj.NodeType = lntView then if DBObj.NodeType in [lntView, lntTrigger] then
Views.Add(DBObj) LateObjects.Add(DBObj)
else else
ProcessNodeFunc(DBObj); ProcessNodeFunc(DBObj);
except on E:EDatabaseError do except on E:EDatabaseError do
@ -489,11 +489,11 @@ begin
end; // End of db object node loop in db end; // End of db object node loop in db
// Special block for late created views in export mode // Special block for late created views in export mode
for i:=0 to Views.Count-1 do begin for i:=0 to LateObjects.Count-1 do begin
try try
ProcessNodeFunc(Views[i]); ProcessNodeFunc(LateObjects[i]);
except on E:EDatabaseError do except on E:EDatabaseError do
AddNotes(Views[i].Database, Views[i].Name, 'error', E.Message); AddNotes(LateObjects[i].Database, LateObjects[i].Name, 'error', E.Message);
end; end;
end; end;