Ordenação de campos ClientDataSet
Bom dia pessoal.
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;
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
Curtidas 0
Respostas
Marco Salles
21/08/2006
voce pode ate continuar usando esse código , mas o simples código abaixo não funcionaria ????
procedure TFrmMain.DBGrid1TitleClick(Column: TColumn); begin ClientDataSet1.IndexFieldNames := Column.FieldName; end;
GOSTEI 0
Blbacelar
21/08/2006
não, pq eu tenho que ordenar por ordem decrescente tb...
GOSTEI 0
Marco Salles
21/08/2006
entendo..
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:
Boa sorte.
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
Blbacelar
21/08/2006
Eu tenho alguns campos calculados, e ele esta ordenando perfeitamente.
Eu tenho Windows XP, mas na maquina que tem Windows 2000, alguns campos não funcionam.
Eu tenho Windows XP, mas na maquina que tem Windows 2000, alguns campos não funcionam.
GOSTEI 0
Marco Salles
21/08/2006
Eu tenho alguns campos calculados, e ele esta ordenando perfeitamente.
Não é possivel indexar um clientDataset Quando o campo for Calculado , LookUp ou Agregado , quando seu tipo for Blob Ou Memo
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
Blbacelar
21/08/2006
Cara, ta complicado.
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.
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
Marco Salles
21/08/2006
Em alguns campos, que são normais, ´não calculados´, ele também não ordena.
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:
Não é possivel indexar um clientDataset Quando o campo for Calculado , LookUp ou Agregado , quando seu tipo for Blob Ou Memo
[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