Explorar o código

+ Made TDataset.Setactive virtual
+ if a TSQLQuery is closed, the query is always unprepared (fix bug #4769)

git-svn-id: trunk@2441 -

joost %!s(int64=19) %!d(string=hai) anos
pai
achega
ab37e3f576
Modificáronse 2 ficheiros con 12 adicións e 1 borrados
  1. 1 1
      fcl/db/db.pp
  2. 11 0
      fcl/db/sqldb/sqldb.pp

+ 1 - 1
fcl/db/db.pp

@@ -970,7 +970,6 @@ type
     Function  GetField (Index : Longint) : TField;
     Procedure RegisterDataSource(ADatasource : TDataSource);
     Procedure RemoveField (Field : TField);
-    Procedure SetActive (Value : Boolean);
     Procedure SetField (Index : Longint;Value : TField);
     Procedure ShiftBuffersForward;
     Procedure ShiftBuffersBackward;
@@ -1040,6 +1039,7 @@ type
     procedure OpenCursor(InfoQuery: Boolean); virtual;
     procedure RefreshInternalCalcFields(Buffer: PChar); virtual;
     procedure RestoreState(const Value: TDataSetState);
+    Procedure SetActive (Value : Boolean); virtual;
     procedure SetBookmarkStr(const Value: TBookmarkStr); virtual;
     procedure SetBufListSize(Value: Longint);
     procedure SetChildOrder(Component: TComponent; Order: Longint); override;

+ 11 - 0
fcl/db/sqldb/sqldb.pp

@@ -206,6 +206,7 @@ type
     function  GetCanModify: Boolean; override;
     function ApplyRecUpdate(UpdateKind : TUpdateKind) : boolean; override;
     Function IsPrepared : Boolean; virtual;
+    Procedure SetActive (Value : Boolean); override;
     procedure SetFiltered(Value: Boolean); override;
     procedure SetFilterText(const Value: string); override;
   public
@@ -584,6 +585,16 @@ begin
   First;
 end;
 
+Procedure TSQLQuery.SetActive (Value : Boolean);
+
+begin
+  inherited SetActive(Value);
+// The query is UnPrepared, so that if a transaction closes all datasets
+// they also get unprepared
+  if not Value and IsPrepared then UnPrepare;
+end;
+
+
 procedure TSQLQuery.SetFiltered(Value: Boolean);
 
 begin