Browse Source

* Do not change the current record on an index change

git-svn-id: trunk@10047 -
joost 17 years ago
parent
commit
3dc00dc9d8
2 changed files with 51 additions and 0 deletions
  1. 1 0
      packages/fcl-db/src/base/bufdataset.pas
  2. 50 0
      packages/fcl-db/tests/testdbbasics.pas

+ 1 - 0
packages/fcl-db/src/base/bufdataset.pas

@@ -923,6 +923,7 @@ begin
   for i := 0 to FIndexesCount-1 do
   for i := 0 to FIndexesCount-1 do
     if SameText(FIndexes[i].Name,AValue) then
     if SameText(FIndexes[i].Name,AValue) then
       begin
       begin
+      FIndexes[i].FCurrentRecBuf := FCurrentIndex^.FCurrentRecBuf;
       FCurrentIndex:=@FIndexes[i];
       FCurrentIndex:=@FIndexes[i];
       if active then Resync([rmCenter]);
       if active then Resync([rmCenter]);
       exit;
       exit;

+ 50 - 0
packages/fcl-db/tests/testdbbasics.pas

@@ -55,6 +55,8 @@ type
 
 
     procedure TestIndexFieldNames;
     procedure TestIndexFieldNames;
     procedure TestIndexFieldNamesAct;
     procedure TestIndexFieldNamesAct;
+    
+    procedure TestIndexCurRecord;
 
 
     procedure TestNullAtOpen;
     procedure TestNullAtOpen;
 
 
@@ -1076,6 +1078,54 @@ begin
     end;
     end;
 end;
 end;
 
 
+procedure TTestDBBasics.TestIndexCurRecord;
+// Test if the currentrecord stays the same after an index change
+var ds : TBufDataset;
+    AFieldType : TFieldType;
+    i : integer;
+    OldID : Integer;
+    OldStringValue : string;
+begin
+  ds := DBConnector.GetFieldDataset as TBufDataset;
+  with ds do
+    begin
+    AFieldType:=ftString;
+    AddIndex('testindex','F'+FieldTypeNames[AfieldType]);
+    open;
+
+    for i := 0 to (testValuesCount div 3) do
+      Next;
+
+    OldID:=FieldByName('id').AsInteger;
+    OldStringValue:=FieldByName('F'+FieldTypeNames[AfieldType]).AsString;
+
+    IndexName:='testindex';
+
+    AssertEquals(OldID,FieldByName('id').AsInteger);
+    AssertEquals(OldStringValue,FieldByName('F'+FieldTypeNames[AfieldType]).AsString);
+
+    next;
+    AssertTrue(OldStringValue<=FieldByName('F'+FieldTypeNames[AfieldType]).AsString);
+    prior;
+    prior;
+    AssertTrue(OldStringValue>=FieldByName('F'+FieldTypeNames[AfieldType]).AsString);
+
+    OldID:=FieldByName('id').AsInteger;
+    OldStringValue:=FieldByName('F'+FieldTypeNames[AfieldType]).AsString;
+
+    IndexName:='';
+
+    AssertEquals(OldID,FieldByName('id').AsInteger);
+    AssertEquals(OldStringValue,FieldByName('F'+FieldTypeNames[AfieldType]).AsString);
+    
+    next;
+    AssertEquals(OldID+1,FieldByName('ID').AsInteger);
+    prior;
+    prior;
+    AssertEquals(OldID-1,FieldByName('ID').AsInteger);
+    end;
+end;
+
 procedure TTestDBBasics.TestIndexFieldNames;
 procedure TTestDBBasics.TestIndexFieldNames;
 var ds : TBufDataset;
 var ds : TBufDataset;
     AFieldType : TFieldType;
     AFieldType : TFieldType;