Fórum Ordenação de registros de estrutura mestre/detalhe #279184

27/04/2005

0

olá pessoal

gostaria de uma dica/idéia.
tenho uma estrtura mestre/detalhe.
na tabela detalhe eu tenho um campo SEQ - que é um campo integer.
na tela tenho dois grids. Acima o Grid com a tabela mestre e no grid2 abaixo tenho a tabela detalhe ligada pelo Mastersource.
o que preciso é que o campo SEQ da tabela detalhe seja um campo de ´ordenação´ dos registros.
por exemplo, ao cadastrar na tabela detalhe fica assim:

TblDetalhe (a ordem de exibição é o campo SEQ)

Cd_Item | Ds_item       | Qtde       |SEQ
1052        Grampos         20            1
1089        Lapiseira         04            2  
1034        Canetas          02            3  

eu gostaria de ter ao lado do GRIDdetalhe dois botões: ´acima´ e ´abaixo´, que ao clicar neles mudasse automaticamente a ordem do ítem selecionado.

exemplo: se eu estiver com o item 1089 - SEQ2 selecionado e clicar no botão ´acima´, o valor do seu campo SEQ recebe 1 , e o registro 1052 passa de SEQ 1 para SEQ 2...

alguem teria um exemplo ou poderia me dar uma ajuda?

abraço
Diogo


Diogoalles

Diogoalles

Responder

Posts

28/04/2005

Raserafim

diogoalles, a lógica da resolução deste problema poderia ser o seguinte:
al clicar no botão ´acima´ o registro selecionado trocar de valor SEQ com o registro de cima e vice-versa. na prática seiria, o valor SEQ do registro selecionado receberia o seu próprio valor diminuído de 1; e o registro anterior receberia o valor de SEQ acrescido de 1.
Mas para conseguir isso voa código agente pode fazer o seguinte:
procedure ....acima...
var
  Cod, Sequen: Integer;
begin
  Cod := Query.Cd_Item.Value;
  Sequen := Query.SEQ.value;
  Query.Locate(´SEQ´, Sequen - 1, [loCaseInsensitive]);
  Query.Edit;
  Query.SEQ.Value := Sequen;
  Query.Post;
  Query.Locate(´Cd_Item´, Cod, [loCaseInsensitive]);
  Query.Edit;
  Query.SEQ.Value := Sequen - 1;
  Query.Post;
  Query.Close;
  Query.Open;  
end;


procedure ....abaixo...
var
  Cod, Sequen: Integer;
begin
  Cod := Query.Cd_Item.Value;
  Sequen := Query.SEQ.value;
  Query.Locate(´SEQ´, Sequen + 1, [loCaseInsensitive]);
  Query.Edit;
  Query.SEQ.Value := Sequen;
  Query.Post;
  Query.Locate(´Cd_Item´, Cod, [loCaseInsensitive]);
  Query.Edit;
  Query.SEQ.Value := Sequen + 1;
  Query.Post;
  Query.Close;
  Query.Open;  
end;



Responder

Gostei + 0

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

Aceitar