Atualização de Grids

Delphi

01/10/2005

Pessoal, tenho 2 tableas:

CREATE TABLE VENDAS (
ID_VENDAINTEGER NOT NULL,
DT_VENDADATE,
DESCRICAO_VENDACHAR(50),
VL_TOTAL_MATFLOAT,
VL_LUCROFLOAT,
VL_DESCONTOFLOAT,
VL_TOT_COM_DESCONTOFLOAT,
PRIMARY KEY(ID_VENDA)
);

CREATE TABLE MAT_VENDAS (
ID_MAT_VENDASINTEGER NOT NULL,
QNTD_VENDAS INTEGER,
ID_MATERIAL INTEGER,
ID_VENDA INTEGER
PRIMARY KEY(ID_MAT_VENDAS);
FOREIGN KEY (ID_VENDA) REFERENCES VENDAS
);

(coloquei mais ou menos soh pra vcs entenderem)

Ai é o seguinte.... Como estou fazendo: Eu cadastro uma venda, e depois cadastro os materiais da venda...
Eu preciso do seguinte: Quando eu dar next, last no dbnavigator, eu preciso que a tabela mat_vendas, atualize os produtos conforme a tabela vendas, por exemplo:

na venda com o id_venda = 1
eu preciso que a tabela mat_vendas traga os produtos que tenham o id_venda = 1
Só que não estou conseguindo..

Alguem ai pode me ajudar?


Ricieri

Ricieri

Curtidas 0

Respostas

Vinicius2k

Vinicius2k

01/10/2005

Colega,

Supondo ´DataSet1->DataSource1´ e ´DataSet2->DataSource2´:

Pode ser feito de forma ´mais simples´ com o uso de Mestre/Detalhe. Este método consiste em ligar dois DataSets através de um campo comum entre os dois para que seja realizado um filtro no segundo de acordo com o primeiro.
1. Vc informa no DataSet2, através da propriedade ´MasterSource´, que seu DataSource mestre é ´DataSource1´
2. Vc informa no DataSet2, através da propriedade ´MasterFields´, quais são os campos relacionados entre a DataSet1 e o DataSet2. No seu caso, provavelmente, IDVENDA nos dois DataSets.

Outra forma, que é a que eu uso, é utilizar para o segundo DataSet um ou mais parametros.
Exemplo de instrução SQL do DataSet2:
select * from MAT_VENDAS where ID_VENDA = :id

No evento ´OnDataChange´ do DataSource1, o DataSet2 é fechado e reaberto com um novo valor para o parametro, por exemplo:
with DataSet2 do
begin
  Close;
  ParamByName(´id´).AsInteger := DataSet1.FieldByName(´ID_VENDA´).AsInteger;
  Open;
end;

Este é um mestre/detalhe ´no braço´, mas que evita o tráfego de todos os registros do DataSet2 para o lado do cliente a fim de que seja filtrado localmente pelo ´MasterFields´ do primeiro método.

Fica a seu critério qual utilizar...

T+


GOSTEI 0
Ricieri

Ricieri

01/10/2005

Vinicius, muito obrigado.
Utilizei a opção 2, no braço! Resolveu o meu problema!
Obrigado.


GOSTEI 0
POSTAR