diff options
| author | michael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2010-08-19 17:49:40 +0000 |
|---|---|---|
| committer | michael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2010-08-19 17:49:40 +0000 |
| commit | 0986536f62474b37f87ff1a2658d341b4ab8e2ec (patch) | |
| tree | 913756e7bf1fd4c23dafdb6c9fea0d2f871f6fde /packages/fcl-db | |
| parent | d752286f4ffdaf2d052513c148cc7f09ab4ed38c (diff) | |
| download | fpc-0986536f62474b37f87ff1a2658d341b4ab8e2ec.tar.gz | |
* Fixed bug 15939
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@15856 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/fcl-db')
| -rw-r--r-- | packages/fcl-db/src/sdf/sdfdata.pp | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/packages/fcl-db/src/sdf/sdfdata.pp b/packages/fcl-db/src/sdf/sdfdata.pp index ac01365da7..b8b4b31040 100644 --- a/packages/fcl-db/src/sdf/sdfdata.pp +++ b/packages/fcl-db/src/sdf/sdfdata.pp @@ -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; //----------------------------------------------------------------------------- |
