Jelajahi Sumber

* Fix for record no, recno tests pass

git-svn-id: trunk@30467 -
michael 10 tahun lalu
induk
melakukan
2412a2faa2
1 mengubah file dengan 15 tambahan dan 6 penghapusan
  1. 15 6
      packages/fcl-db/src/sdf/sdfdata.pp

+ 15 - 6
packages/fcl-db/src/sdf/sdfdata.pp

@@ -509,8 +509,8 @@ function TFixedFormatDataSet.GetRecNo: Longint;
 var
   BufPtr: TRecordBuffer;
 begin
-  Result := -1;
-  if GetActiveRecBuf(BufPtr) then
+  Result := 0;
+  if GetActiveRecBuf(BufPtr) and Not (State in dsEditModes) then
     Result := PRecInfo(BufPtr + FRecInfoOfs)^.RecordNumber;
 end;
 
@@ -737,7 +737,7 @@ begin
     FData[FCurRec] := BufToStore(ActiveBuffer);
   end
   else
-    InternalAddRecord(ActiveBuffer, FALSE);
+    InternalAddRecord(ActiveBuffer, True);
 end;
 
 procedure TFixedFormatDataSet.InternalEdit;
@@ -754,15 +754,24 @@ begin
 end;
 
 procedure TFixedFormatDataSet.InternalAddRecord(Buffer: Pointer; DoAppend: Boolean);
+
+Var
+  I : Integer;
+
 begin
   FSaveChanges := TRUE;
   Inc(FLastBookmark);
   if DoAppend then
+    begin
     InternalLast;
-  if (FCurRec >=0) then
-    FData.InsertObject(FCurRec, BufToStore(Buffer), TObject(Pointer(FLastBookmark)))
-  else
     FData.AddObject(BufToStore(Buffer), TObject(Pointer(FLastBookmark)));
+    end
+  else if (FCurRec-FDataOffset>=0) then
+    begin
+    For I:=FCurRec+FDataOffset to FData.Count-1 do
+      FData.Objects[i]:=TObject(FCurRec+FDataOffset+1);
+    FData.InsertObject(FCurRec+FDataOffset, BufToStore(Buffer), TObject(Pointer(FCurRec)))
+    end
 end;
 
 procedure TFixedFormatDataSet.InternalGotoBookmark(ABookmark: Pointer);