Da li postoji neki poseban razlog zbog koga nisi koristio TQuery kao izvor podataka za DBGrid?
U slučajevima kao tvoj, uvek hvatam događaj:
TDBGrid::OnTitleClick(TColumn *Column)
... i generišem novi SQL upit koji uzima u obzir kolonu (
Column->Field->Index) na koju
je kliknuto (ORDER BY kliknuto_polje), i dalje sve lepo radi kako se očekuje.
Kada se razmišlja o sortiranju, treba imati u vidu da se 'fizičko' sortiranje retko radi, jer na većim
tabelama to može da bude relativno dugotrajan proces, pa je kao takvo i nepoželjno. Obično se
koristi (da ga tako nazovem) 'logičko' sortiranje, tj. sortiranje gde se u raznim grid-ovima, izveštajima
i sl, sve vidi sortirano, a u stvari nije došlo do fizičkog premeštanja podataka po tabeli (čitaj hard disku).
Brzina koju vidiš uglavnom je posledica lepo postavljenih indeksa. Ako ti i ovo 'logičko' sortiranje
odgovara, savetujem da korisiš Query-je, a svakako razmisli o prelaski na ADO tehnologiju, jer BDE
kao napuštena tehnologija ima sve više i više prijavljenih problema na novijim Win OS-ovima.
EDIT:
Što se tiče mogućnosti sortiranja po tabeli, pogledaj kako bi to išlo promenom Indeksa
(koga naravno prethodno moraš i obezbediti u dizajnu baze):
// Iz knjige Charlie-a Calvert-a za BCB (lako je transformisati za Delphi):
Code:
void TForm1::DoSort(TObject *Sender)
{
switch (dynamic_cast<TComponent *>(Sender)->Tag)
{
case stFirst:
DMod->AddressTable->IndexName = "FNameIndex";
break;
case stLast:
DMod->AddressTable->IndexName = "LNameIndex";
break;
case stCompany:
DMod->AddressTable->IndexName = "CompanyIndex";
break;
}
}
... mada ja to nikada nisam tako radio.
Sve najbolje.
[Ovu poruku je menjao X Files dana 20.04.2007. u 09:16 GMT+1]