Como manter ordenação de registros na grid ao inserir linhas

19/08/2008

1

Pessoal, preciso resolver uma situação (delphi7 / firebird 1.5):

Mostro em uma grid lançamentos financeiros ordenados por data, existe nessa tabela uma PK que é um autoincremento;

Digamos que eu tenha 100 lançamentos numa determinada data e o cliente inclui + 1, nesta mesma data, na linha 3. Ele que que o lançamento permaneça na linha 3 (como no excel) e o que aconteçe é que quando eu reabro o arquivo, ordenado por data, esse lançamento apareçe em último;

Como poderia resolver isso, com certeza não é um problema novo, deve existir alguma solução pronta... alguma idéia?

Já pensei em criar um campo float que seria acrescido em um pequeno valor em relação ao lançamento anterior e poderia usar esse campo pra ordenar mas pra mim é um baita ´chuncho´


Responder

Posts

19/08/2008

Sremulador

order by id, data


Responder
Mas se eu ordenar por ID não vai funcionar, veja o exemplo:

LINHA.......ID........DATA

1..............10..........01/01/2008
2..............11..........01/01/2008
3..............12..........01/01/2008
4..............13..........01/01/2008
5..............14..........01/01/2008

O usuário inclui um registro entre as linhas 3 e 4 e este deverá permaneçer nesta posição só que o ID será 15 então se ordenar por ID ele vai pra último.


Responder

20/08/2008

Desander

order by DATA


Responder
Também não funciona (pode ser que dê certo no paradox).
O registro inserido fica por último e não no meio mesmo que a ordenação seja feita só pela data, isso pode ser confirmado fazendo um select pelo ibexpert.
Não sei se a existência da chave pode influenciar alguma coisa (mesmo sem usar order by ID), se for esse o caso não sei como resolver. Pode ser também uma caraterística do firebird.


Responder

20/08/2008

Paulo

Nenhum Order By vai funcionar, até estrutura da tabela. A solução não é tão simples assim. Vem à minha cabeça uma solução complexa e ´porca´, bem complexa e se a tabela for muito grande, vai ter uma perda de performance grande.
Criaria uma Triger de Insert e Delete com Cursor(FB tem Cursor?). Para cada posição do Insert ou Delete, o cursor se moveria um registro para Tras, pegaria o valor da Linha, avançava e colocaria Linha+1 e ir avançando o Cursor apartir dele e ir fazendo Linha+1. O problema é o tamanho da tabela, pois se ela for grande, teria que fazer sempre isso, toda vez que houver um INSERT ou DELETE. É o que veio agora na cabeça. Com Order By, não será possível.


Responder