Browse Source

Fix for 558c32a32da7bd69617497c16ce5f43628c9fcaf: make sure Triggers stringlist is freed

Reinier Olislagers 11 years ago
parent
commit
4571fa7b15
1 changed files with 35 additions and 31 deletions
  1. 35 31
      main.pas

+ 35 - 31
main.pas

@@ -2083,38 +2083,42 @@ begin
           'and RDB$Relation_Name = ' + QuotedStr(aTableName);
         SQLQuery1.Open;
         Triggers:= TStringList.Create;
-        with SQLQuery1 do
-        while not EOF do
-        begin
-          Triggers.Add(Fields[0].AsString);
-          Next;
-        end;
-        SQLQuery1.Close;
-        for j:= 0 to Triggers.Count - 1 do
-        begin
-          List.Clear;
-          dmSysTables.ScriptTrigger(dbIndex, Trim(Triggers[j]), List, True);
-
-          // Search for generators
-          Line:= '';
-          for i:= 0 to List.Count - 1 do
-            if Pos('gen_id', LowerCase(List[i])) > 0 then
-            begin
-              Line:= Copy(List[i], Pos('gen_id', LowerCase(List[i])), Length(List[i]));
-              System.Delete(Line, 1, Pos('(', Line));
-              Line:= Trim(Copy(Line, 1, Pos(', ', Line) - 1));
-            end;
-
-           // Script Generator
-           if Trim(Line) <> '' then
-           begin
-             QWindow.meQuery.Lines.Add('Create Generator ' + Line + ';');
-             QWindow.meQuery.Lines.Add('');
-           end;
-
-          QWindow.meQuery.Lines.AddStrings(List);
+        try
+          with SQLQuery1 do
+          while not EOF do
+          begin
+            Triggers.Add(Trim(Fields[0].AsString));
+            Next;
+          end;
+          SQLQuery1.Close;
+          for j:= 0 to Triggers.Count - 1 do
+          begin
+            List.Clear;
+            dmSysTables.ScriptTrigger(dbIndex, Triggers[j], List, True);
+
+            // Search for generators
+            Line:= '';
+            for i:= 0 to List.Count - 1 do
+              if Pos('gen_id', LowerCase(List[i])) > 0 then
+              begin
+                Line:= Copy(List[i], Pos('gen_id', LowerCase(List[i])), Length(List[i]));
+                System.Delete(Line, 1, Pos('(', Line));
+                Line:= Trim(Copy(Line, 1, Pos(', ', Line) - 1));
+              end;
+
+             // Script Generator
+             if Trim(Line) <> '' then
+             begin
+               QWindow.meQuery.Lines.Add('Create Generator ' + Line + ';');
+               QWindow.meQuery.Lines.Add('');
+             end;
+
+            QWindow.meQuery.Lines.AddStrings(List);
+          end;
+        finally
+          Triggers.Free;
         end;
-        Triggers.Free;
+
         QWindow.meQuery.Lines.Add('');
 
         // Script permissions