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
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