Fórum varrer dataset e listar dados em ordem intercalada #413149

23/02/2012

0

preciso varrer um dataset em ordem intercalada, por exemplo:

meu dataset tem 2 campos: codigo e quantidade e estão ordenados por quantidade do menor para o maior, dai preciso lista esses dados em ordem intercalada nesse sentido:

listar primeiro registro e depois o ultimo,
listar segundo registro e depois o penultimo,
listar terceiro registro e depois o antepenultimo...
e assim por diante....

tentei usando o MoveBy do dataset mas não to obtendo sucesso...
Joao Moreira

Joao Moreira

Responder

Posts

23/02/2012

Joao Moreira

mais ou menos assim:

//mostrando o primeiro registro
Showmessage(FieldByName(estabelecimento).AsString + - + FieldByName(qtd).AsString);

MoveBY(qtdReg-1);
//mostrando o ultimo registro
Showmessage(FieldByName(estabelecimento).AsString + - + FieldByName(qtd).AsString);

moveby(-qtdReg);
next;

//mostrando o segundo registro
Showmessage(FieldByName(estabelecimento).AsString + - + FieldByName(qtd).AsString);

Dec(qtdReg);
Responder

Gostei + 0

23/02/2012

Gustavo Bretas

E ae João, blz?

Rapaz, eu vi seu post na parte de SQL Server e estou tentando entender onde vc quer chegar com isso, mas esta complicado... rsrs!

A questão do intercalado eu entendi, mas e quando vc tiver um número impar de registros?

Se vc disser mais detalhes da sua aplicação e o que vc quer fazer seja mais tranquilo para te ajudar!
Responder

Gostei + 0

23/02/2012

Joao Moreira

sem problemas...vamos supor que eu tenha 3 registro ele lista o 1 depois o 3 e depois o 2 dai sai...
Responder

Gostei + 0

23/02/2012

Joao Moreira

vou fazer usando um dataset temporário
Responder

Gostei + 0

23/02/2012

Gustavo Bretas

João, veja se esse exemplo te ajuda: http://www.sendspace.com/file/zi7uw5

Fiz aqui na lógica que vc descreveu, tenta aplicar no seu sistema!

Abraço!
Responder

Gostei + 0

23/02/2012

Joao Moreira

fiz dessa forma conforme solução do meu amigo Vitor Araújo Alcantara

with qry do
begin
sql.Add(select a.estabelecimento, COUNT(*) as qtd from estabelecimento a);
sql.Add(inner join alunos b on (a.estabelecimento = b.id_escola));
sql.Add(group by a.estabelecimento order by qtd);
open;

x := 1;
y := RecordCount;
i := 1;

while x <= y do
begin
RecNo := x;
memo1.Lines.add(FieldByName(estabelecimento).AsString + - + FieldByName(qtd).AsString );

RecNo := y;
memo1.Lines.add(FieldByName(estabelecimento).AsString + - + FieldByName(qtd).AsString );

Inc(x);
Dec(y);
Inc(i)
end;
Showmessage(IntToStr(i));
end;
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar