relacionamento mestre / detalhe

31/07/2008

0

caros colegas. Tenho as seguintes tabelas:

Funcionarios (mestre)
    ID_FUNCIONARIO  INTEGER NOT NULL,
    NOME            VARCHAR(100) NOT NULL COLLATE WIN_PTBR,
    FOTO            BLOB SUB_TYPE 0 SEGMENT SIZE 80,
    NASCIMENTO      DATE,
    FONE            VARCHAR(20),
    ENDERECO        VARCHAR(1000) COLLATE WIN_PTBR,
    VALOR_AULA      NUMERIC(15,2) NOT NULL,
    ID_ATIVO        INTEGER NOT NULL


Funcionarios_produtos (detalhe de Funcionarios)
    ID_FUNC_PROD    INTEGER NOT NULL, 
    ID_FUNCIONARIO  INTEGER NOT NULL, // aponta para tabela mestre
    ID_PRODUTO      INTEGER NOT NULL,   // aponta para tabela produtos
    ID_ATIVO        INTEGER NOT NULL       // 1 = sim, 2 = nao



tudo funciona beleza em mestre detalhe com elas quando eu faço pesquisas atraves da tabela mestre.

meu problema:

vamos supor que tenho 2 funcionários cadastrados na tabela mestre, e que esses dois funcionários tem dois produtos iguais cadastrados na tabela detalhe.

quando um filtro na tabela detalhe para saber quais os funcionários que tem determinado produto cadastrado com status ´ativo = 1´ o sistema nao me retorna os dois funcionários cadastrados, e sim apenas um deles (o primeiro). alguem saberia me dizer o motivo disso, e como eu procedo corretamente para que esse filtro funcione?

segue abaixo meu código do filtro:

        // tabela produtos
        DM.cdsProd.Close;
        DM.cdsProd.Params[1].AsString := Combobox.Text;
        DM.cdsProd.Open;

        // tabela Funcionários (mestre)
        DM.cdsFunc.Close;
        DM.cdsFunc.Params[1].AsString := ´¬´;
        DM.cdsFunc.Open;

        // aqui filtra os produtos ativos do funcionario
        DM.cdsFuncProd.Close;
        DM.cdsFuncProd.Filtered := false;
        DM.cdsFuncProd.Filter   := ´ID_ATIVO = 1 AND ID_PRODUTO = ´ + QuotedStr(DM.cdsProdID_PRODUTO.AsString);
        DM.cdsFuncProd.Filtered := true;
        DM.cdsFuncProd.Open;



Mahdak

Mahdak

Responder

Posts

31/07/2008

Mahdak

correção: onde eu disse ´quando um filtro...´, na verdade eu queria dizer: ´quando aplico um filtro...´

Obs: os dois funcionários estão com status = 1 na tabela detalhe


Responder

01/08/2008

Thomaz_prg

Tem que ser revisto o SQL. DIgo isso pq, se existe dependencia entre os datasets´s mestre e detalhe, vc não conseguirá fazer com que, ao filtrar dados na tabela detalhe, ele apresente outros dados na tabela mestre (pois daí se inverteriam os papéis).


Responder

04/08/2008

José Henrique

mahdak,
Mostre o SQL de cdsFuncProd

Outra coisa, por que você usa
DM.cdsFuncProd.Filter   := ´ID_ATIVO = 1 AND ID_PRODUTO = ´ + QuotedStr(DM.cdsProdID_PRODUTO.AsString); 


ao invés de

DM.cdsFuncProd.Filter   := ´ID_ATIVO = 1 AND ID_PRODUTO = ´ + Combobox.Text; 



Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar