StringGrid - optymalizacja wyświetlania rekordów bazy danych

StringGrid - optymalizacja wyświetlania rekordów bazy danych
HI
  • Rejestracja:prawie 13 lat
  • Ostatnio:dzień
  • Postów:1857
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
Kopiuj
 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
Kopiuj
 
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.

GS
  • Rejestracja:ponad 14 lat
  • Ostatnio:mniej niż minuta
1

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

Kopiuj
 TClientDataset->TDataSource->TDBGgrid. 

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

edytowany 2x, ostatnio: grzegorz_so
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:2 minuty
  • Lokalizacja:Tuchów
  • Postów:12171
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.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:8 miesięcy
  • Postów:6610
0

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


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.