michael 22 лет назад
Родитель
Сommit
4fa00ba045
3 измененных файлов с 37 добавлено и 6 удалено
  1. 26 2
      fcl/db/datasource.inc
  2. 5 1
      fcl/db/db.pp
  3. 6 3
      fcl/db/dbase/dbf.pas

+ 26 - 2
fcl/db/datasource.inc

@@ -53,6 +53,7 @@ Procedure TDataLink.CheckBrowseMode;
 begin
 end;
 
+
 Function TDataLink.CalcFirstRecord(Index : Integer) : Integer;
 
 { recalculates index of first record in buffer,
@@ -79,6 +80,27 @@ begin
 end;
 
 
+Procedure TDataLink.CalcRange;
+var
+    aMax, aMin: integer;
+begin
+    aMin:= DataSet.FActiveRecord - FBufferCount + 1;
+    If aMin < 0 Then aMin:= 0;
+    aMax:= Dataset.FBufferCount - FBufferCount;
+    If aMax < 0 then aMax:= 0;
+        
+    If aMax>DataSet.FActiveRecord Then aMax:=DataSet.FActiveRecord;
+        
+    If FFirstRecord < aMin Then FFirstRecord:= aMin;
+    If FFirstrecord > aMax Then FFirstRecord:= aMax;
+        
+    If (FfirstRecord<>0) And
+       (DataSet.FActiveRecord - FFirstRecord < FBufferCount -1) Then
+        Dec(FFirstRecord, 1);
+
+end;
+
+
 Procedure TDataLink.DataEvent(Event: TDataEvent; Info: Longint);
 
 
@@ -217,8 +239,10 @@ begin
   If FBufferCount<>Value then
     begin
       FBufferCount:=Value;
-      If Active Then 
-        DataSet.SetBufferCount(Value); //Dataset.SetBufListSize(Value);
+      if Active then begin
+        DataSet.RecalcBufListSize;
+	CalcRange;
+      end;
     end;
 end;
 

+ 5 - 1
fcl/db/db.pp

@@ -1019,6 +1019,7 @@ type
     FVisualControl : Boolean;
     FDataSource : TDataSource;
     Function  CalcFirstRecord(Index : Integer) : Integer;
+    Procedure CalcRange;
     Procedure CheckActiveAndEditing;
     Function  GetDataset : TDataset;
     procedure SetActive(AActive: Boolean);
@@ -1458,7 +1459,10 @@ end.
 
 {
   $Log$
-  Revision 1.7  2003-02-20 19:30:28  michael
+  Revision 1.8  2003-05-08 21:52:41  michael
+  + Patch from Jesus Reyes
+
+  Revision 1.7  2003/02/20 19:30:28  michael
   + Fixes from Jesus Reyes
 
   Revision 1.6  2002/09/07 15:15:23  peter

+ 6 - 3
fcl/db/dbase/dbf.pas

@@ -647,10 +647,13 @@ begin
 end;
 
 procedure TPagedFile.Release;
+var
+    i: integer;
 begin
   dec(_cntuse);
   if _cntuse<=0 then begin
-    _PagedFiles.Delete(_PagedFiles.IndexOf(self));
+    i:=_PagedFiles.IndexOf(self);
+    if i>=0 then _PagedFiles.Delete(i);
     Free;
   end;
 end;
@@ -1107,11 +1110,11 @@ begin
       end;
     ftFloat:
       begin
-        Double(Dst^) := DBFStrToFloat(s);
+        Extended(Dst^) := DBFStrToFloat(s);
       end;
     ftCurrency:
       begin
-        Double(Dst^) := DBFStrToFloat(s);
+        Extended(Dst^) := DBFStrToFloat(s);
       end;
     ftDate:
       begin