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

    Impedir evento se mais de um usuário logado

    Bão
    Bão
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 105
    Registrado : 04/05/2011

    Impedir evento se mais de um usuário logado Empty Impedir evento se mais de um usuário logado

    Mensagem  Bão 17/4/2012, 00:47

    Olá a todos!

    Minha dificuldade está sendo encontrar algo nesse sentido: Impedir evento se mais de um usuário logado...

    Encontrei alguns exemplos que mostram os computadores que estão logados ao "back end"...

    Mas no meu caso, gostaria que um determinado evento, tipo uma exclusão de registros, só ocorresse se apenas um usuário estiver o sando o "back end"... e impedisse o evento se mais de um estiver utilizando...

    Espero por uma ajudinha, nesse pequeno problema... desde já agradeço!
    criquio
    criquio
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    Impedir evento se mais de um usuário logado Empty Re: Impedir evento se mais de um usuário logado

    Mensagem  criquio 17/4/2012, 12:57

    Uma saída pode ser colocar um campo de nome PCLogado em uma tabela de nome tblLogados. Quando o frontend for aberto, coloca lá o nome do pc e quando for fechado, apaga o registro com o nome do pc. Quando alguem for tentar uma exclusão, verifica se tem outro pc logado. Se tiver, bloqueia a ação.

    Evento "Ao carregar" do frontend:

    Código:
    Dim db As Database

    Set db = DBEngine.Workstation(0).OpenDatabase("Caminho do backend\Nome do backend.accdb", False, False, "MS Access;PWD=Senha")

    db.Execute "INSERT INTO tblLogados(PCLogado) VALUES('" & Environ("ComputerName") & "')"

    db.Close
    Set db = Nothing
    Evento "Ao fechar" do frontend ou em um botão de fechar:

    Código:
    Dim db As Database

    Set db = DBEngine.Workstation(0).OpenDatabase("Caminho do backend\Nome do backend.accdb", False, False, "MS Access;PWD=Senha")

    db.Execute "DELETE * FROM tblLogados WHERE PCLogado='" & Environ("ComputerName") & "'"

    db.Close
    Set db = Nothing
    Evento de excluir:

    Código:
    Dim rs As Recordset

    Set rs = DBEngine.Workstation(0).OpenDatabase("Caminho do backend\Nome do backend.accdb", False, False, "MS Access;PWD=Senha").OpenRecordset("tblLogados")

    If rs.RecordCount > 1 Then
    MsgBox "Você não pode excluir registros no momento.", vbCritical, "Aviso"
    End If

    rs.Close
    Set rs = Nothing


    .................................................................................
    Meu novo site: www.vcssistemas.com.br

    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.

    Bão
    Bão
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 105
    Registrado : 04/05/2011

    Impedir evento se mais de um usuário logado Empty Re: Impedir evento se mais de um usuário logado

    Mensagem  Bão 19/4/2012, 21:07

    Gostei, tinha pensado em algo parecido...

    Mas o porém dessa operação é justamente o que aconteceu comigo outro dia... a rede caiu em uma das máquinas e fica-se sem acesso ao backend... como deletar a informação de número de máquinas logadas se não se pode alterar o backend?

    Isso me deixou de mãos atadas...
    criquio
    criquio
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    Impedir evento se mais de um usuário logado Empty Re: Impedir evento se mais de um usuário logado

    Mensagem  criquio 19/4/2012, 21:24

    Uma saída pode ser incluir um frontend no servidor com uma rotina para avaliar se as máquinas logadas estão acessíveis. Se estiver, deixa quieto. Caso contrário, deleta o registro referente à essa máquina. Bastaria colocar o "Intervalo do cronômetro" em 1000 e no evento "No timer":

    Código:
    Dim rs As Recordet
    Set rs = DBEngine.Workstation(0).OpenDatabase("Caminho do backend\Nome do backend.accdb", False, False, "MS Access;PWD=Senha").OpenDatabase("tblLogados")
        Do While Not rs.EOF
            If Len(Dir(rs!PCLogado, vbArchive)) = 0 Then
                rs.Delete
                rs.Update
            End If
        Loop
    rs.Close
    Set rs = Nothing
    Nesse caso, mude o nome do usuário dos códigos anteriores para o nome da máquina ma rede: \\Nome do pc\


    .................................................................................
    Meu novo site: www.vcssistemas.com.br

    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.

    Bão
    Bão
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 105
    Registrado : 04/05/2011

    Impedir evento se mais de um usuário logado Empty Re: Impedir evento se mais de um usuário logado

    Mensagem  Bão 3/5/2012, 21:37

    Criquio, agradeço o empenho...

    Mas acho que estou precisando de algo como o exemplo que encontreio aqui na comu: http://dl.dropbox.com/u/8157744/Usemrede.mdb

    Porém, não estou vendo nenhuma maneira de usar como quero: para que ele mostre os computadores que estão acessando o backend pelo frontend de cada máquina...

    Este exemplo só mostra as máquinas que estão usando o sistema (que é apenas um compatilhado e acessado pela rede no mesmo endereço), o próprio banco de dados que é aberto em máquinas diferentes...

    Peço ajuda para conseguir... agradeço demais!!!
    avatar
    Convidad
    Convidado


    Impedir evento se mais de um usuário logado Empty Re: Impedir evento se mais de um usuário logado

    Mensagem  Convidad 3/5/2012, 21:58

    Viludo

    O Mestre Criquio deu uma aula sobre isso pra você.

    Veja que até o arquivo BancoDeDados.laccdb ou .ldb do próprio access continuará na pasta do BE se cair algum computador da rede, pois o Access não fechou corretamente.
    Ou seja, não tem outras formas, senão essas que o Criquio já mencionou.
    Ao contrário do que pensou, esse não é um probleminha, é um problemão.

    Abraços
    Bão
    Bão
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 105
    Registrado : 04/05/2011

    Impedir evento se mais de um usuário logado Empty Re: Impedir evento se mais de um usuário logado

    Mensagem  Bão 4/5/2012, 15:08

    Mestres...

    Será mesmo tão complicado isso?

    Gostaria apenas de usar esse exemplo que postei o link para visualizar (no frontend) os computadores que estão acessando o backend...

    Mas pelo jeito vai ser complicado... Mesmo assim agradeço toda a ajuda que já recebi!
    criquio
    criquio
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    Impedir evento se mais de um usuário logado Empty Re: Impedir evento se mais de um usuário logado

    Mensagem  criquio 4/5/2012, 15:47

    Eu tenho um exemplo que preparei a uns dias atrás que funciona dessa forma. Tem um exemplo para download no post nº 8 desse tópico e tem até um vídeo no youtube.


    .................................................................................
    Meu novo site: www.vcssistemas.com.br

    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.

    Bão
    Bão
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 105
    Registrado : 04/05/2011

    Impedir evento se mais de um usuário logado Empty Re: Impedir evento se mais de um usuário logado

    Mensagem  Bão 4/5/2012, 22:25

    Criquio... eu acho que é isso mesmo que estava procurando...

    Vou tentar adaptar aqui à minha aplicação...

    Tu é fera mesmo!!! Quem dera eu tivesse tamanha criatividade... Obrigado! Very Happy


    Última edição por viludo em 23/5/2012, 02:57, editado 1 vez(es)
    Bão
    Bão
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 105
    Registrado : 04/05/2011

    Impedir evento se mais de um usuário logado Empty Re: Impedir evento se mais de um usuário logado

    Mensagem  Bão 23/5/2012, 02:57

    Fuçando na net acabei encontrando um ótimo esquema que identifica arquivos específicos dentro da pasta onde está o backend...

    Daí pensei: basta alterar para que identifique aquele arquivo .laccdb que surge quando alguém está acessando o backend, impedindo determinado evento... obrigando o outro usuário a desconectar do backend para que o evento ocorra...

    Mas acabei encontrando outra quentão: se o mesmo usuário, após desconectar, fizer uma graça e conectar novamente enquanto estou executando o evento?! Como obrigá-lo a desconectar novamente?!

    Isso já tá me tirando o sossego...
    Anexos
    Impedir evento se mais de um usuário logado AttachmentKickOut.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (98 Kb) Baixado 17 vez(es)
    avatar
    Convidad
    Convidado


    Impedir evento se mais de um usuário logado Empty Re: Impedir evento se mais de um usuário logado

    Mensagem  Convidad 23/5/2012, 18:39

    Viludo

    Aqui está um exemplo de como verificar se tem alguém conectado no BE.
    É só alterar para o caminho do BE.

    A 2007 +

    If Len(Dir(Left(Currentdb.name, Len(currentdb.Name) - 5) & "laccdb")) <> 0 Then ...

    Access 2003 -

    If Len(Dir(Left(Currentdb.name, Len(currentdb.Name) - 3) & "ldb")) <> 0 Then ...

    Uma ideia:

    Você pode usar esse código também para mudar o nome do BE e trabalhar com o BE com o nome modificado.
    No FE, poderá colocar uma verificação assim que ele é aberto, usando o código acima, com alguma modificação, para verificar se existe o BE com o nome original, caso não exista (é quando você está usando o BE), mostra uma msgbox "Em manutenção, queira aguardar".
    Como pode perceber, existe várias saídas para você ter sossêgo. Laughing

    Abraços
    Bão
    Bão
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 105
    Registrado : 04/05/2011

    Impedir evento se mais de um usuário logado Empty Re: Impedir evento se mais de um usuário logado

    Mensagem  Bão 24/5/2012, 01:37

    Balem...

    Em "Aqui está um exemplo de como verificar se tem alguém conectado no BE."

    Na parte sublinada era para ter um link do exemplo?!

    Porque no código não vi onde está a parte do caminho do backend para alterar...

    Mas agradeço a ajuda!
    avatar
    Convidad
    Convidado


    Impedir evento se mais de um usuário logado Empty Re: Impedir evento se mais de um usuário logado

    Mensagem  Convidad 24/5/2012, 01:52

    Não é link é apena um grifo para dizer que é apena um exemplo

    Se você conhece a janela de verificação imediata do Access (Crlt +G) e colocar nela:

    ? Currentdb.Name


    Veja o que retorna.
    Bão
    Bão
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 105
    Registrado : 04/05/2011

    Impedir evento se mais de um usuário logado Empty Re: Impedir evento se mais de um usuário logado

    Mensagem  Bão 24/5/2012, 02:21

    Ok...

    Vou testar e retorno... Very Happy
    Bão
    Bão
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 105
    Registrado : 04/05/2011

    Impedir evento se mais de um usuário logado Empty Re: Impedir evento se mais de um usuário logado

    Mensagem  Bão 25/5/2012, 16:20

    Balem, agradeço o empenho...

    Mas me diz, vc testou esse código? Tô tentando de tudo quanto é jeito e só dá erro...

    Fiz assim e nada:

    If Len(Dir(Left(CurrentDb.Name, Len(CurrentDb.Name) - 5) & "C:\Banco_be.laccdb")) <> 0 Then
    MsgBox "Logado"
    End If


    Onde estou errando? Grato!
    avatar
    Convidad
    Convidado


    Impedir evento se mais de um usuário logado Empty Re: Impedir evento se mais de um usuário logado

    Mensagem  Convidad 25/5/2012, 17:19

    Como disse, era só um exemplo.

    Tente assim:
    If Len(Dir("C:\Banco_be.laccdb")) <> 0 Then
    MsgBox "Logado"
    End If

    Abraços

    Conteúdo patrocinado


    Impedir evento se mais de um usuário logado Empty Re: Impedir evento se mais de um usuário logado

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 22/11/2024, 07:46