MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    Formulário com Subformulário desacoplados

    Compartilhe

    wilflx2
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12
    Registrado : 31/01/2014

    Formulário com Subformulário desacoplados

    Mensagem  wilflx2 em Sex 13 Abr 2018, 00:38

    Boa noite aos grandes mestres!

    Venha recorrer a uma solução que não encontrei em nenhum lugar da net, até mesmo aqui, procurei em outros fóruns, em paginas, vi até videos em inglês, porem, não encontrei nada parecido que pudesse me ensinar a resolver.

    Desenvolvi um banco de dados onde cadastro os pedidos de exames médicos da clinica onde trabalho, usei de começo as ferramentas básicas do Access , formulários acoplados e macros, com o passar do tempo fui melhorando o sistema e passei a usar mais o VBA. Aprendi a trabalhar e criar formulários desacoplados, visando mais fluidez e segurança nos registros, até ai tudo bem, agora meu problema está em como trabalhar com formulários com subformulários desacoplados. No meu formulário de cadastro principal, insiro o digamos "cabeçalho" do pedido do exame (Nome, Data de Nascimento, Prontuario e etc.) e no subformulário lanço os exames solicitados pelo médico (Raio X Torax, Ultrassom, Mamografias e etc.).

    Vamos a estrutura do banco.
    Tenho duas tabelas:

    Nome da tabela: tab1
    Campos: Id - Nome - DataNascimento - DataPedido - Prontuario - MedicoSolic - Autorizacao - Etc...

    Nome da tabela: tab2
    Campos: Id2 - TipoExame - Exame - Qtda - Valor - Local - Etc...

    Nome do formulário pai: frmPECad
    Nome do subformulário: frmPECadSub

    [Você precisa estar registrado e conectado para ver esta imagem.][Você precisa estar registrado e conectado para ver esta imagem.]" />

    Ao clicar no botão "Novo Exame" abre um novo formulário onde cadastro os exames solicitados, que são inseridos na tab2, assim usando um requery no subformulário, aparece instantaneamente o exame cadastrado.

    [Você precisa estar registrado e conectado para ver esta imagem.][Você precisa estar registrado e conectado para ver esta imagem.]" />

    Minha dúvida:
    Como faço para vincular o formulário Pai e o Filho desacoplados?
    Não consigo fazer o formulário filho filtrar os dados referentes ao formulário pai. Uso Uma SQL para buscar os dados? Se sim como seria o código?

    Agradeço desde já a atenção.
    avatar
    CassioFabre
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 625
    Registrado : 18/01/2013

    Re: Formulário com Subformulário desacoplados

    Mensagem  CassioFabre em Sex 13 Abr 2018, 18:09

    Boa tarde,

    A ideia é bem simples. Na tabela onde cadastrar os dados do formulário PAI você tem um campo de identificação para cada registro. Suponho que neste caso seja o campo Id. O que você tem que fazer é inserir este campo na tabela que dá origem ao subformulário e cadastrar o Id do registro PAI neste campo. Quando você fizer as querys para resgatar o registro, usará como identificador este campo que está presente nas duas tabelas. Sua estrutura ficará assim:

    Nome da tabela: tab1
    Campos: Id - Nome - DataNascimento - DataPedido - Prontuario - MedicoSolic - Autorizacao - Etc...

    Nome da tabela: tab2
    Campos: Id2 - IdPai - TipoExame - Exame - Qtda - Valor - Local - Etc...

    Você não necessariamente tem que colocar o nome "IdPai", foi apenas um exemplo. O imprescindível é o valor deste campo ser igual ao valor do campo Id da tab1 do registro correspondente. Depois disso, basta filtrar usando-o na cláusula WHERE do sql.

    Abraço.


    .................................................................................
    Só não tem código pra morte!

    wilflx2
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12
    Registrado : 31/01/2014

    Re: Formulário com Subformulário desacoplados

    Mensagem  wilflx2 em Seg 16 Abr 2018, 14:02

    Obrigado pela resposta CassioFabre!

    Eu já tenho essa estrutura na tabela, no caso eu refiz todo o programa criando dessa forma na tabela, ficou assim:

    Tab1: IdPedido - Nome - DataNascimento - etc...

    Tab2: IdItem - IdPedido - TipoExame - etc...

    Usando o SQL como você disse dá certo, inseri no evento ao carregar o formulário, agora me deparei com outro problema, quando uso o a ligação que o próprio Access faz você pode inserir os dados tanto no formulário pai, como no filho, e se por acaso clicar em Cancelar ele não salva nas duas tabelas, desfaz todo o cadastro, agora nesse método, se eu inserir os dados no formulário pai e abrir o segundo formulário que inseri dados na tabela filho, ele vai salvar direto na tab2, digamos que eu clique em Cancelar, só vai desfazer os dados do formulario pai, nao do filho, ou seja, vai ficar um registro morto dentro da Tab2, como posso resolver isso? Tem alguma forma que eu ao clicar em cancelar desfaz todo o processo?
    Não sei se consegui explicar bem. Neutral




    avatar
    CassioFabre
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 625
    Registrado : 18/01/2013

    Re: Formulário com Subformulário desacoplados

    Mensagem  CassioFabre em Ter 17 Abr 2018, 12:21

    Bom dia,

    Entendi seu problema. Isso é bem óbvio pois, mesmo que esteja criando um formulário desvinculado, o seu subformulário (folha de dados) está na verdade vinculado à tabela, por isso ele salva as alterações. Eu indico duas soluções aqui:

    1 - Criar uma tabela temporária a cada vez que voce abrir o formulário e basear o seu subform nesta tabela temporária e a cada vez que fizer uma pesquisa de registro, busque o registro na tabela orifinal e ponha-o nesta temporária e faça as alterações necessárias. Caso não haja alterações e você cancele a adição (seu problema atual) basta excluir os registros dessa tabela e nada será afetado na tabela original. Caso queira salvar, basta passar os registros para a tabela original no fim das alterações. Para o caso de adições, funciona extamente da mesma form, porém não precisará resgatar os dados da tabela original, por óbvio.

    [Você precisa estar registrado e conectado para ver este link.]

    2 - Criar uma tabela fixa ao invés de temporária apenas para popular o subform. Funciona exatamente da mesma form que citei acima, porém não terá o trabalho de criar quando abrir e excluir quando fechar, o que dependendo do nível de utilização pode impactar bastante no processamento do sistema. Costumo utilizar essa solução. Salvar os registros e tudo mais é exatamente como citei acima.

    Abraço.


    .................................................................................
    Só não tem código pra morte!
    avatar
    Assis
    Maximo VIP
    Maximo VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 3341
    Registrado : 06/11/2009

    Re: Formulário com Subformulário desacoplados

    Mensagem  Assis em Ter 17 Abr 2018, 12:41

    Boa tarde

    Viu este exemplo, tem o formulário e o subformulários desvinculados

    copie o link abaixo e cole no navegador

    maximoaccess.com/t32640-resolvidosubformulario-desvinculado#224768



    .................................................................................
    *** Só sei que nada sei ***
    avatar
    CassioFabre
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 625
    Registrado : 18/01/2013

    Re: Formulário com Subformulário desacoplados

    Mensagem  CassioFabre em Ter 17 Abr 2018, 14:01

    Bom dia,

    Assis, neste exemplo nao é usado subformulário. Foi usada uma listbox com campos que adicionam ou editam registros nessa listbox. Também daria certo para o amigo, porém dependendo da quantidade de campos e o tipo de usuário, daria muito mais trabalho para codificar tudo, algo com o formulário folha de dados já faz de uma forma mais simples e mais fácil para validação.

    Abraço.


    .................................................................................
    Só não tem código pra morte!

    wilflx2
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12
    Registrado : 31/01/2014

    Re: Formulário com Subformulário desacoplados

    Mensagem  wilflx2 em Qua 18 Abr 2018, 02:08

    Boa noite amigos!

    Perfeito CassioFabre, entendeu realmente meu problema! Vou tentar a sua solução, nunca trabalhei com criação de tabelas temporárias, vou testar, pelo que vi é um tanto trabalhoso, mas pode ser a solução para otimizar a inserção e a busca de dados.

    Com os formulários vinculados percebi uma grande lentidão com o passar do tempo e também a dificuldade em manipular os dados, que se tornam frágeis.

    Amigo Assis, gostei desse exemplo, vou aderir em outros BDs que tenho, mas como o CassioFabre disse, não me ajuda neste problema.

    Obrigado pela atenção e ajuda! Vou testar e dou-lhes uma posição!

    Abraços!
    avatar
    Noobezinho
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3592
    Registrado : 29/06/2012

    Re: Formulário com Subformulário desacoplados

    Mensagem  Noobezinho em Qua 18 Abr 2018, 12:05

    Willian

    Estou acompanhando o tópico, então você disse:

    "Com os formulários vinculados percebi uma grande lentidão com o passar do tempo e também a dificuldade em manipular os dados, que se tornam frágeis"


    Quantos registros tem teu aplicativo?

    E o que quer dizer com "se tornam frágeis"?

    [ ]'s


    .................................................................................
    Noobezinho - Balem

    * A solução funcionou?  [Você precisa estar registrado e conectado para ver esta imagem.] 
    Agradeça e feche o tópico clicando no botão Resolvido
    Se não sabe como, veja [Você precisa estar registrado e conectado para ver este link.].

    Como anexar imagem no teu post do fórum : [Você precisa estar registrado e conectado para ver este link.]

    * Criar arquivos.zip com o Winrar - veja [Você precisa estar registrado e conectado para ver este link.].

    Atualmente estou verificando se ajudamos alguém e não retornou.
    Se não deu retorno, não  ajudo novamente .

    wilflx2
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12
    Registrado : 31/01/2014

    Re: Formulário com Subformulário desacoplados

    Mensagem  wilflx2 em Qui 19 Abr 2018, 16:22

    Boa tarde Noobezinho,

    Meu BD tem 116 mil registros, comecei ele ano passado, eu percebi que para salvar o registro tinha um certo atraso, dava umas travadas, os usuários reclamavam de lentidão e até um travamento, são 9 pessoas alimentando seguidamente e diariamente.
    Troquei por formulários desvinculados e esse atraso acabou.

    Quando digo frágeis falo do modo em que o access apresenta os registros, qualquer alteração já vai direto para a tabela, por ele carregar todos os dados da tabela, ele cria um vinculo que fica em aberto, quando á muitos lançamentos ao mesmo tempo junto com consultas ele resulta as vezes em corrompimento. Não sei se é um problema só meu, ou que eu possa ter feito algo de errado.
    Um exemplo: Ao carregar um registro, um usuário faz alguma alteração e ao invés de clicar em Salvar ele apenas fecha o formulário, acreditando que as alterações não surtiram efeito, mas acontece ao contrario, o Access já salva automaticamente.

    Com o método desvinculado, ele só recorre a tabela para buscar ou acrescentar o registro sem manter uma conexão aberta com ela. Usando Dao para cadastro e SQL para consulta, senti uma melhora na velocidade e estabilidade no sistema.

    avatar
    Noobezinho
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3592
    Registrado : 29/06/2012

    Re: Formulário com Subformulário desacoplados

    Mensagem  Noobezinho em Qui 19 Abr 2018, 21:37

    Para evitar esse trabalhão todo e mantendo a vinculação, que tal fazer assim?

    Na seção declarações  do módulo do formulário, coloque:

    Dim strDirty as Boolean

    No evento Ao abri do formulário:

    strDirty = False

    No evento Em sujo do fomulário:

    strDirty = true

    No evento Ao fechar do formulário:

    If txtDirty = True Then
      If MsgBox("Foram feitas alterações nesse registro." & vbCrLf & "Deseja salvar essa alterações?", vbQuestion + vbYesNo) = vbNo Then
         DoCmd.RunCommand acCmdUndo
      End If
    End If

    Experimente.

    [ ]'s


    .................................................................................
    Noobezinho - Balem

    * A solução funcionou?  [Você precisa estar registrado e conectado para ver esta imagem.] 
    Agradeça e feche o tópico clicando no botão Resolvido
    Se não sabe como, veja [Você precisa estar registrado e conectado para ver este link.].

    Como anexar imagem no teu post do fórum : [Você precisa estar registrado e conectado para ver este link.]

    * Criar arquivos.zip com o Winrar - veja [Você precisa estar registrado e conectado para ver este link.].

    Atualmente estou verificando se ajudamos alguém e não retornou.
    Se não deu retorno, não  ajudo novamente .

    wilflx2
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12
    Registrado : 31/01/2014

    Re: Formulário com Subformulário desacoplados

    Mensagem  wilflx2 em Sex 20 Abr 2018, 21:10

    Boa tarde!!

    Noobezinho, é interessante sua ideia, desconhecia esse método, vou aplicar aqui e ver como funciona.

    Eu ainda gostaria de manter os formulários desvinculados, pela rapidez de carregamento, mas se caso não encontrar um método que funcione perfeitamente, vou manter vinculado mesmo.

    Tentei adaptar o lance das tabelas temporárias mas não consegui, acredito que ficou trabalhoso demais.

    avatar
    Noobezinho
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3592
    Registrado : 29/06/2012

    Re: Formulário com Subformulário desacoplados

    Mensagem  Noobezinho em Sex 20 Abr 2018, 21:27

    Quanto a demora no carregamento,

    faz a compactação do Back End?

    Isso agiliza e muito o carregamento.


    .................................................................................
    Noobezinho - Balem

    * A solução funcionou?  [Você precisa estar registrado e conectado para ver esta imagem.] 
    Agradeça e feche o tópico clicando no botão Resolvido
    Se não sabe como, veja [Você precisa estar registrado e conectado para ver este link.].

    Como anexar imagem no teu post do fórum : [Você precisa estar registrado e conectado para ver este link.]

    * Criar arquivos.zip com o Winrar - veja [Você precisa estar registrado e conectado para ver este link.].

    Atualmente estou verificando se ajudamos alguém e não retornou.
    Se não deu retorno, não  ajudo novamente .

    wilflx2
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12
    Registrado : 31/01/2014

    Re: Formulário com Subformulário desacoplados

    Mensagem  wilflx2 em Seg 23 Abr 2018, 14:20

    Fiz sim, sempre que salvo faço a compactação, acredito que possa ser a rede também, não temos um roteador bom e são muitas conexões ao mesmo tempo.
    Só queria uma forma mais simples de trabalhar com os formularios desvinculados.

      Data/hora atual: Qua 25 Abr 2018, 19:28