mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-17 10:39:33 +02:00
parent
dfe9701dc4
commit
04bd5e208b
@ -163,6 +163,7 @@ type
|
||||
FBookmarkOfs :Integer;
|
||||
FSaveChanges :Boolean;
|
||||
FDefaultRecordLength:Cardinal;
|
||||
FDataOffset : Integer;
|
||||
protected
|
||||
function AllocRecordBuffer: PChar; override;
|
||||
procedure FreeRecordBuffer(var Buffer: PChar); override;
|
||||
@ -465,7 +466,7 @@ end;
|
||||
function TFixedFormatDataSet.GetRecord(Buffer: PChar; GetMode: TGetMode;
|
||||
DoCheck: Boolean): TGetResult;
|
||||
begin
|
||||
if (FData.Count < 1) then
|
||||
if (FData.Count < (1+FDataOffset)) then
|
||||
Result := grEOF
|
||||
else
|
||||
Result := TxtGetRecord(Buffer, GetMode);
|
||||
@ -542,12 +543,12 @@ begin
|
||||
else
|
||||
Inc(FCurRec);
|
||||
gmPrior:
|
||||
if FCurRec <= 0 then
|
||||
if FCurRec <= FDataOffset then
|
||||
Result := grBOF
|
||||
else
|
||||
Dec(FCurRec);
|
||||
gmCurrent:
|
||||
if (FCurRec < 0) or (FCurRec >= RecordCount) then
|
||||
if (FCurRec < FDataOffset) or (FCurRec >= RecordCount) then
|
||||
Result := grError;
|
||||
end;
|
||||
if (Result = grOk) then
|
||||
@ -851,7 +852,10 @@ begin
|
||||
if not IsCursorOpen then
|
||||
exit;
|
||||
if (FData.Count = 0) or (Trim(FData[0]) = '') then
|
||||
FirstLineAsSchema := FALSE
|
||||
begin
|
||||
FirstLineAsSchema := FALSE;
|
||||
FDataOffset:=0;
|
||||
end
|
||||
else if (Schema.Count = 0) or (FirstLineAsSchema) then
|
||||
begin
|
||||
Schema.Clear;
|
||||
@ -902,13 +906,18 @@ begin
|
||||
if FirstLineAsSchema then
|
||||
begin
|
||||
if (FData.Count < 2) then
|
||||
Result := grEOF
|
||||
begin
|
||||
if GetMode=gmPrior then
|
||||
Result := grBOF
|
||||
else
|
||||
Result := grEOF
|
||||
end
|
||||
else
|
||||
begin
|
||||
begin
|
||||
If (FCurrec=-1) and (GetMode=gmNext) then
|
||||
inc(FCurrec);
|
||||
Result := inherited GetRecord(Buffer, GetMode, DoCheck);
|
||||
if (Result = grOk) and (FCurRec = 0) then
|
||||
Result := inherited GetRecord(Buffer, GetMode, DoCheck);
|
||||
end;
|
||||
end;
|
||||
end
|
||||
else
|
||||
Result := inherited GetRecord(Buffer, GetMode, DoCheck);
|
||||
@ -1008,6 +1017,7 @@ procedure TSdfDataSet.SetFirstLineAsSchema(Value : Boolean);
|
||||
begin
|
||||
CheckInactive;
|
||||
FFirstLineAsSchema := Value;
|
||||
FDataOffset:=Ord(FFirstLineAsSchema);
|
||||
end;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user