edmjunio 0 Denunciar post Postado Outubro 6, 2006 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
marcio.theis 3 Denunciar post Postado Outubro 6, 2006 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
edmjunio 0 Denunciar post Postado Outubro 6, 2006 Preciso relamente usar adoquery porque preciso ter flexibilidade no sql da query. Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Outubro 6, 2006 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
edmjunio 0 Denunciar post Postado Outubro 6, 2006 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
marcio.theis 3 Denunciar post Postado Outubro 6, 2006 Bom... Para isto você pode criar validação no momento de salvar, se tiver um botão de salvar, pode obrigar q tenha pelo menos um registro informado. Compartilhar este post Link para o post Compartilhar em outros sites
edmjunio 0 Denunciar post Postado Outubro 6, 2006 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
marcio.theis 3 Denunciar post Postado Outubro 6, 2006 Primeiro você deve de dar o .Post na tabela mestre... e então irá conseguir cadastrar na detalhe... Compartilhar este post Link para o post Compartilhar em outros sites
edmjunio 0 Denunciar post Postado Outubro 6, 2006 Sim mas eu dou o post ou o updatebach Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Outubro 6, 2006 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
edmjunio 0 Denunciar post Postado Outubro 6, 2006 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
marcio.theis 3 Denunciar post Postado Outubro 6, 2006 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