Ordenar pelo ClientDataSet

Delphi

08/02/2012

Ola amigos!

Tenho uma base no mysql, onde os dados estao da seguinte forma na tabela:
0001000, 00202, 01000, 1, 10, precisso ordenar esses codigos, para que
fiquem da seguinte ordem no relatorio: 1, 10, 000100, 00202, 01000.
O campo codigo é um varchar, estou utilizando um ClienDataSet e tenho que ordenar
pelo indexFieldNames, estou utilizando o comando abaixo mas nao funciona, porque os
codigos tem zeros na frente.
if ComboBox2.ItemIndex=0 then // o combobox2 é onde tem pra ordenar pelo codigo ou pela descricao do produto
estoquep.IndexFieldNames:=codigo

alguem pode passar uma solucao, ja tinha iniciado outro chamado, mas como estou precisando disso
urgente abri novo chamado.

Abraços Odair






Odair Vavassori

Odair Vavassori

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

08/02/2012

Já tentou fazer um cast na própria consulta SQL? Você seleciona a coluna normalmente, mas na cláusula ORDER BY você faz um cast, convertendo o código para inteiro.
GOSTEI 0
Odair Vavassori

Odair Vavassori

08/02/2012

O Cast funciona, mas nao no meu caso,
porque uso uma tabela temporaria, para ordenar.

Odair
GOSTEI 0
Marco Salles

Marco Salles

08/02/2012

Então Odair utilize um Truque

Crie um campo Internacalc , de um Nome propricio
Se quiser coloque como Invisivel , não faz diferença

escreva o seguinte codigo no evento OnCalcFields do CDS

if dataset.State = dsInternalCalc then
with TClientDataSet(dataset) do
FieldByName(Truque).AsString:=
StringOfChar(0,6 - length(FieldByName(codigo).AsString))+
FieldByName(codigo).AsString;
end;

ps) aqui meu campo chama TRUQUE e o Campo que quer Ordenar é CODIGO

Coloqueo um Tamanho de SEIS pq vi que voce tinha 000100 , mas pode aumentar a gosto

Agora é so fazer

ClientDataSet1.IndexFieldNames:=Truque;

e estará ordenado como voce quer (

GOSTEI 0
Odair Vavassori

Odair Vavassori

08/02/2012

Boa noite

Deu certo, resolveu meu problema

Obrigado pela força Marco

Odair
GOSTEI 0
Marco Salles

Marco Salles

08/02/2012

Que bom que deu tudo certo
GOSTEI 0
POSTAR