+ re-implemented RecNo and Recordcount

+ fix in the result of GetNextPacket

git-svn-id: trunk@3123 -
This commit is contained in:
joost 2006-04-02 18:34:25 +00:00
parent 0a1275dcf7
commit dbf5a5e378
2 changed files with 45 additions and 11 deletions

View File

@ -63,8 +63,7 @@ procedure TBufDataset.InternalOpen;
begin
CalcRecordSize;
// FBRecordcount := 0;
// FBDeletedRecords := 0;
FBRecordcount := 0;
FFirstRecBuf := pointer(IntAllocRecordBuffer);
FLastRecBuf := FFirstRecBuf;
@ -242,14 +241,17 @@ var i : integer;
pb : pchar;
begin
for i := 0 to FPacketRecords-1 do
i := 0;
pb := pchar(pointer(FLastRecBuf)+sizeof(TBufRecLinkItem));
while (i < FPacketRecords) and (loadbuffer(pb) = grOk) do
begin
FLastRecBuf^.next := pointer(IntAllocRecordBuffer);
FLastRecBuf^.next^.prior := FLastRecBuf;
FLastRecBuf := FLastRecBuf^.next;
pb := pchar(pointer(FLastRecBuf)+sizeof(TBufRecLinkItem));
if (loadbuffer(pb)<>grOk) then break;
PBufRecLinkItem(FLastRecBuf)^.next := pointer(IntAllocRecordBuffer);
PBufRecLinkItem(PBufRecLinkItem(FLastRecBuf)^.next)^.prior := FLastRecBuf;
FLastRecBuf := PBufRecLinkItem(FLastRecBuf)^.next;
inc(i);
end;
FBRecordCount := FBRecordCount + i;
result := i;
end;
@ -409,6 +411,7 @@ begin
FreeRecordBuffer(pchar(RecToDelete));
end;
dec(FBRecordCount);
FUpdateBuffer[FCurrentUpdateBuffer].UpdateKind := ukDelete;
end;
@ -452,7 +455,7 @@ var SaveBookmark : pchar;
begin
CheckBrowseMode;
// There is no bookmark available if the dataset is empty
if not IsEmpty then
GetBookmarkData(ActiveBuffer,@SaveBookmark);
@ -524,6 +527,8 @@ begin
BookmarkData := FCurrentRecBuf;
BookmarkFlag := bfInserted;
end;
inc(FBRecordCount);
end
else
GetBookmarkData(ActiveBuffer,@FCurrentRecBuf);
@ -583,14 +588,41 @@ end;
procedure TBufDataset.SetRecNo(Value: Longint);
var recnr : integer;
TmpRecBuffer : PBufRecLinkItem;
begin
GotoBookmark(@value);
if value > RecordCount then
begin
repeat until (getnextpacket < FPacketRecords) or (value <= RecordCount);
if value > RecordCount then
begin
DatabaseError(SNoSuchRecord,self);
exit;
end;
end;
TmpRecBuffer := FFirstRecBuf;
for recnr := 1 to value-1 do
TmpRecBuffer := TmpRecBuffer^.next;
GotoBookmark(TmpRecBuffer);
end;
function TBufDataset.GetRecNo: Longint;
Var SearchRecBuffer : PBufRecLinkItem;
TmpRecBuffer : PBufRecLinkItem;
recnr : integer;
begin
// GetBookmarkData(ActiveBuffer,@Result);
GetBookmarkData(ActiveBuffer,@SearchRecBuffer);
TmpRecBuffer := FFirstRecBuf;
recnr := 1;
while TmpRecBuffer <> SearchRecBuffer do
begin
inc(recnr);
TmpRecBuffer := TmpRecBuffer^.next;
end;
result := recnr;
end;
function TBufDataset.IsCursorOpen: Boolean;
@ -602,7 +634,8 @@ end;
Function TBufDataset.GetRecordCount: Longint;
begin
// Result := FBRecordCount-FBDeletedRecords;
if state <> dsInsert then Result := FBRecordCount
else Result := FBRecordCount+1;
end;
Function TBufDataset.Locate(const KeyFields: string; const KeyValues: Variant; options: TLocateOptions) : boolean;

View File

@ -1498,6 +1498,7 @@ type
FCurrentRecBuf : PBufRecLinkItem;
FLastRecBuf : PBufRecLinkItem;
FFirstRecBuf : PBufRecLinkItem;
FBRecordCount : integer;
FPacketRecords : integer;
FRecordSize : Integer;