Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

edmjunio

Mestre detalhe com ado

Recommended Posts

Tenho uma tabela master chamada TblMovimento e um tabela Detalhes chamada TblItensMovimento estou usando componentes do tipo ado, preciso fazer uma relação mestre detlhes para elas, o que fiz foi na query adqItensMovimento setar o data source para a query AdoMovimento e no sql da query AdoItensMovimento linkar o id da tabela AdqItensMovimento com o parametro ID (Chave primaria da query ADQMovimento). A propriedade locktype de ambas as querys estão ltBatchOptimistic pois preciso ´garantir que os dados de ambas as tabelas (tblMovimento e tblItensdomovimento) sejam preenchidos antes de garvar.Obs estou usando um banco de dados access e a estrutura das tabelas resumidamente são:tblMovimento- idmovimento- nomemovimentotblItensmovimento-iditem-idmovimento (chaveestrangenira)-nomeitemComo faço este tipo de formulário visto que o que eu consgui fazer não consigo inserir dados na tabela detalhe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No caso pq você não faz a ligação usando ADOTable ? No caso coloca uma tabela para a mestre e outra para a detalhes, na detalhe liga a propriedade MasterSource com a mestre, e na propriedade MasterFields faz a ligação dos campos...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Neste caso então pode criar o controle de outra forma, você no caso tem duas qry, uma mestre e outra detalhes, na detalhes você pode conectar ela normalmente com o BD, pode remover a ligação que tem no DataSource, o que você pode fazer é o seguinte.

Na propriedade AfterScroll da tabela mestre faz a navegação na tabela detalhe... No sql da tablea detalhe você pode deixar o sql algo do tipo:

 

select *from tabela_detalhewhere tabela_detalhe.id_movimento =:Codigo

No evento AfterScroll coloque algo do tipo:

 

qryDetalhe.Close;qryDetalhe.Parameters.ParamByName('Nota').Value:=qryMestreID_MOVIMENTO.Value;qryDetalhe.Open;

Assim elas ficam separadas mas paradas no mesmo registro, podendo inserir na tabela detalhes sem problemas... Ainda no evento OnNewRecord da tabela detalhes você deve colocar...

 

qryDetalheID_MOVIMENTO.Value:=qryMestreID_MOVIMENTO.Value;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou tentar fazer assim como você falou mas eu mantenho a propriedade lock type como ltBatchOptimistic. Outro ponto é o seguinte não posso permitir que ele sauve dados na tabela mestre sem ter inserido pelo menos um registro na tabela cdetalhes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ta quase funcionando amigo porem quando vou gravar da um erro de relacionamento pois a tabela detalhes não sabe qual o valor do campo id da tabela mestre como eu trato isso seria antes de dar o updatebatch ?Obs. eu uso campo auto incremento no access

Compartilhar este post


Link para o post
Compartilhar em outros sites

você precisa dar o Post, antes mesmo de inserir algum registro na detalhe, assim quando for inserir, ele vai executar o OnNewRecord e irá pegar o código da Mestre, que no caso já terá sido salvo o registro, gerando assim código...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas veja só imagina que você tem uma Nota fiscal a preencher, o usuario preenche o cabeçalho. Ai para preencher os itens ele grava o cabeçalho (como você me disse acima) se ele desistir da operação o cabeçalho ficará gravado sem os itens.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas para isto você pode criar um controle nos botões, você pode criar uma variável global para o form, digamos que o nome é inserindo, quando clica em novo seta a variável inserindo como True, quando cancelar você verificar, se inserindo for true, deleta o registro da mestre e os itens da detalhes caso existir, se clicar em alterar seta inserindo como False, e quando salvar seta inserindo tb como False...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.