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


3 participantes

    [Resolvido]Duplicar dados de Subformulário para outro Subformulário

    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]Duplicar dados de Subformulário para outro Subformulário Empty [Resolvido]Duplicar dados de Subformulário para outro Subformulário

    Mensagem  vileman 12/3/2017, 18:27

    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
    Julio Lustosa
    Julio Lustosa
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 203
    Registrado : 23/02/2011

    [Resolvido]Duplicar dados de Subformulário para outro Subformulário Empty Re: [Resolvido]Duplicar dados de Subformulário para outro Subformulário

    Mensagem  Julio Lustosa 12/3/2017, 19:09

    Boa tarde!

    Na linha que ocorreu o erro, não tem vírgula que antecede o FROM:

    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

    Retire esta vírgula e tente novamente.

    Att.
    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]Duplicar dados de Subformulário para outro Subformulário Empty Duplicar dados de Subformulário para outro Subformulário

    Mensagem  vileman 13/3/2017, 02:21

    Boa noite,

    Fiz como orientado retirando a vírgula antes do FROM, e agora aconteceu a mensagem: "Erro em tempo de execução '3346'. Número de valores da consulta e campos de destino não coincidem". Ao clicar em ‘Depurar’ apontou para a linha:
    CurrentDb.Execute "INSERT INTO T174_NotFato_Anexos ( DataAnexo, IDDocumento, TipoComplemento ) SELECT " & CodigoNovoAnexo & ", DataAnexo, IDDocumento, TipoComplemento FROM T174_NotFato_Anexos WHERE CodAnexoNotFato=" & Me!CodAnexoDocAdm & ";", dbFailOnError
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Duplicar dados de Subformulário para outro Subformulário Empty Re: [Resolvido]Duplicar dados de Subformulário para outro Subformulário

    Mensagem  Alexandre Neves 13/3/2017, 08:25

    Bom dia,
    Retirou a vírgula e campo. Veja se dá
    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


    .................................................................................
    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]Duplicar dados de Subformulário para outro Subformulário Empty Duplicar dados de Subformulário para outro Subformulário

    Mensagem  vileman 14/3/2017, 23:53

    Boa noite, Alexandre e Júlio

    Obs: após novo erro e observar o nome dos campos com mais atenção vi que tinha outro erro - além da vírgula - em um dos campos após o comando WHERE: ID_IDCodNotFato, quando o correto é IDCodNotFato (Falha nossa)

    Mesmo assim, feita a correção - linha abaixo - a rotina não apresenta mais nenhuma mensagem de erro, mas ao confirmar a duplicação do registo, apenas duplica o registro no próprio subformulário, mas não duplica o registro como desejado para a tabela 'T174_NotFato_Anexos'.

    CurrentDb.Execute "INSERT INTO T174_NotFato_Anexos (IDCodNotFato, DataAnexo, IDDocumento, TipoComplemento) SELECT " & CodigoNovoAnexo & ", DataAnexo, IDDocumento, TipoComplemento FROM T174_NotFato_Anexos WHERE IDCodNotFato=" & Me!CodAnexoDocAdm & ";", dbFailOnError

    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Duplicar dados de Subformulário para outro Subformulário Empty Re: [Resolvido]Duplicar dados de Subformulário para outro Subformulário

    Mensagem  Alexandre Neves 15/3/2017, 21:23

    Boa noite,
    Indique dados concretos para se detectar onde o código se perde e não faz o esperado


    .................................................................................
    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]Duplicar dados de Subformulário para outro Subformulário Empty Duplicar dados de Subformulário para outro Subformulário

    Mensagem  vileman 16/3/2017, 21:55

    Boa noite, Alexandre

    Como disse na última mensagem após corrigir o nome do campo e retirar a vírgula, a rotina apenas duplica o registro no próprio subformulário em questão, sem apresentar nenhuma mensagem de erro, então eu não saberia dizer onde ele se perde e não faz a duplicação para a outra tabela.
    Enviei o arquivo na minha primeira mensagem, se puder ver, agradeço, lembrando que é necessário fazer as 2 correções citadas ou copie o código completo abaixo - com as correções - para o botão da rotina no subformulário "F163_DocAdm_Anexos".

    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)
                 
                 'Dim strOpcao As String 'Abre Tabela para onde vai duplicar o registro 'Nova tentativa, mas não funcionou
                 'strOpcao = "T174_NotFato_Anexos"                                               'Nova tentativa, mas não funcionou
                 'INICIO.SourceObject = "Tabela." & strOpcao                                    'Nova tentativa, mas não funcionou
                 
                 'INICIO.SourceObject = "Tabela." & "T174_NotFato_Anexos"                'Nova tentativa, mas não funcionou
                 CurrentDb.Execute "INSERT INTO T174_NotFato_Anexos ( IDCodNotFato, DataAnexo, IDDocumento, TipoComplemento ) SELECT " & CodigoNovoAnexo & ", DataAnexo, IDDocumento, TipoComplemento FROM T174_NotFato_Anexos WHERE IDCodNotFato=" & Me!CodAnexoDocAdm & ";", dbFailOnError
                 Me.Requery
              End If
           End If
    End Sub
    Julio Lustosa
    Julio Lustosa
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 203
    Registrado : 23/02/2011

    [Resolvido]Duplicar dados de Subformulário para outro Subformulário Empty Re: [Resolvido]Duplicar dados de Subformulário para outro Subformulário

    Mensagem  Julio Lustosa 20/3/2017, 18:23

    Boa tarde, amigo!

    Me desculpe mas está um pouco confuso o seu projeto.

    O que eu tinha entendido que você queria fazer era duplicar os dados inseridos no formulário ANEXOS para a tabela T174_NotFato_Anexos, contudo, vejo que você tem um INSERT INTO que duplica o registro selecionado primeiro na própria tabela, a T163_DocAdm_Anexos. e depois você tem pegar este registro selecionado e enviá-lo para a tabela T174_NotFato_Anexos.

    Se é isso, no primeiro inserte ele está fazendo isso corretamente! Já no segundo está confuso.

    Você tem uma variável CodigoNovoAnexo que recupera o último registro inserido na tabela T163_DocAdm_Anexos. Esta sua variável, você a sua em uma consulta indentada no segundo INSERT INTO (SELECT " & CodigoNovoAnexo & ", DataAnexo,) que sinceramente, para mim não faz sentindo nenhum. Um porque sua select está errada, dois porque se sua intensão era salvar o valor da variável no campo IDCodNotFato da tabela T174_NotFato_Anexos, ele não vai aceitar porque o valor da variável não corresponde à um valor da tabela T17_Procedimentos ao qual está relacionado.

    Primeiro eu resolveria o problema do relacionamento das tabelas T17 com T174. Se estiver correto, verificar então como você irá capturar um dado que se relacione com a tabela para salvar no campo IDCodNotFato.

    Segundo, eu criaria um campo na tabela T174_NotFato_Anexos para receber o código identificador da tabela T163 que você está duplicando. Eu achei que era o IDCodNotFato que receberia este valor, mas logo percebi que não é. Achei também que seria o CodAnexoNotFato, mas como ele é um campo do tipo AutoNumeração, então também não é.

    Agora, eu estou achando que o que você queria era copiar o registro que você selecionou e colar dentro de uma outra tabela, e não a mesma. Então, bastaria você isso:

    Código:
    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
            CurrentDb.Execute "INSERT INTO T174_NotFato_Anexos ( IDCodNotFato, DataAnexo, IDDocumento, TipoComplemento ) " & _
                            "SELECT CodAnexoDocAdm, DataAnexo, IDDocumento, TipoComplemento FROM T163_DocAdm_Anexos " & _
                            "WHERE CodAnexoDocAdm=" & Me!CodAnexoDocAdm & ";", dbFailOnError
            Me.Requery
        End If
    End If

    Mas isso se o campo IDCodNotFato não for relacionado à tabela T17_Procedimentos.
    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]Duplicar dados de Subformulário para outro Subformulário Empty Duplicar dados de Subformulário para outro Subformulário

    Mensagem  vileman 21/3/2017, 02:22

    Boa noite, Julio

    Eu havia pego a rotina - como citado na mensagem nº 1 - em um tópico pesquisado aqui no Fórum e tentei replicar para o meu caso alterando apenas os nomes dos controles: Tabelas, campos e formulários para a partir daí ter pelo menos um ponto de partida, e também aprender algo mais.
    E tens razão: realmente no primeiro INSERT ele apenas duplica para a própria do tabela do subformulário em questão, o que não me serviria, e vejo agora que não havia necessidade desses comandos.

    A minha intenção é realmente duplicar um determinado registro selecionado de um subformulário para uma outra tabela, que por sua vez irá alimentar outro subformulário.
    Vou testar como você colocou e rever todo o meu procedimento, pois realmente me passou desapercebido alguns detalhes como campos do tipo autonumeração na outra tabela que irá receber a duplicidade.

    Informo o resultado em seguida.
    Desculpe pela confusão.
    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]Duplicar dados de Subformulário para outro Subformulário Empty Duplicar dados de Subformulário para outro Subformulário

    Mensagem  vileman 25/3/2017, 15:40

    Boa tarde, amigo

    Consegui resolver graças a sua última orientação da seguinte forma:
    1) criei um novo campo na Tabela 'T174_NotFato_Anexos' = DuplicaIDCodDocAdm
    2) campo este que não tem relacionamento nenhum com a tabela T17_Procedimentos a qual a Tabela 'T174_NotFato_Anexos' tem relacionamento de um-para-vários com o campo 'IDCodNotFato' que era onde estava dando o erro

    Então, mais uma vez agradeço sua atenção e do Alexandre Neves, que com certeza teria chegado a sua mesma conclusão, caso eu tivesse explicado de uma forma melhor.
    E para mim, fica o eterno aprendizado e gratidão.

    A rotina final ficou assim:

    If MsgBox("Confirma a Duplicação do(s) Registro(s) Anexo(s) para Formulário de Notícias de Fato?", vbQuestion + vbYesNo) = vbYes Then
    CurrentDb.Execute "INSERT INTO T174_NotFato_Anexos ( DuplicaIDCodDocAdm, DataAnexo, IDDocumento, TipoComplemento ) " & _
    "SELECT CodAnexoDocAdm, DataAnexo, IDDocumento, TipoComplemento FROM T163_DocAdm_Anexos " & _
    "WHERE CodAnexoDocAdm=" & Me!CodAnexoDocAdm & ";", dbFailOnError
    Me.Requery
    End If

    Conteúdo patrocinado


    [Resolvido]Duplicar dados de Subformulário para outro Subformulário Empty Re: [Resolvido]Duplicar dados de Subformulário para outro Subformulário

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 21/11/2024, 18:18