StringGrid - optymalizacja wyświetlania rekordów bazy danych

0

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:

  1. Sprawdzenie
 SELECT count(id) FROM tabela

ilości rekordów do wczytania, na podstawie tej informacji ustalany jest StringGrid.RowCount.

  1. 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.

1

Nie wiem jak to jest w Lazarusie , ale pod Delphi, zamiast StrigGrida , użył bym zestawu komponentów :

 TClientDataset->TDataSource->TDBGgrid. 

Zestaw danych zaciągasz do dataseta, a Grid wyłącznie wizualizuje dane.

0

Zobacz sobie do tego wątku na StackOverflow, jest tam opisanych kilka sposobów na przyspieszenie operacji dodawania wielu rekordów do tego komponentu;

No i weź pod uwagę słowa poprzednika - StringGrid nie jest przewidziany do wyświetlania wyników z baz danych, dlatego powinieneś skorzystać z DBGrid.

0

użyj virtualtreeview - jeśli chodzi o szybkość i możliwości to jest najlepsze z darmowych

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