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


4 participantes

    Banco de Dados em Rede - Login

    avatar
    CassioFerreira
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 8
    Registrado : 09/07/2014

    Banco de Dados em Rede - Login  Empty Banco de Dados em Rede - Login

    Mensagem  CassioFerreira 6/11/2018, 00:17

    Tenho um banco de dados de controle de contas a pagar principal com os fomulários instalado em duas máquinas, e, em rede, está o banco de dados com as tabelas. Pelo login, via vba eu identifico o usuário e a data e hora do acesso na máquina (datahora = Format(Now(), "yyyy/mm/dd hh:nn:ss") e registrar nas tabelas quem e quando se inseriu ou alterou informações. Acontece que quando o segundo usuário faz o login a primeira máquina logada assume sua identidade. Estou tentando identificar pelo ID das máquinas para assim evitar esse problema, já que não faz o registro do verdadeiro usuário nas tabelas. Só que me perco na hora que tento uma forma de executar esse processo. Espero ter me expressado bem e fazer entender a situação.
    Gleilsonblensh
    Gleilsonblensh
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 51
    Registrado : 02/07/2018

    Banco de Dados em Rede - Login  Empty Re: Banco de Dados em Rede - Login

    Mensagem  Gleilsonblensh 6/11/2018, 08:47

    Ola Cassio, para exibir no formulário o nome do usuário logado na maquina eu utilizo:


    Código:
    Me.campo = Environ("UserName")

    coloco no formulário ao carregar, você pode adaptar para o que você precisa.

    Gleilson Pedro
    thiagomcosta
    thiagomcosta
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 377
    Registrado : 23/01/2017

    Banco de Dados em Rede - Login  Empty Re: Banco de Dados em Rede - Login

    Mensagem  thiagomcosta 6/11/2018, 09:27

    Eu utilizo uma tabela no arquivo com os formulários. Nesta tabela local identifico o usuário logado do windows e então distribuo as permissões, registros, etc., conforme o usuário.
    Também localmente tenho uma tabela com a versão atual do sistema e comparo com a última versão que deixo registrada em outra tabela no servidor. Isso para saber se a versão utilizada é a última liberada.

    Resumindo:
    - Na máquina uma tabela com o usuário logado no momento.
    - Na rede a lista de acessos com horários para controle de tráfego.

    - Na máquina a versão instalada.
    - Na rede a última versão liberada.
    Gleilsonblensh
    Gleilsonblensh
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 51
    Registrado : 02/07/2018

    Banco de Dados em Rede - Login  Empty Re: Banco de Dados em Rede - Login

    Mensagem  Gleilsonblensh 6/11/2018, 10:33

    ok então se eu entendi direito vc precisa identificar o nome da maquina...tem um exemplo que peguei aqui no forum adaptação de um código do JPaulo que mostra ip da maquina...

    Download
    thiagomcosta
    thiagomcosta
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 377
    Registrado : 23/01/2017

    Banco de Dados em Rede - Login  Empty Re: Banco de Dados em Rede - Login

    Mensagem  thiagomcosta 6/11/2018, 11:38

    Para esclarecer melhor, segue o meu código que registra o login e o ambiente de desenvolvimento.

    Isso na inicialização do sistema.
    Depois eu busco os dados na tabela tb_LocalUser com um DLookup. A tabela tb_LocalUser fica na máquina, junto com os formulários (front end).

    Por exemplo, se eu quero saber se o usuário tem acesso ao módulo da Arte, eu busco o campo Arte_Usuario e vejo se o valor é verdadeiro.
    Foi a solução mais prática que eu encontrei pro MEU caso.

    O ambiente eu uso para bloquear alguns recursos durante o desenvolvimento, como envio de email para o cliente. Quando eu libero para Produção eu mudo este código.

    Código:
    Public Function QualUsuario()
    'Define o usuario logado e o tipo de ambiente
    Dim vNetwork As Object
    Dim vLogado As Variant
    Dim rsUsuario As Recordset
    Dim vSQLInsert
    Dim vAmbiente As String

    '===== ALTERAR AQUI O AMBIENTE ==============================================================================
    vAmbiente = "Desenvolvimento"
    'vAmbiente = "Produção"
    '============================================================================================================

    Set vNetwork = CreateObject("WScript.Network")
    vLogado = vNetwork.UserName

    'Procura usuario
    Set rsUsuario = CurrentDb.OpenRecordset("SELECT * FROM tb_Usuarios WHERE Usuario_Usuario='" & vLogado & "'")
    If rsUsuario.RecordCount = 0 Then
        MsgBox "Usuario não cadastrado", vbCritical
        rsUsuario.Close
        Set rsUsuario = Nothing
        Application.Quit
    End If

    'Define usuario
    DoCmd.SetWarnings False
    DoCmd.RunSQL "DELETE * FROM tb_LocalUser"
    vSQLInsert = "INSERT INTO tb_LocalUser (UsuarioLogado, Admin_Usuario, Financeiro_Usuario, Atendimento_Usuario, Arte_Usuario, Producao_Usuario, Isagraph_Usuario) "
    vSQLInsert = vSQLInsert & "VALUES ('" & vLogado & "', " & IIf(rsUsuario!Admin_Usuario, 1, 0) & ", " & IIf(rsUsuario!Financeiro_Usuario, 1, 0) & ", " & IIf(rsUsuario!Atendimento_Usuario, 1, 0) & ", "
    vSQLInsert = vSQLInsert & IIf(rsUsuario!Arte_Usuario, 1, 0) & ", " & IIf(rsUsuario!Producao_Usuario, 1, 0) & ", " & IIf(rsUsuario!Isagraph_Usuario, 1, 0) & ") "
    DoCmd.RunSQL vSQLInsert
    DoCmd.RunSQL "INSERT INTO tb_Logins(Usuario_Logins, DataHora_Logins, Local_Logins) VALUES ('" & vLogado & "', '" & Now & "', '" & CurrentProject.Path & "')"

    'Define ambiente
    DoCmd.RunSQL "DELETE * FROM tb_LocalAmbiente"
    DoCmd.RunSQL "INSERT INTO tb_LocalAmbiente ([AmbienteAtual]) VALUES ('" & vAmbiente & "')"
    DoCmd.SetWarnings True

    rsUsuario.Close
    Set rsUsuario = Nothing

    VerificaHora

    End Function
    avatar
    CassioFerreira
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 8
    Registrado : 09/07/2014

    Banco de Dados em Rede - Login  Empty Re: Banco de Dados em Rede - Login

    Mensagem  CassioFerreira 6/11/2018, 13:47

    Uma informação que deixei escapar é que o usuário é identificado pelo horário de acesso, no VBA, uma função DMax seleciona o último usuário que entrou, por esse motivo que, se um segundo usuário entra, a primeira máquina assume a identidade deste. Por isso que achei que deveria identificar o ID de cada máquina para filtrar o usuário de cada máquina.
    Abraços e obrigado a todos que manifestou interesse em ajudar.
    Gleilsonblensh
    Gleilsonblensh
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 51
    Registrado : 02/07/2018

    Banco de Dados em Rede - Login  Empty Re: Banco de Dados em Rede - Login

    Mensagem  Gleilsonblensh 7/11/2018, 11:44

    Cassio, infelizmente não tenho tanta experiência neste caso não posso te ajudar, ainda não executei nada parecido e tb não tenho idéia de como fazer, uma coisa que funcionou comigo foi quando me deparei com um problema que não consegui resolver e tb não encontrei quem me ajudasse, tive que rever meu projeto ou seja fiz o que eu queria mas de outra forma e até se tornou mais fácil, talvez vc encontre outra forma de fazer o que vc precisa, no meu caso eu so salvo logs com acesso data e hora assim que abre o bd, fica salvo em um arquivo txt, faço isto atravéz de um bat que o proprio bd puxa, espero ter ajudado com algo.
    Boa Sorte e bons estudos!

    Gleilson Pedro
    Estuardo
    Estuardo
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 20
    Registrado : 24/09/2014

    Banco de Dados em Rede - Login  Empty Re: Banco de Dados em Rede - Login

    Mensagem  Estuardo 9/11/2018, 17:28

    Boa noite,
    Sem ver o código é muito difícil de tentar perceber a origem do problema, principalmente porque mesmo com o código seria preciso poder replicar o ambiente de rede.
    Dito isto, penso que a origem esta na arquitectura da solução e não propriamente no código. Antes de continuar e apontar para algum lado qualquer gostava de perceber o seguinte:
    Se tem 2 FE's (1 para cada cliente) com um conjunto de tabelas locais e um BE com todas as tabelas gerais, o que acontece quando o FE1 faz o login?
    Quem, Como e onde é que esta a atribuir a identidade?
    Pode executar este procedimento em cada um dos FE's e no BE

    Código:

    Public Sub ConnectedUsers()
      Dim rs As ADODB.Recordset
          Set rs = Application.CurrentProject.Connection.OpenSchema(adSchemaProviderSpecific, , "{947bb102-5d43-11d1-bdbf-00c04fb92675}")
          Debug.Print rs.GetString
          rs.Close
      End Sub
    Qual é o resultado?

    Conteúdo patrocinado


    Banco de Dados em Rede - Login  Empty Re: Banco de Dados em Rede - Login

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 7/5/2024, 12:01