Problemas no Mestre/Detalhe

Bom dia pessoal,

Estou com problema no formulário Mestre/Detalhe onde no Mestre (ele é um único registro) eu quero fazer uma atualização e no Detalhe (posso inserir um ou vários registros) eu clico no botão Novo para inserir um novo produto, e quando vou incluir ele dá esta seguinte mensagem de erro:

“Erro ao incluir na base de dados:
Cannot add or update a child row: a foreign key constraint fails (sgdados.cad_receitas, CONSTRAINT fk1_receitas FOREIGN KEY (CODIGOINT) REFERENCES cad_mercador (CODIGOINT) ON DELETE CASCADE ON UPDATE CASCADE)”

Essa é a primeira vez eu que mexo Mestre/Detalhe e eu sou novo por aqui, se alguém por favor puder me ajudar desde já agradeço!!

O problema nao é com o formulário e sim com sua modelagem. Tente fazer uma inserção manualmente para ver se não da o mesmo erro.

Bom dia Haroldo,

Onde posso dar esse Insert no formulário pai? E em qual evento que faço isso?

Bom dia Marcelo,

Acho que o que o Haroldo disse foi você tentar dar um INSERT diretamente na tabela cad_receitas e veja se o erro aparece. Se aparecer, dê uma revisada na tua modelagem.

Bom dia Kleyber,

Tentei dar um Insert no evento onBeforeInsert e deu o mesmo erro!

Fiz esse comando no evento como mostra abaixo:

sc_exec_sql(“INSERT INTO cad_receitas (codigoint, qtd, codigoinsumo, qtdreceita) VALUES (’”.{codigoint}."’, ‘".{qtd}."’, ‘".{codigoinsumo}."’, ‘".{qtdreceita}."’)");

Então está parecendo problema na tua modelagem. Reveja como fizeste a tua modelagem em relação às duas tabelas no teu banco de dados e faça primeiramente testes no próprio banco, antes de testar nos eventos do SC.

OK, irei verificar.

Grato!

Marcelo, o ‘codigoint’ deve estar com um valor que não existe na tabela ‘cad_mercador’, ou algo parecido.

Verifique na parametrização do mestre detalhe o que você está passando como parâmetro. Verifique também o que está definido nas propriedades dos campos da aplicação detalhe.

Bom dia Luis,

É o seguinte:

Criei 2 forms com a tabelha de cad_receitas que tem os campos: codigoint, codigoinsumo, qtd e qtdreceita.

Um deles defini para mestre com os campos: codigoint e qtd. No campo codigoint fiz um lookup das tabelas cad_receitas com a tabela de cad_mercador, onde o codigoint é o código principal dessa tabela do cad_mercador, sendo ele ele texto auto-complete onde ele pega o código e a descrição do produto.

E no outro que é o detalhe defini os campos: codigoinsumo, qtd e qtdreceitas, onde no codigoinsumo fiz um lookup desse campo também fazendo um inner join com o cad_mercador para me mostrar a descrição desse código.

A idéia é a seguinte para entender melhor:

Digamos que eu tenha um bolo completo que vai ser o meu codigoint lá no mestre. E nos detalhes vão sair as minhas receitas que é o codigoinsumo que vai ovo, farinha, leite, definindo assim as suas quantidades e tudo mais…

Para cada codigoint vão as receitas que podem ser um ou mais codigoinsumo baseado nesse codigoint, por isso que criei um mestre/detalhe.

Se você puder me exemplicar ou mostrar um caminho para resolver isso, desde já agradeço!

Marcelo, acredito que o seu problema, como já foi dito, é modelagem do banco.

Veja, você está usando a mesma tabela como mestre e detalhe.

As tabela de receita e consumo devem estar separadas, pois, um consumo pode atender a várias receitas. E, eu faria assim, ligadas por uma terceira tabela que é a relação entre as receitas e os consumos (relação N:N).

Então o mestre seria com a tabela receita e o detalhe com a tabela de relação M:N.

OK

Luis,

Era exatamente isso que tu disse, deu certo aqui…

Tive que usar uma nova tabela pai que é cad_mercador(mestre) com o filho que é cad_receitas(filho), meu erro realmente foi de ter criado 2 forms com a mesma tabela de cad_receitas.

Muito obrigado!!!