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

2 participantes

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

    avatar
    Coltro
    Novato
    Novato


    Respeito às regras : 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 Qui 14 Jun 2018, 3:30 pm

    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 : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 10780
    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 Sex 15 Jun 2018, 5:43 am

    Ola seja bem vindo ao forum;

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

    https://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 : 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 Sex 15 Jun 2018, 10:01 am

    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 : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 10780
    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 Sex 15 Jun 2018, 10:16 am

    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 : 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 Sex 15 Jun 2018, 1:41 pm

    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 : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 10780
    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 Sex 15 Jun 2018, 6:27 pm

    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 : 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 Sex 15 Jun 2018, 11:52 pm

    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 : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 10780
    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 Seg 18 Jun 2018, 6:22 am

    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 : 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 Seg 18 Jun 2018, 1:25 pm

    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 : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 10780
    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 Ter 19 Jun 2018, 10:01 am

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

      Data/hora atual: Qua 07 Dez 2022, 8:01 pm