Ako je neko pokusavao da sortira DBGrid i uspelo mu je u prvom dodavanju indexa (prvo pozivanje AddIndex) a u drugom mu je prijavljivalo gresku "Must use baseorder for this operation" samo je trebao da posluša poruku koju mu je DElphi javio i postavi index na primarni tj IndexName:=''.
Ccc! Dva dana se ubijam trazeci po netu. I naisao sam da su i drugi imali ovakve probleme ali nisam nasao odgovor. Ili zato sto je ovako prost ili ga stvarno ljudi nisu resili :)
Evo koda
Code:
procedure SortirajDBGrid(Kolona: TColumn);
var tabela:ttable;
grid:tdbgrid;
begin
grid:=tdbgrid(Kolona.Grid);
if assigned(grid.DataSource.DataSet) then begin
tabela:=ttable(grid.DataSource.DataSet);
if (tabela.State <> dsinactive) and (tabela.FieldDefs.IndexOf(kolona.FieldName)>-1) then begin
tabela.DisableControls;
try
tabela.IndexName:=tabela.IndexDefs.find(kolona.FieldName).Name;
except
on edatabaseerror do begin
tabela.IndexName:='';
tabela.AddIndex(kolona.fieldname, Kolona.FieldName, [ixCaseinsensitive]);
tabela.IndexName:=kolona.FieldName;
end;
end;
tabela.enablecontrols;
end;
end;
end;
procedure SortirajDBGrid(Kolona: TColumn);
var tabela:ttable;
grid:tdbgrid;
begin
grid:=tdbgrid(Kolona.Grid);
if assigned(grid.DataSource.DataSet) then begin
tabela:=ttable(grid.DataSource.DataSet);
if (tabela.State <> dsinactive) and (tabela.FieldDefs.IndexOf(kolona.FieldName)>-1) then begin
tabela.DisableControls;
try
tabela.IndexName:=tabela.IndexDefs.find(kolona.FieldName).Name;
except
on edatabaseerror do begin
tabela.IndexName:='';
tabela.AddIndex(kolona.fieldname, Kolona.FieldName, [ixCaseinsensitive]);
tabela.IndexName:=kolona.FieldName;
end;
end;
tabela.enablecontrols;
end;
end;
end;