MaximoAccess

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

Obrigado

Administração do MaximoAccess

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


    Relinkar tabelas com outro usuário do banco de dados ODBC.

    avatar
    Coltro
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 8
    Registrado : 13/08/2016

    Relinkar tabelas com outro usuário do banco de dados ODBC. Empty Relinkar tabelas com outro usuário do banco de dados ODBC.

    Mensagem  Coltro em 14/6/2018, 19:30

    Boa tarde.
    Tenho um banco de dados MS-Access que é front-end de um banco de dados PostgreSQL. No banco PostgreSQL eu criei vários usuários e com isso posso usar triggers de auditoria que armazenam em tabela de auditoria qual foi o usuário que realizou cada operação em um determinado registro. O que eu desejo fazer é : ao abrir o front-end Access, quero que o usuário informe seus dados de login do banco de dados e com isso atualize o valor de 'current_user' no banco PostgreSQL.

    Estou há dias procurando uma solução para isso, sem sucesso.

    Agradeço antecipadamente.

    JOSÉ COLTRO FILHO
    JPaulo
    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 10549
    Registrado : 04/11/2009

    Relinkar tabelas com outro usuário do banco de dados ODBC. Empty Re: Relinkar tabelas com outro usuário do banco de dados ODBC.

    Mensagem  JPaulo em 15/6/2018, 09:43

    Ola seja bem vindo ao forum;

    Penso que este tópico, trata desse assunto, não tenho a certeza mas existem muitos outros aqui;

    http://www.maximoaccess.com/t10264-access-sql-server

    Código:
    Public Sub InitConnect()
    'Ms Access to PostgreSQL
    On Error GoTo ErrHandler
        Dim dbCurrent As DAO.Database
        Dim qdf As DAO.QueryDef
        Dim rst As DAO.Recordset
        Dim cnn As Object

        Set cnn = CreateObject("Adodb.Connection")

      sConnString = "DRIVER={PostgreSQL Unicode(x64)};DATABASE=AccessTest;SERVER=localhost;PORT=5432;UID=postgres;PWD=1234;"
     
      cnn.Open sConnString
       
        Set dbCurrent = DBEngine(0)(0)
        Set qdf = dbCurrent.CreateQueryDef("")
       
        With qdf
            .Connect = sConnString
            .SQL = "SELECT CURRENT_USER;"
            Set rst = .OpenRecordset(dbOpenSnapshot, dbSQLPassThrough)
        End With

      '' InitConnect = True

    ExitProcedure:

        On Error Resume Next

            Set rst = Nothing
            Set qdf = Nothing
            Set dbCurrent = Nothing
        Exit Sub

    ErrHandler:

        ''InitConnect = False

        MsgBox Err.Description & " (" & Err.Number & ") encountered", _
    vbOKOnly + vbCritical, "InitConnect"

        Resume ExitProcedure
        Resume
    End Sub


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    Relinkar tabelas com outro usuário do banco de dados ODBC. Folder_announce_new Utilize o Sistema de Busca do Fórum...
    Relinkar tabelas com outro usuário do banco de dados ODBC. Folder_announce_new 102 Códigos VBA Gratuitos...
    Relinkar tabelas com outro usuário do banco de dados ODBC. Folder_announce_new Instruções SQL como utilizar...
    avatar
    Coltro
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 8
    Registrado : 13/08/2016

    Relinkar tabelas com outro usuário do banco de dados ODBC. Empty O problema foi parcialmente resolvido.

    Mensagem  Coltro em 15/6/2018, 14:01

    Estou trabalhando com tabelas do PostgreSQL vinculadas. Para vincular, eu informo um usuário do banco na string de conexão. Imaginemos que informei USUÁRIO1. Rodando o código gentilmente fornecido, com USUÁRIO2, o banco retorna que a conexão gerada pelo código acima possui CURRENT_USER = USUÁRIO2, MAS a trigger que atua sobre as tabelas vinculadas continua apresentando CURRENT_USER = USUÁRIO1.

    Acho que aquilo que estou procurando não existe. Eu gostaria que quando o usuário abre o arquivo Access e se loga no banco, o banco enxergasse todas as operações oriundas daquele arquivo Access como sendo de um mesmo usuário. Como se fosse uma SESSION dentro do banco de dados. Acho que terei que implementar o sistema de segurança a partir do próprio Access.

    Agradeço qualquer ajuda.

    JOSÉ COLTRO FILHO
    JPaulo
    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 10549
    Registrado : 04/11/2009

    Relinkar tabelas com outro usuário do banco de dados ODBC. Empty Re: Relinkar tabelas com outro usuário do banco de dados ODBC.

    Mensagem  JPaulo em 15/6/2018, 14:16

    Ola, entendi

    No mais seria apenas um relink das tabelas, mas alterando o user e a sua senha, certo ?

    Qualquer coisa assim;

    Código:
    Public Sub RefreshLinkSQL(Conection As String)
    Dim tdf As TableDef
    On Error GoTo ControleErros

        For Each tdf In CurrentDb.TableDefs
            If Len(tdf.Connect) > 0 Then
                tdf.Connect = Conection
                tdf.Refreshlink
            End If
        Next tdf
       
        Exit Sub
    ControleErros:
        MsgBox "Falha na ligação: " & Err.Description
    End Sub

    Ao chamar a função, validar o user logado e atualizar o vinculo:

    Código:
        Dim strUser
        Dim strSenha
       
        strUser = "jpaulo"
        strSenha = "jp1234"
       
        Call RefreshLinkSQL("DRIVER={PostgreSQL Unicode(x64)};DATABASE=AccessTest;SERVER=localhost;PORT=5432;UID=" & strUser & ";PWD=" & strUser & ";")


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    Relinkar tabelas com outro usuário do banco de dados ODBC. Folder_announce_new Utilize o Sistema de Busca do Fórum...
    Relinkar tabelas com outro usuário do banco de dados ODBC. Folder_announce_new 102 Códigos VBA Gratuitos...
    Relinkar tabelas com outro usuário do banco de dados ODBC. Folder_announce_new Instruções SQL como utilizar...
    avatar
    Coltro
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 8
    Registrado : 13/08/2016

    Relinkar tabelas com outro usuário do banco de dados ODBC. Empty o "tdf.Refreshlink" não faz nada.

    Mensagem  Coltro em 15/6/2018, 17:41

    Testando os novos fragmentos de código gentilmente fornecidos por João Paulo, percebi que o "tdf.Refreshlink" é meramente figurativo. Para provocar um erro, mantive o código como me foi mandado com usuário e senhas que não existem no meu banco de dados e depois rodei o procedimento. Resultado:
    1 - as tabelas já estavam vinculadas, usando o usuário ABCD;
    2 - rodei o procedimento com usuário inexistente;
    3 - não houve nenhuma mensagem de erro;
    4 - MSysObjects.Connect aparece como : DRIVER={PostgreSQL ODBC Driver(ANSI)};DATABASE=XXXXX_teste;SERVER=localhost;PORT=5432;UID=jpaulo;PWD=jp1234;
    5 - as tabelas continuam vinculadas e o current_user continua sendo ABCD.

    OBS: O código sugerido funciona, mas exige o fechamento e reabertura do arquivo Access. Para tentar evitar essa necessidade, testei a alternativa que achei em
    https://www.postgresql.org/message-id/6C0CF58A187DA5479245E0830AF84F4218CBDA@poweredge.attiksystem.ch

    Mas, além de escrever muito mais código, o responsável por aquele post não melhorou em nada a situação.

    O problema de momento é ter FECHAR e ABRIR novamente o Access para que ocorra efetivamente a troca de usuário de banco de dados.

    Sugestões?

    JOSÉ COLTRO FILHO
    JPaulo
    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 10549
    Registrado : 04/11/2009

    Relinkar tabelas com outro usuário do banco de dados ODBC. Empty Re: Relinkar tabelas com outro usuário do banco de dados ODBC.

    Mensagem  JPaulo em 15/6/2018, 22:27

    Olá

    Para evitar fechar o banco, use no final do código:

    Application.RefreshDatabaseWindow


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    Relinkar tabelas com outro usuário do banco de dados ODBC. Folder_announce_new Utilize o Sistema de Busca do Fórum...
    Relinkar tabelas com outro usuário do banco de dados ODBC. Folder_announce_new 102 Códigos VBA Gratuitos...
    Relinkar tabelas com outro usuário do banco de dados ODBC. Folder_announce_new Instruções SQL como utilizar...
    avatar
    Coltro
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 8
    Registrado : 13/08/2016

    Relinkar tabelas com outro usuário do banco de dados ODBC. Empty Re: Relinkar tabelas com outro usuário do banco de dados ODBC.

    Mensagem  Coltro em 16/6/2018, 03:52

    A sugestão de

    Application.RefreshDatabaseWindow

    não resolveu o problema. Continuo tendo que fechar e abrir o arquivo Access para que o PostgreSQL enxergue a mudança de usuário.

    JOSÉ COLTRO FILHO
    JPaulo
    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 10549
    Registrado : 04/11/2009

    Relinkar tabelas com outro usuário do banco de dados ODBC. Empty Re: Relinkar tabelas com outro usuário do banco de dados ODBC.

    Mensagem  JPaulo em 18/6/2018, 10:22

    Amigão, é o comando que uso no final do relink DNS das tabelas do SQL Express no Ms Access e funciona.

    Não consigo testar com o Postgree mas deveria ser a mesma coisa.


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    Relinkar tabelas com outro usuário do banco de dados ODBC. Folder_announce_new Utilize o Sistema de Busca do Fórum...
    Relinkar tabelas com outro usuário do banco de dados ODBC. Folder_announce_new 102 Códigos VBA Gratuitos...
    Relinkar tabelas com outro usuário do banco de dados ODBC. Folder_announce_new Instruções SQL como utilizar...
    avatar
    Coltro
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 8
    Registrado : 13/08/2016

    Relinkar tabelas com outro usuário do banco de dados ODBC. Empty Re: Relinkar tabelas com outro usuário do banco de dados ODBC.

    Mensagem  Coltro em 18/6/2018, 17:25

    Até onde eu li e também considerando o nome do comando, este Application.RefreshDatabaseWindow apenas atualiza a exibição da janela de banco de dados. É o equivalente ao F5.

    Estou me conformando com a idéia de que : trocar de usuário requer o fechamento e abertura do arquivo Access. E ainda aproveito para compactar ao fechar.

    Se tiver mais alguma sugestão, mande que eu testo e passo o feed-back.

    Obrigado

    JOSÉ COLTRO FILHO
    JPaulo
    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 10549
    Registrado : 04/11/2009

    Relinkar tabelas com outro usuário do banco de dados ODBC. Empty Re: Relinkar tabelas com outro usuário do banco de dados ODBC.

    Mensagem  JPaulo em 19/6/2018, 14:01

    Ola;

    No limite o que poderia fazer, seria apagar as tabelas e voltar a efetuar o link por código;

    Qualquer coisa assim;

    Código:

    'apaga o vinvulo
    CurrentDb.Execute "DROP TABLE SuaTabelaSQL"
    'refresca o banco
    Application.RefreshDatabaseWindow
    'chama a função de link
    Call FuncaoLinkTabelas
    'volta a refrescar o banco
    Application.RefreshDatabaseWindow


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    Relinkar tabelas com outro usuário do banco de dados ODBC. Folder_announce_new Utilize o Sistema de Busca do Fórum...
    Relinkar tabelas com outro usuário do banco de dados ODBC. Folder_announce_new 102 Códigos VBA Gratuitos...
    Relinkar tabelas com outro usuário do banco de dados ODBC. Folder_announce_new Instruções SQL como utilizar...

    Conteúdo patrocinado

    Relinkar tabelas com outro usuário do banco de dados ODBC. Empty Re: Relinkar tabelas com outro usuário do banco de dados ODBC.

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 21/5/2019, 14:16