From 3dc00dc9d8cbcab566b21cc94a41cad843a641f0 Mon Sep 17 00:00:00 2001 From: joost Date: Sun, 27 Jan 2008 14:13:58 +0000 Subject: [PATCH] * Do not change the current record on an index change git-svn-id: trunk@10047 - --- packages/fcl-db/src/base/bufdataset.pas | 1 + packages/fcl-db/tests/testdbbasics.pas | 50 +++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/packages/fcl-db/src/base/bufdataset.pas b/packages/fcl-db/src/base/bufdataset.pas index 8095e0a4b6..ac4df8210a 100644 --- a/packages/fcl-db/src/base/bufdataset.pas +++ b/packages/fcl-db/src/base/bufdataset.pas @@ -923,6 +923,7 @@ begin for i := 0 to FIndexesCount-1 do if SameText(FIndexes[i].Name,AValue) then begin + FIndexes[i].FCurrentRecBuf := FCurrentIndex^.FCurrentRecBuf; FCurrentIndex:=@FIndexes[i]; if active then Resync([rmCenter]); exit; diff --git a/packages/fcl-db/tests/testdbbasics.pas b/packages/fcl-db/tests/testdbbasics.pas index 430ec69ff7..fc89ff64bb 100644 --- a/packages/fcl-db/tests/testdbbasics.pas +++ b/packages/fcl-db/tests/testdbbasics.pas @@ -55,6 +55,8 @@ type procedure TestIndexFieldNames; procedure TestIndexFieldNamesAct; + + procedure TestIndexCurRecord; procedure TestNullAtOpen; @@ -1076,6 +1078,54 @@ begin 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; var ds : TBufDataset; AFieldType : TFieldType;