Problem jest tego typu, ze Query zwraca ok 5000 wierszy w trzynastu kolumnach. Wynik musze przepisac do komponentu TStringGrid.
Nie moge równiez uzyc DBGrida, poniewaz program ma pelnic funkcje edytora, do którego mozna wczytywac pliki jak równiez zapisac zawartosc StringGrida do pliku. Jednym slowem moj grid ma byc powiazany z plikiem (mozliwym do odczytania przez MsExcell) a nie z baza. Komunikacja z baza nastepuje jedynie po to aby pobrac dane z bazy (przez uzytkownika, który ma prawa jedynie do odczytu) wczytac je do pliku a nastepnie dowolnie edytowac.
Przejscie przez baze kodem:
- Kod: Zaznacz cały
Query1->First();
While(!Query1->Eof)
{
StringGrid1->Cells[0][0]=Query1Field1->AsString;
StringGrid1->Cells[0][1]=Query1Field2->AsString;
(...)
Query1->Next();
}
zajmuje wieki.
Problem rozwiazaloby wyeksportowanie wyników zapytania SQL z Query do jakiegos pliku a nastepnie wczytanie go do StringGrida.
Sprawdzilem juz i samo wczytanie danych z pliku zajmuje chwilke.
Puscilem tez sama petle :
- Kod: Zaznacz cały
Query1->First();
While(!Query1->Eof)
{
Query1->Next();
}
czyli przejscie przez baze bez wykonywania jakiegokolwiek kodu - zajmuje wieki - co potwierdza, ze samo wczytanie 5000 wierszy do Grida nie jest problemem. Problemem jest wykonanie polecienia Query1->Next(); 5000 razy.
Dodam jeszcze, ze 8 kolumn to kolumny bezposrednio zwrocone w wyniku zapytania SQL, pozostale piec to pola typu fkCalculated, wyliczane dynamicznie podczas wykonania
- Kod: Zaznacz cały
Query->Active=true;
w zdarzeniu OnCalcFields.
Ale jak juz wspomnialem samo aktywowanie TQuery zajmuje do 3 sekund.



wskazuejsz swoje Query 