Parcourir la source

* Avoid second exception while handling the first

git-svn-id: trunk@10844 -
joost il y a 17 ans
Parent
commit
596f8f5bbb
2 fichiers modifiés avec 34 ajouts et 25 suppressions
  1. 33 24
      packages/fcl-db/tests/sqldbtoolsunit.pas
  2. 1 1
      packages/fcl-db/tests/toolsunit.pas

+ 33 - 24
packages/fcl-db/tests/sqldbtoolsunit.pas

@@ -235,26 +235,32 @@ end;
 
 procedure TSQLDBConnector.DropNDatasets;
 begin
-  try
-    if Ftransaction.Active then Ftransaction.Rollback;
-    Ftransaction.StartTransaction;
-    Fconnection.ExecuteDirect('DROP TABLE FPDEV');
-    Ftransaction.Commit;
-  Except
-    if Ftransaction.Active then Ftransaction.Rollback
-  end;
+  if assigned(FTransaction) then
+    begin
+    try
+      if Ftransaction.Active then Ftransaction.Rollback;
+      Ftransaction.StartTransaction;
+      Fconnection.ExecuteDirect('DROP TABLE FPDEV');
+      Ftransaction.Commit;
+    Except
+      if Ftransaction.Active then Ftransaction.Rollback
+    end;
+    end;
 end;
 
 procedure TSQLDBConnector.DropFieldDataset;
 begin
-  try
-    if Ftransaction.Active then Ftransaction.Rollback;
-    Ftransaction.StartTransaction;
-    Fconnection.ExecuteDirect('DROP TABLE FPDEV_FIELD');
-    Ftransaction.Commit;
-  Except
-    if Ftransaction.Active then Ftransaction.Rollback
-  end;
+  if assigned(FTransaction) then
+    begin
+    try
+      if Ftransaction.Active then Ftransaction.Rollback;
+      Ftransaction.StartTransaction;
+      Fconnection.ExecuteDirect('DROP TABLE FPDEV_FIELD');
+      Ftransaction.Commit;
+    Except
+      if Ftransaction.Active then Ftransaction.Rollback
+    end;
+    end;
 end;
 
 function TSQLDBConnector.InternalGetNDataset(n: integer): TDataset;
@@ -279,14 +285,17 @@ end;
 
 destructor TSQLDBConnector.Destroy;
 begin
-  try
-    if Ftransaction.Active then Ftransaction.Rollback;
-    Ftransaction.StartTransaction;
-    Fconnection.ExecuteDirect('DROP TABLE FPDEV2');
-    Ftransaction.Commit;
-  Except
-    if Ftransaction.Active then Ftransaction.Rollback
-  end;
+  if assigned(FTransaction) then
+    begin
+    try
+      if Ftransaction.Active then Ftransaction.Rollback;
+      Ftransaction.StartTransaction;
+      Fconnection.ExecuteDirect('DROP TABLE FPDEV2');
+      Ftransaction.Commit;
+    Except
+      if Ftransaction.Active then Ftransaction.Rollback
+    end; // try
+    end;
   inherited Destroy;
 
   FreeAndNil(FQuery);

+ 1 - 1
packages/fcl-db/tests/toolsunit.pas

@@ -176,7 +176,7 @@ end;
 
 destructor TDBConnector.destroy;
 begin
-  FUsedDatasets.Destroy;
+  if assigned(FUsedDatasets) then FUsedDatasets.Destroy;
   DropNDatasets;
   DropFieldDataset;
 end;