Boa tarde a todos. Após pesquisas neste Fórum, encontrei 2 tópicos com os quais tentei resolver minha dúvida, mas não consegui de forma completa e satisfatória, porisso peço a ajuda dos senhores no seguinte:
*** Uso o Access 2003
Tenho:
Formulário principal: F16_DocAdministrativos - Tabela: T16_DocAdministrativos
Subformulário: F163_DocAdm_Anexos - Tabela: T163_DocAdm_Anexos
Os mesmos estão com relacionamento um-para-vários, ou seja, um Documento Administrativo pode ter vários anexos.
Ao incluir anexos pelo subformulário acima, preciso criar uma rotina que ao clicar em um botão faça a duplicação de todos Anexo(s) existentes para outro Subformulário: F174_NotFato_Anexos (Tabela: T174_NotFato_Anexos - que por sua vez tem um relacionamento um-para-vários com a tabela “T17_Procedimentos”, isto é, um Procedimento pode ter vários anexos, ou seja, esses anexos duplicados iriam se juntar aos que porventura existam nessa tabela).
Usei o tópico: https://www.maximoaccess.com/t9885-resolvidoduplicar-dados-do-form-subform-com-vba
postado pelo colega Marcelo Silva e resolvido pelo colega rclenzi
Tabela Origem da duplicação e seus campos:
T163_DocAdm_Anexos
CodAnexoDocAdm (autonumeracao)
IDCodDocAdm (número)
DataAnexo (data)
IDDocumento (número)
TipoComplemento (texto)
Tabela Destino da duplicação e seus campos:
T174_NotFato_Anexos
CodAnexoDocAdm (autonumeracao)
IDCodNotFato (número)
DataAnexo (data)
IDDocumento (número)
TipoComplemento (texto)
Após minhas adaptações ficou assim:
Private Sub DuplicaAnexos_Click()
If Not IsNull(Me!CodAnexoDocAdm) Then
If MsgBox("Confirma a Duplicação do(s) Registro(s) Anexo(s) para Formulário de Notícias de Fato?", vbQuestion + vbYesNo) = vbYes Then
Dim CodigoNovoAnexo As Long
CurrentDb.Execute "INSERT INTO T163_DocAdm_Anexos ( IDCodDocAdm, DataAnexo, IDDocumento, TipoComplemento ) SELECT IDCodDocAdm, DataAnexo, IDDocumento, TipoComplemento FROM T163_DocAdm_Anexos WHERE CodAnexoDocAdm=" & Me!CodAnexoDocAdm & ";", dbFailOnError
CodigoNovoAnexo = DMax("CodAnexoDocAdm", Me.RecordSource)
CurrentDb.Execute "INSERT INTO T174_NotFato_Anexos ( IDCodNotFato, DataAnexo, IDDocumento, TipoComplemento ) SELECT " & CodigoNovoAnexo & ", DataAnexo, IDDocumento, TipoComplemento, FROM T174_NotFato_Anexos WHERE ID_IDCodNotFato=" & Me!CodAnexoDocAdm & ";", dbFailOnError
Me.Requery
End If
End If
End Sub
Mas, apareceu a mensagem: "Erro em tempo de execução '3134'. Erro de sintaxe na instrução INSERT INTO". Ao clicar em ‘Depurar’ apontou para a linha:
CurrentDb.Execute "INSERT INTO T174_NotFato_Anexos ( IDCodNotFato, DataAnexo, IDDocumento, TipoComplemento ) SELECT " & CodigoNovoAnexo & ", DataAnexo, IDDocumento, TipoComplemento, FROM T174_NotFato_Anexos WHERE ID_IDCodNotFato=" & Me!CodAnexoDocAdm & ";", dbFailOnError
Então deduzi que faltava abrir a tabela "T174_NotFato_Anexos" que é o destino da duplicação dos registros, para isso tentar usar outro tópico: https://www.maximoaccess.com/t27941-resolvidoabrir-tabelas-dentro-de-sub-formulario
postado pelo colega =>Nois que foi assesorado pelos colegas Ahteixeira e Fabianobilo, ficando assim a rotina:
Private Sub DuplicaAnexos_Click() 'Resposta de [rclenzi]
If Not IsNull(Me!CodAnexoDocAdm) Then
If MsgBox("Confirma a Duplicação do(s) Registro(s) Anexo(s) para Formulário de Notícias de Fato?", vbQuestion + vbYesNo) = vbYes Then
Dim CodigoNovoAnexo As Long
CurrentDb.Execute "INSERT INTO T163_DocAdm_Anexos ( IDCodDocAdm, DataAnexo, IDDocumento, TipoComplemento ) SELECT IDCodDocAdm, DataAnexo, IDDocumento, TipoComplemento FROM T163_DocAdm_Anexos WHERE CodAnexoDocAdm=" & Me!CodAnexoDocAdm & ";", dbFailOnError
CodigoNovoAnexo = DMax("CodAnexoDocAdm", Me.RecordSource)
INICIO.SourceObject = "Tabela." & "T174_NotFato_Anexos" 'Abre Tabela para onde vai ao Duplicar o registro. Resposta de [=>Nois]
CurrentDb.Execute "INSERT INTO T174_NotFato_Anexos ( IDCodNotFato, DataAnexo, IDDocumento, TipoComplemento ) SELECT " & CodigoNovoAnexo & ", DataAnexo, IDDocumento, TipoComplemento, FROM T174_NotFato_Anexos WHERE ID_IDCodNotFato=" & Me!CodAnexoDocAdm & ";", dbFailOnError
Me.Requery
End If
End If
End Sub
Mas, apareceu a mensagem: "Erro em tempo de execução '424'. O objeto é obrigatório". Ao clicar em ‘Depurar’ apontou para a linha:
INICIO.SourceObject = "Tabela." & "T174_NotFato_Anexos" 'Abre Tabela para onde vai ao Duplicar o registro. Resposta de [=>Nois]
Como não tenho muita experiência no VBA, devo estar me equivocando em algo que nem percebi. Apesar de ter colocado o botão de comando “DuplicaAnexos” no subformulário “F163_DocAdm_Anexos” minha intenção era ter colocado no formulário principal, mas tentei e não consegui, porisso coloquei no subformulário para depois se conseguisse fazer funcionar, iria tentar colocar no formulário principal, no entanto, nem isso consegui fazer.
Segue em anexo o arquivo com dados para melhor entendimento.
https://www.dropbox.com/s/bnmbzqrfs9qzo11/FMA%20-%20DuplicarSubformul%C3%A1rio.zip?dl=0
*** Uso o Access 2003
Tenho:
Formulário principal: F16_DocAdministrativos - Tabela: T16_DocAdministrativos
Subformulário: F163_DocAdm_Anexos - Tabela: T163_DocAdm_Anexos
Os mesmos estão com relacionamento um-para-vários, ou seja, um Documento Administrativo pode ter vários anexos.
Ao incluir anexos pelo subformulário acima, preciso criar uma rotina que ao clicar em um botão faça a duplicação de todos Anexo(s) existentes para outro Subformulário: F174_NotFato_Anexos (Tabela: T174_NotFato_Anexos - que por sua vez tem um relacionamento um-para-vários com a tabela “T17_Procedimentos”, isto é, um Procedimento pode ter vários anexos, ou seja, esses anexos duplicados iriam se juntar aos que porventura existam nessa tabela).
Usei o tópico: https://www.maximoaccess.com/t9885-resolvidoduplicar-dados-do-form-subform-com-vba
postado pelo colega Marcelo Silva e resolvido pelo colega rclenzi
Tabela Origem da duplicação e seus campos:
T163_DocAdm_Anexos
CodAnexoDocAdm (autonumeracao)
IDCodDocAdm (número)
DataAnexo (data)
IDDocumento (número)
TipoComplemento (texto)
Tabela Destino da duplicação e seus campos:
T174_NotFato_Anexos
CodAnexoDocAdm (autonumeracao)
IDCodNotFato (número)
DataAnexo (data)
IDDocumento (número)
TipoComplemento (texto)
Após minhas adaptações ficou assim:
Private Sub DuplicaAnexos_Click()
If Not IsNull(Me!CodAnexoDocAdm) Then
If MsgBox("Confirma a Duplicação do(s) Registro(s) Anexo(s) para Formulário de Notícias de Fato?", vbQuestion + vbYesNo) = vbYes Then
Dim CodigoNovoAnexo As Long
CurrentDb.Execute "INSERT INTO T163_DocAdm_Anexos ( IDCodDocAdm, DataAnexo, IDDocumento, TipoComplemento ) SELECT IDCodDocAdm, DataAnexo, IDDocumento, TipoComplemento FROM T163_DocAdm_Anexos WHERE CodAnexoDocAdm=" & Me!CodAnexoDocAdm & ";", dbFailOnError
CodigoNovoAnexo = DMax("CodAnexoDocAdm", Me.RecordSource)
CurrentDb.Execute "INSERT INTO T174_NotFato_Anexos ( IDCodNotFato, DataAnexo, IDDocumento, TipoComplemento ) SELECT " & CodigoNovoAnexo & ", DataAnexo, IDDocumento, TipoComplemento, FROM T174_NotFato_Anexos WHERE ID_IDCodNotFato=" & Me!CodAnexoDocAdm & ";", dbFailOnError
Me.Requery
End If
End If
End Sub
Mas, apareceu a mensagem: "Erro em tempo de execução '3134'. Erro de sintaxe na instrução INSERT INTO". Ao clicar em ‘Depurar’ apontou para a linha:
CurrentDb.Execute "INSERT INTO T174_NotFato_Anexos ( IDCodNotFato, DataAnexo, IDDocumento, TipoComplemento ) SELECT " & CodigoNovoAnexo & ", DataAnexo, IDDocumento, TipoComplemento, FROM T174_NotFato_Anexos WHERE ID_IDCodNotFato=" & Me!CodAnexoDocAdm & ";", dbFailOnError
Então deduzi que faltava abrir a tabela "T174_NotFato_Anexos" que é o destino da duplicação dos registros, para isso tentar usar outro tópico: https://www.maximoaccess.com/t27941-resolvidoabrir-tabelas-dentro-de-sub-formulario
postado pelo colega =>Nois que foi assesorado pelos colegas Ahteixeira e Fabianobilo, ficando assim a rotina:
Private Sub DuplicaAnexos_Click() 'Resposta de [rclenzi]
If Not IsNull(Me!CodAnexoDocAdm) Then
If MsgBox("Confirma a Duplicação do(s) Registro(s) Anexo(s) para Formulário de Notícias de Fato?", vbQuestion + vbYesNo) = vbYes Then
Dim CodigoNovoAnexo As Long
CurrentDb.Execute "INSERT INTO T163_DocAdm_Anexos ( IDCodDocAdm, DataAnexo, IDDocumento, TipoComplemento ) SELECT IDCodDocAdm, DataAnexo, IDDocumento, TipoComplemento FROM T163_DocAdm_Anexos WHERE CodAnexoDocAdm=" & Me!CodAnexoDocAdm & ";", dbFailOnError
CodigoNovoAnexo = DMax("CodAnexoDocAdm", Me.RecordSource)
INICIO.SourceObject = "Tabela." & "T174_NotFato_Anexos" 'Abre Tabela para onde vai ao Duplicar o registro. Resposta de [=>Nois]
CurrentDb.Execute "INSERT INTO T174_NotFato_Anexos ( IDCodNotFato, DataAnexo, IDDocumento, TipoComplemento ) SELECT " & CodigoNovoAnexo & ", DataAnexo, IDDocumento, TipoComplemento, FROM T174_NotFato_Anexos WHERE ID_IDCodNotFato=" & Me!CodAnexoDocAdm & ";", dbFailOnError
Me.Requery
End If
End If
End Sub
Mas, apareceu a mensagem: "Erro em tempo de execução '424'. O objeto é obrigatório". Ao clicar em ‘Depurar’ apontou para a linha:
INICIO.SourceObject = "Tabela." & "T174_NotFato_Anexos" 'Abre Tabela para onde vai ao Duplicar o registro. Resposta de [=>Nois]
Como não tenho muita experiência no VBA, devo estar me equivocando em algo que nem percebi. Apesar de ter colocado o botão de comando “DuplicaAnexos” no subformulário “F163_DocAdm_Anexos” minha intenção era ter colocado no formulário principal, mas tentei e não consegui, porisso coloquei no subformulário para depois se conseguisse fazer funcionar, iria tentar colocar no formulário principal, no entanto, nem isso consegui fazer.
Segue em anexo o arquivo com dados para melhor entendimento.
https://www.dropbox.com/s/bnmbzqrfs9qzo11/FMA%20-%20DuplicarSubformul%C3%A1rio.zip?dl=0