* 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 -
This commit is contained in:
joost 2007-01-28 20:41:09 +00:00
parent 87b2630684
commit 31636e3887
2 changed files with 30 additions and 2 deletions

View File

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

View File

@ -56,6 +56,7 @@ type
procedure TestDataEventsResync; procedure TestDataEventsResync;
procedure TestBug7007; procedure TestBug7007;
procedure TestBug6893; procedure TestBug6893;
procedure TestRecordcountAfterReopen; // partly bug 8228
procedure TestdeFieldListChange; procedure TestdeFieldListChange;
procedure TestLastAppendCancel; // bug 5058 procedure TestLastAppendCancel; // bug 5058
procedure TestRecNo; // bug 5061 procedure TestRecNo; // bug 5061
@ -477,6 +478,32 @@ begin
end; end;
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; procedure TTestDBBasics.TestStringFilter;
var tel : byte; var tel : byte;
begin begin