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