瀏覽代碼

* Tdataset.SetBufListSize(0) should clear the buffer
* A closed dataset should have FRecordcound set to 0 (+added test)
* Fix for bug #8228

git-svn-id: trunk@6256 -

joost 18 年之前
父節點
當前提交
31636e3887
共有 2 個文件被更改,包括 30 次插入2 次删除
  1. 3 2
      fcl/db/dataset.inc
  2. 27 0
      fcl/dbtests/testdbbasics.pas

+ 3 - 2
fcl/db/dataset.inc

@@ -411,7 +411,7 @@ begin
   DoBeforeClose;
   FreeFieldBuffers;
   ClearBuffers;
-  SetBufListSize(-1);
+  SetBufListSize(0);
   SetState(dsInactive);
   InternalClose;
   DoAfterClose;
@@ -902,6 +902,7 @@ Procedure TDataset.SetBufListSize(Value: Longint);
 Var I : longint;
 
 begin
+  if Value = 0 then Value := -1;
 {$ifdef dsdebug}
   Writeln ('SetBufListSize: ',Value);
 {$endif}
@@ -965,10 +966,10 @@ begin
       else
         ReAllocMem(FBuffers,(Value+1)*SizeOf(Pchar));
       end;
-    if FRecordcount > Value then FRecordcount := Value;
     end;
   If Value=-1 then
     Value:=0;
+  if FRecordcount > Value then FRecordcount := Value;
   FBufferCount:=Value;
 {$ifdef dsdebug}
   Writeln ('   SetBufListSize: Final FBufferCount=',FBufferCount);

+ 27 - 0
fcl/dbtests/testdbbasics.pas

@@ -56,6 +56,7 @@ type
     procedure TestDataEventsResync;
     procedure TestBug7007;
     procedure TestBug6893;
+    procedure TestRecordcountAfterReopen;  // partly bug 8228
     procedure TestdeFieldListChange;
     procedure TestLastAppendCancel;        // bug 5058
     procedure TestRecNo;                   // bug 5061
@@ -477,6 +478,32 @@ begin
     end;
 end;
 
+procedure TTestDBBasics.TestRecordcountAfterReopen;
+var
+  datalink1: tdatalink;
+  datasource1: tdatasource;
+  query1: TDataSet;
+
+begin
+  query1:= DBConnector.GetNDataset(11);
+  datalink1:= TDataLink.create;
+  datasource1:= tdatasource.create(nil);
+  try
+    datalink1.datasource:= datasource1;
+    datasource1.dataset:= query1;
+
+    query1.active := true;
+    query1.active := False;
+    AssertEquals(0, THackDataLink(datalink1).RecordCount);
+    query1.active := true;
+    AssertTrue(THackDataLink(datalink1).RecordCount>0);
+    query1.active := false;
+  finally
+    datalink1.free;
+    datasource1.free;
+  end;
+end;
+
 procedure TTestDBBasics.TestStringFilter;
 var tel : byte;
 begin