Wiele zależy od konstrukcji bazy...
Stwórz w bazie pole "index" typu : autoincrement. Następnie wyświetlaj te pole w tabeli na początku po lewej stronie. Teraz nawet po użyciu filtrów będziesz wiedział, które pole jest aktualnie widoczne.
Niestety to może być zawodne... W momencie jak usuniesz jakiś element z bazy to indeksowanie pozostanie bez zmian i będziesz miał dziury w bazie, a danej typu autoincrement nie można modyfikować! Z tego też względu warto stworzyć drugą kolumnę "numer"(tylko ją pozostawić widoczną) i ją 'ręcznie' w kodzie zmieniać w momencie usuwania któregoś z elementów :
DataModule1->glowny->Delete();
DataModule1->glowny->Prior();
a=DataModule1->glowny->Fields->FieldByName("Numer")->AsInteger;
while(DataModule1->glowny->Eof!=1)
{
DataModule1->glowny->Edit();
DataModule1->glowny->Fields->FieldByName("Numer")->AsInteger=a;
DataModule1->glowny->Post();
DataModule1->glowny->Next();
a=a+1;
}
Musisz też pamiętać o nadawaniu numeru w momencie dodawania rekordu :
a = DataModule1->glowny->RecordCount;
a = a+1;
DataModule1->glowny->Fields->FieldByName("Numer")->AsInteger=a;
DataModule1->glowny->Post();
A aby w szybki sposób dotrzeć do wybranego rekordu robisz tak: Taka procedurka może być pod przyciskiem obok pola Edit :
DataModule1->glowny->First();
DataModule1->glowny->MoveBy(StrToInt(Edit->Text)-1);//Tutaj z pola Edit program pobiera który rekord chcesz obejrzeć.
Mam nadzieję, że pomogłem. Powyższy zapis pochodzi z Buildera aby zmienić go na delphi zmień znaki '->' na kropki '.' a znak przypisania '=' na ':=' reszta jest identyczna.