Atualização de Grids
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?
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
Curtidas 0
Respostas
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:
No evento ´OnDataChange´ do DataSource1, o DataSet2 é fechado e reaberto com um novo valor para o parametro, por exemplo:
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+
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
01/10/2005
Vinicius, muito obrigado.
Utilizei a opção 2, no braço! Resolveu o meu problema!
Obrigado.
Utilizei a opção 2, no braço! Resolveu o meu problema!
Obrigado.
GOSTEI 0