MaximoAccess

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

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

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

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

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


2 participantes

    [Resolvido]Word com Relacionamento 1-para-Vários

    avatar
    vileman
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 580
    Registrado : 25/05/2011

    [Resolvido]Word com Relacionamento 1-para-Vários Empty [Resolvido]Word com Relacionamento 1-para-Vários

    Mensagem  vileman 30/7/2017, 03:03

    Boa noite a todos.

    Já havia feito há algum tempo em 2012 através da solução apresentada pelo colega Alexandre Neves no tópico:
    https://www.maximoaccess.com/t8831-resolvidoword-com-dados-de-consulta-x-um-para-muitos

    E estava agora precisando fazer algo semelhante, mas após várias tentativas não consegui o que queria, conforme segue abaixo:

    São 03 tabelas envolvidas na rotina, com seus campos abaixo:

    1) T01_Pacientes
    CodPaciente (Autonumeração)
    NomePaciente (Texto)
    e outros afins

    2) T011_Pac_Orientacoes
    CodPacOrienta (Autonumeração)
    IDPaciente (Número – inteiro longo)
    IDOrientacao (Número – inteiro longo)
    NomeOrientacao (Texto)

    3) T09_Orientacoes
    CodOrientacao (Autonumeração)
    TipoOrientacao (Texto)

    No Formulário "F01_Pacientes" (Fonte de registro: T01_Pacientes) tem um subformulário de nome “F011_Pac_Orientacoes” (Fonte de registro: T011_Pac_Orientacoes) que acrescenta vários registros com seus vários tipos de orientação através de Caixa de Combinação do campo ‘IDOrientacao’ que por sua vez tem como Origem da linha a Tabela: T09_Orientacoes. Nesse campo no evento ‘Após atualizar’ executa o comando abaixo:

    Private Sub IDOrientacao_AfterUpdate()
                Me!NomeOrientacao = IDOrientacao.Column(1)
    End Sub

    Significando que a cada registro inserido no subformulário é atualizado o campo ‘NomeOrientacao’ (T011_Pac_Orientacoes) correspondente ao campo ‘TipoOrientacao’ que está na coluna 1 da tabela ‘T09_Orientacoes’.

    Relacionamento: Formulário principal x subformulário
    Tabela “T01_Pacientes” está com Relacionamento [1 para vários] com o campo ‘CodPaciente’ e o campo “IDPaciente” da Tabela “T011_Pac_Orientacoes”, respectivamente (1 Paciente pode ter vários tipos de Orientações)

    O que preciso é:

    1) Após inserir no subformulário “F011_Pac_Orientacoes” os vários tipos de orientações para um Paciente e ao clicar no botão ‘btWord’ que já está funcional para os demais campos, gostaria de acrescentar as várias orientações que foram inseridas na tabela T011_Pac_Orientacoes através do subformulário citado, visto que serão vários registros e não apenas um.

    2) Baseado na rotina do tópico já resolvido e acima citado, tentei fazer da seguinte forma abaixo, entre outras tentativas, mas não funcionou:

            ... demais comandos da rotina acima (ok)

      Dim rst As DAO.Recordset, Orientacao As String
      Set rst = CurrentDb.OpenRecordset("SELECT NomeOrientacao FROM T011_Pac_Orientacoes LEFT JOIN T01_Pacientes ON T01_Pacientes.CodPaciente=T011_Pac_Orientacoes.IDPaciente WHERE CodPaciente=" & IDPaciente)
      Orientacao = ""
      Do While Not rst.EOF
      If Orientacao = "" Then Orientacao = rst(0) Else Orientacao = Orientacao & vbCr & rst(0)
         rst.MoveNext
      Loop
      Set rst = Nothing
      .ActiveDocument.Bookmarks("Campo21").Select
      .Selection.Text = Mid(Orientacao, 2)

    ... demais comandos da rotina abaixo (ok) ...

    PS: No documento matriz do Word acrescentei o campo 21 (indicador) para funcionar a rotina acima.

    3) Ao clicar no botão para gerar o documento Word, aparece a seguinte mensagem: “Erro em tempo de execução. Erro de sintaxe (Operador faltando) na expressão ‘CodPaciente=’
      ** Onde estaria o erro?

    4) Importante: No caso as várias orientações para um Paciente ficariam uma abaixo da outra, onde cada orientação é um registro da tabela ‘T011_Pac_Orientacoes’, conforme já descrito acima.

    Caso necessite postar a BD posso anexar depois.

    OBS: Uso o Access 2003
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8443
    Registrado : 05/11/2009

    [Resolvido]Word com Relacionamento 1-para-Vários Empty Re: [Resolvido]Word com Relacionamento 1-para-Vários

    Mensagem  Alexandre Neves 30/7/2017, 10:19

    Bom dia
    - não percebi porque utiliza Mid(Orientacao, 2). Se no primeiro registo não acrescenta a quebra de linha, não precisará de remover nada na cadeia construida

    - sobre a sua dúvida, veja que valor assume o IDPaciente na criação do recordset


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    vileman
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 580
    Registrado : 25/05/2011

    [Resolvido]Word com Relacionamento 1-para-Vários Empty Word com Relacionamento 1-para-Vários

    Mensagem  vileman 30/7/2017, 16:14

    Bom dia,

    Realmente tens razão, é que acabei deixando o comando .Selection.Text = Mid(Orientacao, 2), pois havia copiado da outra sua rotina, mas já fiz o ajuste.

    O valor do IDPaciente é igual a vazio
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8443
    Registrado : 05/11/2009

    [Resolvido]Word com Relacionamento 1-para-Vários Empty Re: [Resolvido]Word com Relacionamento 1-para-Vários

    Mensagem  Alexandre Neves 30/7/2017, 16:25

    Se é igual a vazio, o recorset não devolverá nada ou o parâmetro da consulta é vazio?


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    vileman
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 580
    Registrado : 25/05/2011

    [Resolvido]Word com Relacionamento 1-para-Vários Empty Word com Relacionamento 1-para-Vários

    Mensagem  vileman 30/7/2017, 23:32

    Apresenta vazio, mas não deveria ser assim, pois existe um CodPaciente, acredito que o erro possa estar nisso, mas não sei dizer como
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8443
    Registrado : 05/11/2009

    [Resolvido]Word com Relacionamento 1-para-Vários Empty Re: [Resolvido]Word com Relacionamento 1-para-Vários

    Mensagem  Alexandre Neves 31/7/2017, 09:29

    Bom dia
    O que significa IDPaciente? Nome de campo ou nome de controlo? Se for de controlo, deveria ser TxtIDPaciente paraz destrinçar do nome de campo e daí não confundir a bd
    Podem ser estas pequenas diferenças que chamamos muitas vezes à atenção da normalização dos nomes


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    vileman
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 580
    Registrado : 25/05/2011

    [Resolvido]Word com Relacionamento 1-para-Vários Empty Word com Relacionamento 1-para-Vários

    Mensagem  vileman 31/7/2017, 13:22

    Bom dia

    IDPaciente é um campo tipo número (inteiro longo) da tabela T011_Pac_Orientacoes que tem um Relacionamento com o campo CodPaciente da Tabela T01_Pacientes

    Tabela 'T01_Pacientes' está com Relacionamento [1 para vários] do campo ‘CodPaciente’ com o campo “IDPaciente” da Tabela “T011_Pac_Orientacoes”, respectivamente
    (1 Paciente pode ter vários tipos de Orientações)

    T01_Pacientes
    CodPaciente (Autonumeração)
    NomePaciente (Texto)
    e outros afins

    T011_Pac_Orientacoes
    CodPacOrienta (Autonumeração)
    IDPaciente (Número – inteiro longo)
    IDOrientacao (Número – inteiro longo)
    NomeOrientacao (Texto)

    Não existe na rotina ou em outra tabela outro campo com esse nome IDPaciente
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8443
    Registrado : 05/11/2009

    [Resolvido]Word com Relacionamento 1-para-Vários Empty Re: [Resolvido]Word com Relacionamento 1-para-Vários

    Mensagem  Alexandre Neves 31/7/2017, 18:48

    Boa tarde,
    Se o controlo tem conteúdo e chega ao filtro sem conteúdo
    Tem de executar passo-a-passo (F8) para detectar onde perde o valor do IDPaciente


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    vileman
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 580
    Registrado : 25/05/2011

    [Resolvido]Word com Relacionamento 1-para-Vários Empty Word com Relacionamento 1-para-Vários

    Mensagem  vileman 1/8/2017, 00:27

    Boa noite

    Fiz como conforme sua orientação e mostra o que segue na imagem
    * Veja nas 2 últimas linhas da imagem

    [Resolvido]Word com Relacionamento 1-para-Vários Fma_wo10

    Apresenta assim o resultado:
    campo CodPaciente = 1 (correto)
    campo IDPaciente = vazio (incorreto)

    Se achar melhor posso enviar o arquivo para melhor compreensão e solução.
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8443
    Registrado : 05/11/2009

    [Resolvido]Word com Relacionamento 1-para-Vários Empty Re: [Resolvido]Word com Relacionamento 1-para-Vários

    Mensagem  Alexandre Neves 1/8/2017, 22:15

    Boa noite,
    Se IDPaciente chega aí vazio terá de se ver o porquê
    Pode enviar, mas detalhe tudo o que se deve fazer para chegar a essa situação


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    vileman
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 580
    Registrado : 25/05/2011

    [Resolvido]Word com Relacionamento 1-para-Vários Empty Word com Relacionamento 1-para-Vários

    Mensagem  vileman 2/8/2017, 13:48

    Bom dia

    Vou preparar o arquivo e envio em seguida com os detalhes
    avatar
    vileman
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 580
    Registrado : 25/05/2011

    [Resolvido]Word com Relacionamento 1-para-Vários Empty Word com Relacionamento 1-para-Vários

    Mensagem  vileman 4/8/2017, 19:49

    Boa tarde,

    Desculpe a demora, é que estava tentando resolver o tópico, mas não consegui, então segue arquivo em anexo.

    Instruções:
    1) Criar pasta na unidade C:\DESPERTAR
    2) Descompactar arquivo nessa pasta criada
    3) Nessa pasta será copiada as subpastas:
       00.MatrizWord
       01.Relatórios

    Esses caminhos é para testar quando da geração do arquivo Word da rotina
    * PS: Na subpasta 00.MatrizWord tem o arquivo: MatrizPaciente.doc
      usado para criar capturar os dados do formulário
    Anexos
    [Resolvido]Word com Relacionamento 1-para-Vários AttachmentDESPERTAR.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (192 Kb) Baixado 28 vez(es)
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8443
    Registrado : 05/11/2009

    [Resolvido]Word com Relacionamento 1-para-Vários Empty Re: [Resolvido]Word com Relacionamento 1-para-Vários

    Mensagem  Alexandre Neves 4/8/2017, 21:34

    Boa noite,
    Não existe nenhum controlo com nome IDPaciente, existe com nome CodPaciente
    Substitua pelo nome correcto


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    vileman
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 580
    Registrado : 25/05/2011

    [Resolvido]Word com Relacionamento 1-para-Vários Empty Word com Relacionamento 1-para-Vários

    Mensagem  vileman 5/8/2017, 02:42

    Boa noite,

    Ficou perfeito, quem sabe, sabe. Ficou conforme abaixo: Bastou trocar apenas o 'IDPaciente' pelo 'CodPaciente' no final da linha de comando (em vermelho)

     'AUTOR: Alexandre Neves - Fórum MáximoAccess (31/07/2012) - Rotina original
      Dim rst As DAO.Recordset, Orientacao As String
      Set rst = CurrentDb.OpenRecordset("SELECT NomeOrientacao FROM T011_Pac_Orientacoes LEFT JOIN T01_Pacientes ON T01_Pacientes.CodPaciente=T011_Pac_Orientacoes.IDPaciente WHERE CodPaciente=" & CodPaciente)
      Orientacao = ""
      Do While Not rst.EOF
      If Orientacao = "" Then Orientacao = rst(0) Else Orientacao = Orientacao & vbCr & vbCr & rst(0) '04/08/2017: acrescentei mais um comando '& vbCr' para acrescentar mais um espaço entre os registros inseridos
         rst.MoveNext
      Loop
      Set rst = Nothing
      .ActiveDocument.Bookmarks("Campo21").Select
      .Selection.Text = Orientacao

    Para encerrar, gostaria de saber se teria como numerar automaticamente na ordem sequencial cada uma das linhas quando é lançado no documento Word para ficar conforme abaixo:

    Atualmente ficou assim:

    Adaptação de material didático-pedagógico e forma de avaliação, conforme peculiaridades do aluno.

    Uso de outras linguagens e recursos visuais para facilitar a compreensão das aulas expostas, utilizando figuras, esquemas, gráficos, fotos e ícones associando o texto escrito a imagens, visando ilustrar e evocar lembranças.

    Adotar e adaptar critérios diferenciados de correção coerente à realidade, valorando não só o que está explícito e considerar a avaliação de atividades práticas.

    Possibilitar elaboração de prova de forma individualizada, respeitando especificidades, e quando necessário maior tempo para aplicar a prova, ou dividir a avaliação em dois tempos.

    Gostaria que ficasse assim:

    1. Adaptação de material didático-pedagógico e forma de avaliação, conforme peculiaridades do aluno.

    2. Uso de outras linguagens e recursos visuais para facilitar a compreensão das aulas expostas, utilizando figuras, esquemas, gráficos, fotos e ícones associando o texto escrito a imagens, visando ilustrar e evocar lembranças.

    3. Adotar e adaptar critérios diferenciados de correção coerente à realidade, valorando não só o que está explícito e considerar a avaliação de atividades práticas.

    4. Possibilitar elaboração de prova de forma individualizada, respeitando especificidades, e quando necessário maior tempo para aplicar a prova, ou dividir a avaliação em dois tempos.
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8443
    Registrado : 05/11/2009

    [Resolvido]Word com Relacionamento 1-para-Vários Empty Re: [Resolvido]Word com Relacionamento 1-para-Vários

    Mensagem  Alexandre Neves 5/8/2017, 09:06

    Bom dia,
    Tem de começar a agilizar a mecânica

    Substitua no trecho correpondente
    Código:
      'AUTOR: Alexandre Neves - Fórum MáximoAccess (31/07/2012) - Rotina original
      Dim rst As DAO.Recordset, Orientacao As String
      Set rst = CurrentDb.OpenRecordset("SELECT (SELECT count('*') FROM T011_Pac_Orientacoes as A WHERE A.CodPacOrienta<=T011_Pac_Orientacoes.CodPacOrienta) as Num, NomeOrientacao FROM T011_Pac_Orientacoes LEFT JOIN T01_Pacientes ON T01_Pacientes.CodPaciente=T011_Pac_Orientacoes.IDPaciente WHERE CodPaciente=" & CodPaciente)
      Orientacao = ""
      Do While Not rst.EOF
      If Orientacao = "" Then Orientacao = rst(0) & ". " & rst(1) Else Orientacao = Orientacao & vbCr & rst(0) & ". " & rst(1)
          rst.MoveNext
      Loop
      Set rst = Nothing
      .ActiveDocument.Bookmarks("Campo21").Select
      .Selection.Text = Orientacao


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    vileman
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 580
    Registrado : 25/05/2011

    [Resolvido]Word com Relacionamento 1-para-Vários Empty Word com Relacionamento 1-para-Vários

    Mensagem  vileman 5/8/2017, 14:36

    Bom dia, Alexandre Neves

    Ficou mais uma vez na perfeição, você é o cara.
    Nem sei como lhe agradecer, valeu por mais essa ajuda.

    Muitíssimo obrigado.

    Conteúdo patrocinado


    [Resolvido]Word com Relacionamento 1-para-Vários Empty Re: [Resolvido]Word com Relacionamento 1-para-Vários

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 29/3/2024, 01:59