Ordenar pelo ClientDataSet
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
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
Curtidas 0
Respostas
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
08/02/2012
O Cast funciona, mas nao no meu caso,
porque uso uma tabela temporaria, para ordenar.
Odair
porque uso uma tabela temporaria, para ordenar.
Odair
GOSTEI 0
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 (
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
08/02/2012
Boa noite
Deu certo, resolveu meu problema
Obrigado pela força Marco
Odair
Deu certo, resolveu meu problema
Obrigado pela força Marco
Odair
GOSTEI 0
Marco Salles
08/02/2012
Que bom que deu tudo certo
GOSTEI 0