git-svn-id: trunk@15856 -
This commit is contained in:
michael 2010-08-19 17:49:40 +00:00
parent dfe9701dc4
commit 04bd5e208b

View File

@ -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,13 +906,18 @@ begin
if FirstLineAsSchema then if FirstLineAsSchema then
begin begin
if (FData.Count < 2) then if (FData.Count < 2) then
Result := grEOF begin
if GetMode=gmPrior then
Result := grBOF
else
Result := grEOF
end
else else
begin begin
If (FCurrec=-1) and (GetMode=gmNext) then
inc(FCurrec);
Result := inherited GetRecord(Buffer, GetMode, DoCheck); Result := inherited GetRecord(Buffer, GetMode, DoCheck);
if (Result = grOk) and (FCurRec = 0) then end;
Result := inherited GetRecord(Buffer, GetMode, DoCheck);
end;
end end
else else
Result := inherited GetRecord(Buffer, GetMode, DoCheck); Result := inherited GetRecord(Buffer, GetMode, DoCheck);
@ -1008,6 +1017,7 @@ procedure TSdfDataSet.SetFirstLineAsSchema(Value : Boolean);
begin begin
CheckInactive; CheckInactive;
FFirstLineAsSchema := Value; FFirstLineAsSchema := Value;
FDataOffset:=Ord(FFirstLineAsSchema);
end; end;
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------