MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

Obrigado

Administração do MaximoAccess

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

    Consultas atualiza em VBA três tabelas desvinculados ADO

    Compartilhe

    sergiocfba
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 55
    Registrado : 01/02/2012

    Consultas atualiza em VBA três tabelas desvinculados ADO

    Mensagem  sergiocfba em Sab 07 Dez 2013, 12:12

    Bom dia,

    Estou quebrando a cabeça com a alteração do meu BD.
    Devido ao constante erro de rede, resolvi desvincular para ver se resolve.

    Bem eu usava o método DAO, o TXT_Down depois de atualizar, inserir um numero, na Tab_LiberaColetor por ex.
    e busca o numero relacionado no campo "TXT_Down " e grava [DATA ENT] a data atual e hora como mostra a de atualização, e seguida atualizar a tabela com base no campo [DATA LIB].
    se Maior ou <> de 0 ele limpava essa "Tab_LiberaColetor" e atualizava uma de TAB_HISTÓRICO.

    Código:
    Private Sub TXT_Down_AfterUpdate()
        DoCmd.SetWarnings False
        Me.Txt_down.SetFocus
                Dim BancoDados As Database
                Dim Coletor As Recordset
                Dim Talkman As Recordset
                Dim HeadSet As Recordset
                Dim Histo_Coletor As Recordset

                Set BancoDados = CurrentDb
    If Txt_down <= 1000 Then
        On Error GoTo fim
                Set Coletor = BancoDados.OpenRecordset("Tab_LiberaColetor", dbOpenTable)
                Set Histo_Coletor = BancoDados.OpenRecordset("TAB_HISTÓRICO", dbOpenTable)
            '======================================
            'Consulta atualização:
            '======================================
         
            DoCmd.RunSQL "UPDATE Tab_LiberaColetor SET Tab_LiberaColetor.[DATA ENT] = Date(), Tab_LiberaColetor.[HORA ENT] = Time(), Tab_LiberaColetor.IPModificacao = DameIpMaquina(), Tab_LiberaColetor.UserModificacao = GetUserName_TSB(), Tab_LiberaColetor.UserModificacaoLog = getUser()  " & vbCrLf & _
            "WHERE (((Tab_LiberaColetor.[DATA ENT]) Is Null) AND ((Tab_LiberaColetor.IDCALL)=[Txt_down]));"
            '======================================
            'Consulta acrecimo:
            '======================================
       
            DoCmd.RunSQL "INSERT INTO TAB_HISTÓRICO ( Cadastro, Coletor, [DATA LIB], [HORA LIB], [DATA ENT], [HORA ENT], NOME, [C/C], [Cargo Atual], Turno, Status, IDGESTOR, Gestor, UserRegisto, UserRegistoLog, IPRegisto, DataModificacao, UserModificacao, UserModificacaoLog, IPModificacao, Login_Usuario ) " & vbCrLf & _
            "SELECT Tab_LiberaColetor.CADASTRO, Tab_LiberaColetor.IDCALL, Tab_LiberaColetor.[DATA LIB], Tab_LiberaColetor.[HORA LIB], Tab_LiberaColetor.[DATA ENT], Tab_LiberaColetor.[HORA ENT], TAB_COLABORADOR.NOME, TAB_COLABORADOR.[C/C], TAB_COLABORADOR.[Cargo Atual], TAB_COLABORADOR.Turno, TAB_COLABORADOR.Status, TAB_COLABORADOR.IDGESTOR, TAB_COLABORADOR.Gestor, Tab_LiberaColetor.UserRegisto, Tab_LiberaColetor.UserRegistoLog, Tab_LiberaColetor.IPRegisto, Tab_LiberaColetor.DataModificacao, Tab_LiberaColetor.UserModificacao, Tab_LiberaColetor.UserModificacaoLog, Tab_LiberaColetor.IPModificacao, Tab_LiberaColetor.Login_Usuario " & vbCrLf & _
            "FROM TAB_COLABORADOR RIGHT JOIN Tab_LiberaColetor ON TAB_COLABORADOR.Cadastro = Tab_LiberaColetor.CADASTRO " & vbCrLf & _
            "WHERE (((Tab_LiberaColetor.[DATA ENT]) Is Not Null));"
            '======================================
            'Consulta exclusão
            '======================================
            DoCmd.RunSQL "DELETE Tab_LiberaColetor.*, Tab_LiberaColetor.[DATA ENT], Tab_LiberaColetor.[DATA ENT], Tab_LiberaColetor.IDCALL, Tab_LiberaColetor.IDCALL " & vbCrLf & _
            "FROM Tab_LiberaColetor " & vbCrLf & _
            "WHERE (((Tab_LiberaColetor.[DATA ENT]) Is Not Null) AND ((Tab_LiberaColetor.IDCALL)=[Txt_down]));"
            Txt_down.Value = Empty
         
    ElseIf Txt_down >= 70000000 And Txt_down <= 78281237 Then
    On Error GoTo fim

            Set HeadSet = BancoDados.OpenRecordset("Tab_LiberaHeadSet", dbOpenTable)
            Set Histo_Coletor = BancoDados.OpenRecordset("TAB_HISTÓRICO", dbOpenTable)
            '======================================
            'Consulta atualização:
            '======================================
            DoCmd.RunSQL "UPDATE Tab_LiberaHeadSet SET Tab_LiberaHeadSet.[DATA ENT] = Date(), Tab_LiberaHeadSet.[HORA ENT] = Time(),Tab_LiberaHeadSet.IPModificacao = DameIpMaquina(), Tab_LiberaHeadSet.UserModificacao = GetUserName_TSB(), Tab_LiberaHeadSet.UserModificacaoLog = getUser() " & vbCrLf & _
            "WHERE (((Tab_LiberaHeadSet.[DATA ENT]) Is Null) AND ((Tab_LiberaHeadSet.IDCALL)=[TXT_Down]));"
            '======================================
            'Consulta acrecimo:
            '======================================
            DoCmd.RunSQL "INSERT INTO TAB_HISTÓRICO ( Cadastro, HeadSet, [DATA LIB], [HORA LIB], [DATA ENT], [HORA ENT], NOME, [C/C], [Cargo Atual], Turno, Status, IDGESTOR, Gestor, UserRegisto, UserRegistoLog, IPRegisto, DataModificacao, UserModificacao, UserModificacaoLog, IPModificacao, Login_Usuario ) " & vbCrLf & _
            "SELECT Tab_LiberaHeadSet.CADASTRO, Tab_LiberaHeadSet.IDCALL, Tab_LiberaHeadSet.[DATA LIB], Tab_LiberaHeadSet.[HORA LIB], Tab_LiberaHeadSet.[DATA ENT], Tab_LiberaHeadSet.[HORA ENT], TAB_COLABORADOR.NOME, TAB_COLABORADOR.[C/C], TAB_COLABORADOR.[Cargo Atual], TAB_COLABORADOR.Turno, TAB_COLABORADOR.Status, TAB_COLABORADOR.IDGESTOR, TAB_COLABORADOR.Gestor, Tab_LiberaHeadSet.UserRegisto, Tab_LiberaHeadSet.UserRegistoLog, Tab_LiberaHeadSet.IPRegisto, Tab_LiberaHeadSet.DataModificacao, Tab_LiberaHeadSet.UserModificacao, Tab_LiberaHeadSet.UserModificacaoLog, Tab_LiberaHeadSet.IPModificacao, Tab_LiberaHeadSet.Login_Usuario " & vbCrLf & _
            "FROM TAB_COLABORADOR RIGHT JOIN Tab_LiberaHeadSet ON TAB_COLABORADOR.Cadastro = Tab_LiberaHeadSet.CADASTRO " & vbCrLf & _
            "WHERE (((Tab_LiberaHeadSet.[DATA ENT]) Is Not Null));"
            '======================================
            'Consulta exclusão
            '======================================
            DoCmd.RunSQL "DELETE Tab_LiberaHeadSet.[DATA ENT], Tab_LiberaHeadSet.[DATA ENT], Tab_LiberaHeadSet.*, Tab_LiberaHeadSet.IDCALL, Tab_LiberaHeadSet.IDCALL " & vbCrLf & _
            "FROM Tab_LiberaHeadSet " & vbCrLf & _
            "WHERE (((Tab_LiberaHeadSet.[DATA ENT]) Is Not Null) AND ((Tab_LiberaHeadSet.IDCALL)=[TXT_Down]));"
            Txt_down.Value = Empty
            Me.Refresh

    ElseIf Txt_down >= 200000000 And Txt_down <= 201341440 Then
    On Error GoTo fim
     
            Set Talkman = BancoDados.OpenRecordset("Tab_LiberaTalkman", dbOpenTable)
            Set Histo_Coletor = BancoDados.OpenRecordset("TAB_HISTÓRICO", dbOpenTable)
            '======================================
            'Consulta atualização:
            '======================================
            DoCmd.RunSQL "UPDATE Tab_LiberaTalkman SET Tab_LiberaTalkman.[DATA ENT] = Date(), Tab_LiberaTalkman.[HORA ENT] = Time(), Tab_LiberaTalkman.IDCALL = Txt_down ,Tab_LiberaTalkman.IPModificacao = DameIpMaquina(), Tab_LiberaTalkman.UserModificacao = GetUserName_TSB(), Tab_LiberaTalkman.UserModificacaoLog = getUser()" & vbCrLf & _
            "WHERE (((Tab_LiberaTalkman.[DATA ENT]) Is Null ));"
            '======================================
            'Consulta acrecimo:
            '======================================
            DoCmd.RunSQL "INSERT INTO TAB_HISTÓRICO ( Cadastro, Talkman, [DATA LIB], [HORA LIB], [DATA ENT], [HORA ENT], NOME, [C/C], [Cargo Atual], Turno, Status, IDGESTOR, Gestor, UserRegisto, UserRegistoLog, IPRegisto, DataModificacao, UserModificacao, UserModificacaoLog, IPModificacao, Login_Usuario ) " & vbCrLf & _
            "SELECT Tab_LiberaTalkman.CADASTRO, Tab_LiberaTalkman.IDCALL, Tab_LiberaTalkman.[DATA LIB], Tab_LiberaTalkman.[HORA LIB], Tab_LiberaTalkman.[DATA ENT], Tab_LiberaTalkman.[HORA ENT], TAB_COLABORADOR.NOME, TAB_COLABORADOR.[C/C], TAB_COLABORADOR.[Cargo Atual], TAB_COLABORADOR.Turno, TAB_COLABORADOR.Status, TAB_COLABORADOR.IDGESTOR, TAB_COLABORADOR.Gestor, Tab_LiberaTalkman.UserRegisto, Tab_LiberaTalkman.UserRegistoLog, Tab_LiberaTalkman.IPRegisto, Tab_LiberaTalkman.DataModificacao, Tab_LiberaTalkman.UserModificacao, Tab_LiberaTalkman.UserModificacaoLog, Tab_LiberaTalkman.IPModificacao, Tab_LiberaTalkman.Login_Usuario " & vbCrLf & _
            "FROM TAB_COLABORADOR RIGHT JOIN Tab_LiberaTalkman ON TAB_COLABORADOR.Cadastro = Tab_LiberaTalkman.CADASTRO " & vbCrLf & _
            "WHERE (((Tab_LiberaTalkman.[DATA ENT]) Is Not Null));"
            '======================================
            'Consulta exclusão
            '======================================
            DoCmd.RunSQL "DELETE Tab_LiberaTalkman.[DATA ENT], Tab_LiberaTalkman.[DATA ENT], Tab_LiberaTalkman.*, Tab_LiberaTalkman.IDCALL, Tab_LiberaTalkman.IDCALL " & vbCrLf & _
            "FROM Tab_LiberaTalkman " & vbCrLf & _
            "WHERE (((Tab_LiberaTalkman.[DATA ENT]) Is Not Null) AND ((Tab_LiberaTalkman.IDCALL)=[Txt_down]));"
               
            Txt_down.Value = Empty
            Me.Refresh
            DoCmd.Close
          Exit Sub
    fim:

    BancoDados.Close
    Set BancoDados = Nothing
    End If
    DoCmd.Close
    End Sub
    O problema é que no Ado desvinculado eu não estou conseguindo fazer a rotina funcionar.

    na segunda e na terceira consulta, a primeira eu consegui assim:

    Código:
    Col.Open "Select * From Tab_LiberaColetor", ADOMyConn
    Col![DATA ENT] = Date
    Col![HORA ENT] = Time()
    Algum pode me ajudar nessa questão?

    obrigado!

    criquio
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    Re: Consultas atualiza em VBA três tabelas desvinculados ADO

    Mensagem  criquio em Sab 07 Dez 2013, 12:28

    Set BancoDados = CurrentDb
    Não entendi muito bem. Se está em rede, porque está usando CurrentDb? Por acaso o banco não está dividido em backend e frontend? Ou o CurrentDb é porque está usando as tabelas vinculadas do backend? Nesse caso, não desvinculou. E por que mudar de DAO para ADO? De Access para Access, o DAO é melhor. O ADO é melhor quando está conectando um Access a outro destino como Excel ou outro banco de dados diferente de Access.


    .................................................................................
    Meu novo site: [Você precisa estar registrado e conectado para ver este link.]

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.


    sergiocfba
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 55
    Registrado : 01/02/2012

    Re: Consultas atualiza em VBA três tabelas desvinculados ADO

    Mensagem  sergiocfba em Sab 07 Dez 2013, 14:01

    Bom dia criquio,

    esta na rede sim.

    Essa era a forma antiga eu estou tentando mudar para o ado, o backend esta na rede.

    essa é uma ideia do que eu tinha funcionava no CurrentDb. Mas esta na rede e ta dando muito trabalha travando como postei no tópico anterior e corrompendo constante por isso to tentando migrar para o ado na tentativa de solucionar ou amenizar.

    Vc acha que o dao é mais eficiente?

    Como eu faria essa conexão em dao backend...?

    Esse bd esta compartilhado na rede e é aberto em 6 micros com um fluxo constante de entradas e baixas.

    Eu preciso de eficiência e segurança, o que o mestre me aconselha?

    Um abraço


      Data/hora atual: Qua 07 Dez 2016, 08:36