Witam.
Na wstępie zaznaczę że pisze w Lazarusie choć w tym wypadku raczej nie ma to znaczenia.
Mam w programie tabelę (StringGrid
) w której wyświetlam ofertę (ok 10 000 pozycji, 15 kolumn).
Tabela jest odpowiednio kolorowana (kolor domyślny, kolor rekordu aktywnego, kolor rekordów "ekstra"), dodatkowo w nie których kolumnach wyświetlane są grafiki.
W jednej z kolumn użytkownik może wpisywać ilości.
W tej chwili wczytywanie rekordów do tabeli odbywa się "standardowo", czyli w małym uproszczeniu tak:
- Sprawdzenie
SELECT count(id) FROM tabela
ilości rekordów do wczytania, na podstawie tej informacji ustalany jest StringGrid.RowCount
.
- Wczytywanie rekord po rekordzie tabeli
Query.Close;
Query.SQL.Text := 'SELECT * FROM tabela';
Query.Open;
x:=1;
while not Query.Eof do
begin
StringGrid.Cells[1,x] := Query.FieldByName('id').AsInteger;
// pozostałe kolumny
StringGrid.Cells[15,x] := Query.FieldByName('xxx').AsInteger;
inc(x);
Query.Next;
end;
Teoretycznie wszystko działa, jednak wczytywanie tabeli w ten sposób zajmuje ok 10 - 15 sekund.
Czy mogli by Panowie podpowiedzieć mi jak zoptymalizować ten proces ?
Z góry dziękuję.
Pozdrawiam.