Fórum Erro com consulta master detail com dbexpress. #446011
19/06/2013
0
Tabela Master.
CREATE TABLE VENDAS (
VEN_CODIGO D_CODIGO NOT NULL /* D_CODIGO = INTEGER NOT NULL */,
CLI_CODIGO D_CODIGO NOT NULL /* D_CODIGO = INTEGER NOT NULL */,
VEN_DESCRICAO D_NOME_90 /* D_NOME_90 = VARCHAR(90) */,
VEN_DATA D_DATA /* D_DATA = DATE */,
VEN_TOTAL D_NUMERO /* D_NUMERO = NUMERIC(8,2) */,
VEN_OBSERVACAO D_NOME_90 /* D_NOME_90 = VARCHAR(90) */,
VEN_PAGAMENTO D_NOME_20 /* D_NOME_20 = VARCHAR(20) */
);
ALTER TABLE VENDAS ADD CONSTRAINT PK_VENDAS PRIMARY KEY (VEN_CODIGO);
ALTER TABLE VENDAS ADD CONSTRAINT FK_VENDAS_1 FOREIGN KEY (CLI_CODIGO) REFERENCES CLIENTES (CLI_CODIGO); Tabela detail
CREATE TABLE ITENS (
ITE_CODIGO D_CODIGO /* D_CODIGO = INTEGER NOT NULL */,
VEN_CODIGO D_CODIGO NOT NULL /* D_CODIGO = INTEGER NOT NULL */,
PRO_CODIGO D_CODIGO NOT NULL /* D_CODIGO = INTEGER NOT NULL */,
ITE_QUANTIDADE D_NUMERO /* D_NUMERO = NUMERIC(8,2) */,
ITE_PRECO D_NUMERO /* D_NUMERO = NUMERIC(8,2) */,
ITE_TOTAL D_NUMERO /* D_NUMERO = NUMERIC(8,2) */
);
ALTER TABLE ITENS ADD CONSTRAINT PK_ITENS PRIMARY KEY (ITE_CODIGO);
ALTER TABLE ITENS ADD CONSTRAINT FK_ITENS_2 FOREIGN KEY (PRO_CODIGO) REFERENCES PRODUTOS (PRO_CODIGO) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE ITENS ADD CONSTRAINT FK_ITENS_3 FOREIGN KEY (VEN_CODIGO) REFERENCES VENDAS (VEN_CODIGO) ON DELETE CASCADE ON UPDATE CASCADE; Criei um SQLDataset, DataSetProvider e um clientDataSet no meu Datamodule, no meu formulário coloquei um data source estou usando o seguinte código.
with dm.cdsConsultas do
begin
Screen.Cursor := crHourGlass;
Close;
S := TStringList.Create;
S.Add('select vendas.ven_codigo, vendas.cli_codigo, vendas.ven_descricao, vendas.ven_data, vendas.ven_total, ');
S.Add('vendas.ven_observacao, vendas.ven_pagamento, itens.ite_codigo, itens.ven_codigo, itens.pro_codigo, ');
S.Add('itens.ite_quantidade, itens.ite_preco, itens.ite_total from itens, vendas ');
S.Add('where VENDAS.VEN_CODIGO = ITENS.VEN_CODIGO and ');
S.Add('vendas.ven_data between :datainicial and :datafinal and ');
S.Add('vendas.ven_pagamento like :pagamento ');
CommandText := S.Text;
FetchParams;
Params.ParamByName('datainicial').AsDate := DataInicial.Date;
Params.ParamByName('datafinal').AsDate := DataFinal.Date;
Params.ParamByName('pagamento').AsString := 'Pago';
Open;
FreeAndNil(S);
Screen.Cursor := crDefault;Ele faz a consulta e até consegue pegar os parametros o problema é que ele está duplicando os registros.
O que pode ser?
Nícolas Braz
Curtir tópico
+ 0Posts
19/06/2013
Marco Salles
Vc tem um só né ???
Gostei + 0
19/06/2013
Hudson Leite
Tenta dessa Forma.:
Configurações do componentes.:
adicione um sqlConnection
adicione uma SqlQueryMaster
propriedade Sql = "select * from vendas"
adicione um dataSourceLigacao
adicione um SqlQueryDetalhe na sua propriedade dataSource setar dataSourceLigacao
propriedade Sql = "select * from itens where ven_codigo = :ven_codigo"
adicione um dataSetProvider na sua propriedade dataSet setar SqlQueryMaster
adicione um ClientDataSetMaster na sua propriedade providerName setar dataSetProvider
Ative o ClientDataSetMaster e carregue os campos, obseve que será carregado um campo com o nome SqlQueryDetalhe.
adicione um dataSourceMaster na sua propriedade dataSet setar ClientDataSetMaster
adicione um ClientDataSetDetalhe na sua propriedade providerName setar dataSetProvider
adicione um dataSourceDetalhe na sua propriedade dataSet setar ClientDataSetDetalhe
agora basta ligar os dataSourceMaster e dataSourceDetalhe nas dbgrid, adicionar dois DBNavigator e pronto.
Gostei + 0
19/06/2013
Hudson Leite
Após adicionar o dataSourceLigacao,
setar no dataSourceLigacao a propriedade dataSet SqlQueryMaster.
Depois pode continuar normalmente os processos
Gostei + 0
19/06/2013
Nícolas Braz
Gostei + 0
21/06/2013
José
Gostei + 0
01/08/2013
Nícolas Braz
Gostei + 0
01/08/2013
José
Para ficar mas fácil de identificarmos se a duvida já foi solucionada pedimos aos usuário que coloquem "Duvida sanada, podem finalizar o tópico.".
Gostei + 0
01/08/2013
Nícolas Braz
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)