Browse Source

fcl-db: sqldb: keep in synchro Database/Transaction when changing Database/Transaction, but only when NEW Database.Transaction or Transaction.Database is assigned. After discussion in DB-Core modifies rev. 30483. Bug #27805

git-svn-id: trunk@30494 -
lacak 10 years ago
parent
commit
b8f8e61957
1 changed files with 5 additions and 5 deletions
  1. 5 5
      packages/fcl-db/src/sqldb/sqldb.pp

+ 5 - 5
packages/fcl-db/src/sqldb/sqldb.pp

@@ -861,7 +861,7 @@ begin
     begin
     begin
     FDatabase.FreeNotification(Self);
     FDatabase.FreeNotification(Self);
     FDatabase.RegisterStatement(Self);
     FDatabase.RegisterStatement(Self);
-    if not Assigned(Transaction) or (Transaction.DataBase <> Database) then
+    if Assigned(Database.Transaction) and (not Assigned(Transaction) or (Transaction.DataBase <> Database)) then
       Transaction := Database.Transaction;
       Transaction := Database.Transaction;
     OnChangeSQL(Self);
     OnChangeSQL(Self);
     end;
     end;
@@ -877,8 +877,8 @@ begin
   if Assigned(FTransaction) then
   if Assigned(FTransaction) then
     begin
     begin
     FTransaction.FreeNotification(Self);
     FTransaction.FreeNotification(Self);
-    if Database <> Transaction.DataBase then
-      Database := Transaction.Database as TSQLConnection;
+    if Assigned(Transaction.DataBase) and (Database <> Transaction.DataBase) then
+      Database := Transaction.DataBase as TSQLConnection;
     end;
     end;
 end;
 end;
 
 
@@ -2299,7 +2299,7 @@ begin
   If Assigned(FStatement) then
   If Assigned(FStatement) then
     FStatement.Database := DB;
     FStatement.Database := DB;
   inherited;
   inherited;
-  if Assigned(DB) and Assigned(DB.Transaction) and (not Assigned(Transaction) or (Transaction.DataBase<>Value)) then
+  if Assigned(DB) and Assigned(DB.Transaction) and (not Assigned(Transaction) or (Transaction.DataBase<>Database)) then
     Transaction := DB.Transaction;
     Transaction := DB.Transaction;
 end;
 end;
 
 
@@ -2311,7 +2311,7 @@ begin
   inherited;
   inherited;
   If Assigned(FStatement) then
   If Assigned(FStatement) then
     FStatement.Transaction := TSQLTransaction(Value);
     FStatement.Transaction := TSQLTransaction(Value);
-  If Assigned(Transaction) and (Database<>Transaction.DataBase) then
+  If Assigned(Transaction) and Assigned(Transaction.DataBase) and (Database<>Transaction.DataBase) then
     Database := Transaction.Database;
     Database := Transaction.Database;
 end;
 end;