summaryrefslogtreecommitdiff
path: root/packages/fcl-db
diff options
context:
space:
mode:
authormichael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2>2010-08-19 17:49:40 +0000
committermichael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2>2010-08-19 17:49:40 +0000
commit0986536f62474b37f87ff1a2658d341b4ab8e2ec (patch)
tree913756e7bf1fd4c23dafdb6c9fea0d2f871f6fde /packages/fcl-db
parentd752286f4ffdaf2d052513c148cc7f09ab4ed38c (diff)
downloadfpc-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.pp28
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;
//-----------------------------------------------------------------------------