mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-10 02:28:22 +02:00
+ Fix for datasets with a Recordsize which will not fit in a word
git-svn-id: trunk@4086 -
This commit is contained in:
parent
138621c569
commit
4f93bec6e6
@ -160,12 +160,12 @@ begin
|
||||
if Result = grOK then
|
||||
begin
|
||||
|
||||
with PBufBookmark(Buffer + RecordSize)^ do
|
||||
with PBufBookmark(Buffer + FRecordSize)^ do
|
||||
begin
|
||||
BookmarkData := FCurrentRecBuf;
|
||||
BookmarkFlag := bfCurrent;
|
||||
end;
|
||||
move((pointer(FCurrentRecBuf)+sizeof(TBufRecLinkItem))^,buffer^,RecordSize);
|
||||
move((pointer(FCurrentRecBuf)+sizeof(TBufRecLinkItem))^,buffer^,FRecordSize);
|
||||
end
|
||||
else if (Result = grError) and doCheck then
|
||||
DatabaseError('No record');
|
||||
@ -190,27 +190,27 @@ end;
|
||||
|
||||
procedure TBufDataset.InternalSetToRecord(Buffer: PChar);
|
||||
begin
|
||||
FCurrentRecBuf := PBufBookmark(Buffer + RecordSize)^.BookmarkData;
|
||||
FCurrentRecBuf := PBufBookmark(Buffer + FRecordSize)^.BookmarkData;
|
||||
end;
|
||||
|
||||
procedure TBufDataset.SetBookmarkData(Buffer: PChar; Data: Pointer);
|
||||
begin
|
||||
PBufBookmark(Buffer + RecordSize)^.BookmarkData := pointer(Data^);
|
||||
PBufBookmark(Buffer + FRecordSize)^.BookmarkData := pointer(Data^);
|
||||
end;
|
||||
|
||||
procedure TBufDataset.SetBookmarkFlag(Buffer: PChar; Value: TBookmarkFlag);
|
||||
begin
|
||||
PBufBookmark(Buffer + RecordSize)^.BookmarkFlag := Value;
|
||||
PBufBookmark(Buffer + FRecordSize)^.BookmarkFlag := Value;
|
||||
end;
|
||||
|
||||
procedure TBufDataset.GetBookmarkData(Buffer: PChar; Data: Pointer);
|
||||
begin
|
||||
pointer(Data^) := PBufBookmark(Buffer + RecordSize)^.BookmarkData;
|
||||
pointer(Data^) := PBufBookmark(Buffer + FRecordSize)^.BookmarkData;
|
||||
end;
|
||||
|
||||
function TBufDataset.GetBookmarkFlag(Buffer: PChar): TBookmarkFlag;
|
||||
begin
|
||||
Result := PBufBookmark(Buffer + RecordSize)^.BookmarkFlag;
|
||||
Result := PBufBookmark(Buffer + FRecordSize)^.BookmarkFlag;
|
||||
end;
|
||||
|
||||
procedure TBufDataset.InternalGotoBookmark(ABookmark: Pointer);
|
||||
@ -440,7 +440,7 @@ begin
|
||||
begin
|
||||
if UpdateKind = ukModify then
|
||||
begin
|
||||
move(pchar(OldValuesBuffer+sizeof(TBufRecLinkItem))^,pchar(BookmarkData+sizeof(TBufRecLinkItem))^,RecordSize);
|
||||
move(pchar(OldValuesBuffer+sizeof(TBufRecLinkItem))^,pchar(BookmarkData+sizeof(TBufRecLinkItem))^,FRecordSize);
|
||||
FreeRecordBuffer(OldValuesBuffer);
|
||||
end
|
||||
else if UpdateKind = ukDelete then
|
||||
@ -577,7 +577,7 @@ begin
|
||||
FFirstRecBuf := FCurrentRecBuf;
|
||||
|
||||
// Link the newly created record buffer to the newly created TDataset record
|
||||
with PBufBookmark(ActiveBuffer + RecordSize)^ do
|
||||
with PBufBookmark(ActiveBuffer + FRecordSize)^ do
|
||||
begin
|
||||
BookmarkData := FCurrentRecBuf;
|
||||
BookmarkFlag := bfInserted;
|
||||
@ -599,7 +599,7 @@ begin
|
||||
begin
|
||||
// Update the oldvalues-buffer
|
||||
FUpdateBuffer[FCurrentUpdateBuffer].OldValuesBuffer := intAllocRecordBuffer;
|
||||
move(FCurrentRecBuf^,FUpdateBuffer[FCurrentUpdateBuffer].OldValuesBuffer^,RecordSize+sizeof(TBufRecLinkItem));
|
||||
move(FCurrentRecBuf^,FUpdateBuffer[FCurrentUpdateBuffer].OldValuesBuffer^,FRecordSize+sizeof(TBufRecLinkItem));
|
||||
FUpdateBuffer[FCurrentUpdateBuffer].UpdateKind := ukModify;
|
||||
end
|
||||
else
|
||||
@ -608,7 +608,7 @@ begin
|
||||
|
||||
CurrBuff := pchar(FCurrentRecBuf);
|
||||
inc(Currbuff,sizeof(TBufRecLinkItem));
|
||||
move(ActiveBuffer^,CurrBuff^,RecordSize);
|
||||
move(ActiveBuffer^,CurrBuff^,FRecordSize);
|
||||
end;
|
||||
|
||||
procedure TBufDataset.CalcRecordSize;
|
||||
|
Loading…
Reference in New Issue
Block a user