sg 25 роки тому
батько
коміт
2d79447687
3 змінених файлів з 42 додано та 6 видалено
  1. 21 1
      fcl/db/dataset.inc
  2. 14 3
      fcl/db/datasource.inc
  3. 7 2
      fcl/db/db.pp

+ 21 - 1
fcl/db/dataset.inc

@@ -1375,10 +1375,27 @@ begin
   Resync([]);
 end;
 
+procedure TDataSet.RecalcBufListSize;
+var
+  i, j, MaxValue: Integer;
+  DataLink: TDataLink;
+begin
+  MaxValue := 0;
+  for i := 0 to FDataSources.Count - 1 do
+    for j := 0 to TDataSource(FDataSources[i]).DataLinks.Count - 1 do
+    begin
+      DataLink := TDataLink(TDataSource(FDataSources[i]).DataLinks[j]);
+      if DataLink.BufferCount > MaxValue then
+        MaxValue := DataLink.BufferCount;
+    end;
+  SetBufListSize(MaxValue);
+end;
+
 Procedure TDataset.RegisterDataSource(ADatasource : TDataSource);
 
 begin
   FDatasources.Add(ADataSource);
+  RecalcBufListSize;
 end;
 
 
@@ -1569,7 +1586,10 @@ end;
 
 {
   $Log$
-  Revision 1.1.2.3  2000-12-23 23:23:49  sg
+  Revision 1.1.2.4  2001-01-11 23:46:28  sg
+  * Some bugfixes... :)
+
+  Revision 1.1.2.3  2000/12/23 23:23:49  sg
   * Fixed TDataSet.Destroy (array index was wrong)
 
   Revision 1.1.2.2  2000/12/23 10:10:21  michael

+ 14 - 3
fcl/db/datasource.inc

@@ -86,6 +86,7 @@ begin
         RecordChanged(TField(Info));
     deDataSetChange: 
       begin
+      SetActive(DataSource.DataSet.Active);
       CalcFirstRecord(Info);
       DatasetChanged;
       end;
@@ -216,6 +217,16 @@ begin
     end;
 end;
 
+procedure TDataLink.SetActive(AActive: Boolean);
+begin
+  if Active <> AActive then
+  begin
+    FActive := AActive;
+    // !!!: Set internal state
+    ActiveChanged;
+  end;
+end;
+
 Procedure TDataLink.SetDataSource(Value : TDatasource);
 
 begin
@@ -397,8 +408,8 @@ procedure TDatasource.RegisterDataLink(DataLink: TDataLink);
 
 begin
   FDatalinks.Add(DataLink);
-  If DataSet<>Nil then 
-    Dataset.SetBufListSize(Datalink.BufferCount);
+  if Assigned(DataSet) then
+    DataSet.RecalcBufListSize;
 end;
 
 
@@ -409,7 +420,7 @@ begin
     FDataset.UnRegisterDataSource(Self);
   If ADataset<>Nil Then
     ADataset.RegisterDatasource(Self);
-  FDataSet:=ADAtaset;  
+  FDataSet:=ADataset;  
   ProcessEvent(deUpdateState,0);
 end;
 

+ 7 - 2
fcl/db/db.pp

@@ -785,6 +785,7 @@ type
     Procedure DoInternalClose;
     Function  GetBuffer (Index : longint) : Pchar;
     Function  GetField (Index : Longint) : TField;
+    procedure RecalcBufListSize;
     Procedure RegisterDataSource(ADatasource : TDataSource);
     Procedure RemoveField (Field : TField);
     Procedure SetActive (Value : Boolean);
@@ -1007,7 +1008,8 @@ type
     Function  CalcFirstRecord(Index : Integer) : Integer;
     Procedure CheckActiveAndEditing;
     Function  GetDataset : TDataset;
-    procedure SetDataSource(Value : TDatasource);
+    procedure SetActive(AActive: Boolean);
+    procedure SetDataSource(Value: TDataSource);
     Procedure SetReadOnly(Value : Boolean);
   protected
     procedure ActiveChanged; virtual;
@@ -1403,7 +1405,10 @@ end.
 
 {
   $Log$
-  Revision 1.1.2.3  2000-12-23 23:26:45  sg
+  Revision 1.1.2.4  2001-01-11 23:46:28  sg
+  * Some bugfixes... :)
+
+  Revision 1.1.2.3  2000/12/23 23:26:45  sg
   * Added TField.DisplayText, and accordingly changed all arguments called
     DisplayText to ADisplayText