DBGrid i OnCalc — błędne numerowanie wierszy

0

Witam,
Mam problem, chcę wyświetlić w jednej kolumnie dbgrid nazwę np. "Produkt-1", "Produkt-2", ale nie biorę tej danej w bazy tylko tworzę j dynamicznie poprzez procedurę "CalcFields" ado_query. W procedurze tej wpisuję nazwę i licznikiem zwiększam o jeden. Wszystko działa dobrze do czasu kiedy chce zapamiętać zaznaczony wiersz w grid i po odświerzeniu danych (wczytaniu danych jeszcze raz) zaznaczyć poprzednio zapisana pozycję (numer wiersza). Po takiej operacji numeracja wariuje, zaznaczony wiersz ma numer jeden, wiersz nad nim 2, a pod nim 3.
Da się to zrealizować bez przechowywania takich danych w bazie?

procedure TForm_ryzyko_lista.ADO_Query_listaCalcFields(DataSet: TDataSet);
begin
  begin
    ADO_Query_listasymbol.AsString:='-';
  end
  else
  begin
    ADO_Query_listasymbol.AsString:='Produkt-'+inttostr(global_i);
    global_i:=global_i+1;
  end;
end;

zapis pozycji:

MyBookMark:=ADO_Query_lista.Bookmark;

odczyt pozycji:

ADO_Query_lista.Bookmark:=MyBookMark; 
2

Skoro produkty są numerowane od 1-ki, to użyj TADOQuery.RecNo oznacza on po prostu numer aktualnego rekordu.

1

Nie bardzo rozumiem po co taka operacja ale to nie ważne - widocznie masz jakiś powód. W każdym razie ja bym to załatwił sql-em. Szybko i łatwo a poza tym mnóstwo dodatkowych możliwości jak sortowania, łączenia itp. itd.

1 użytkowników online, w tym zalogowanych: 0, gości: 1