Fórum Ordenação de campos ClientDataSet #327812
21/08/2006
0
Eu estou com um problema, na minha ordenação, na minha máquina que tem WinXP ela funciona corretamente, mas no Win 2000, alguns campos ele não ordena corretamente.
Alguém sabe o que pode ser? será que falta alguma DLL.
Estou utilizando essa função para ordenar os campos.
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
var
indice: string;
existe: boolean;
clientdataset_idx: tclientdataset;
begin
clientdataset_idx := TClientDataset(Column.Grid.DataSource.DataSet);
if clientdataset_idx.IndexFieldNames = Column.FieldName then
begin
indice := AnsiUpperCase(Column.FieldName+´_INV´);
try
clientdataset_idx.IndexDefs.Find(indice);
existe := true;
except
existe := false;
end;
if not existe then
with clientdataset_idx.IndexDefs.AddIndexDef do begin
Name := indice;
Fields := Column.FieldName;
Options := [ixDescending];
end;
clientdataset_idx.IndexName := indice;
end
else
clientdataset_idx.IndexFieldNames := Column.FieldName;
end;
Blbacelar
Curtir tópico
+ 0Posts
21/08/2006
Marco Salles
procedure TFrmMain.DBGrid1TitleClick(Column: TColumn); begin ClientDataSet1.IndexFieldNames := Column.FieldName; end;
Gostei + 0
21/08/2006
Blbacelar
Gostei + 0
21/08/2006
Marco Salles
mas tem um detalhe , pelo menos esta no ´livro´ :
[b:106de7dc48]Não é possivel indexar um clientDataset Quando o campo for Calculado , LookUp ou Agregado , quando seu tipo for Blob Ou Memo[/b:106de7dc48]
Se não for o seu caso , voce pode sar tb o codigo abaixo:
var Campo:String;
procedure TForm1.DBGrid1TitleClick(Column: TColumn); begin with ClientDataSet1 do begin if IndexName = ´IndiceDecrescente´ then DeleteIndex(´IndiceDecrescente´); if campo <> column.FieldName then begin Campo:=column.FieldName; AddIndex(´IndiceDecrescente´,Campo, [ixDescending],campo); IndexName := ´IndiceDecrescente´; end else begin ClientDataSet1.IndexFieldNames:=Column.FieldName; campo:=´´; end; first; end; end;
Boa sorte.
Gostei + 0
23/08/2006
Blbacelar
Eu tenho Windows XP, mas na maquina que tem Windows 2000, alguns campos não funcionam.
Gostei + 0
23/08/2006
Marco Salles
Por gentileza amigo , coloque o codigo simples no OnTitleClick da Grid ...
Click , na coluna que esta um Campo Calculado
procedure TForm1.DBGrid1TitleClick(Column: TColumn); begin SeuClientDataset1.IndexFieldNames:=column.FieldName; end;
[b:d951498a0f]e report para nos o erro que dá[/b:d951498a0f]
Gostei + 0
23/08/2006
Blbacelar
Em alguns campos, que são normais, ´não calculados´, ele também não ordena.
Eu instalei Delphi na máquina que tem Win 2000 pra ver se dava algum erro mas não dá erro nenhum. ele simplismente não ordena.
Ta dificl de eu achar um solução pra isso.
Gostei + 0
23/08/2006
Marco Salles
ta dificil mesmo ... pq o metodo inicialmente que voce colocou , foi postado aqui no site ha um tempo atras pelo emerson.en .
http://forum.devmedia.com.br/viewtopic.php?t=53308&highlight=indexar+clientdataset&sid=70e9345d8da97e787585b8eee4c5b5c5
O método funciona sem problemas para os campos ditos ´Normais´...
O método que lhe passei , eu o uso e funciona sem problemas para os campos ditos ´normais´
Agora para os campos:
[b:1213391df1]Não sou eu quem esta dizendo isso... esta no livro do Guinther : Programação para banco de dados web pag12[/b:1213391df1]
boa sorte...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)