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

    Atualizar ComboBox via Código VBA

    avatar
    Ednardo
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 30
    Registrado : 20/11/2015

    Atualizar ComboBox via Código VBA Empty Atualizar ComboBox via Código VBA

    Mensagem  Ednardo 29/9/2018, 21:50

    Bom pessoal uso Access 2016 64Bits e estou com um pequeno problema, tentarei explicar...

    Possuo um Form!Ambiente que contem uma ComboBox Form!Ambiente!LstServidores, este por sua vez abre sempre que o usuário loga no sistema para seleção do ambiente de trabalho, pois o sistema gerencia informações de mais de uma empresa onde cada empresa tem seu próprio BD em SQL Server, e o sistema precisa saber em qual banco ele vai trabalhar, essa conexão é feita via IP pois todas as empresas são inter ligadas pela nossa intranet(VPN), Qualquer select é feito através desde Form, que após seleção do ambiente ele fica oculto, e qualquer e qualquer conexão ao DB via select é feito através da Linha da ComboBox selecionada (Forms!Ambiente.Form!LstServidores.Column(1)), por motivos internos de segurança os IP's dos servidores não são Estáticos, e alteram a cada dia, havendo a necessidade de ir no cadastro de servidores e alterar seu IP de acordo com o IP que o servidor adquiriu no dia, até ai nenhum problema, existe um evento ao Fechar no Form onde se cadastra ou se altera os IP's dos servidores, que vai no form oculto e faz uma atualização dos dados e um re-select para que a coluna do IP possa se atualizar para o novo IP após o mesmo ser alterado sem que o usuário tenha que fazer isso manualmente, segue o evento...
    Código:
    Private Sub Form_Close()
    If IsLoaded("Ambiente") Then
        'Refaz a consulta da ComboBox a tabela
        Forms!Ambiente.Form!LstServidores.Requery
        'Re-seleciona a mesma opção que já estava selecionada na ComboBox usando o indice da Seleção
        Forms!Ambiente.Form!LstServidores.Selected(Forms!Ambiente.Form!LstServidores.ListIndex) = True
    End If
    End Sub


    Ao Chamar msgbox Forms!Ambiente.Form!LstServidores.Column(1), bingo... aparece o novo IP que alterei para aquela empresa!

    Vamos ao problema....

    Digamos que o funcionário tenha digitado o IP errado da empresa que está selecionada na ComboBox e precisa abrir o cadastro para alterar o IP novamente. Até ai tudo bem...
    Só que existe um porém, a segunda vês que a ComboBox foi selecionada foi via código, e não é igual a primeira que foi selecionado pelo usuário com o mouse, a segunda vês por exemplo não dispararia o evento AfterUpdate caso houvesse, pois é como se a seleção atualiza-se os valores da linha selecionada mais não atualiza-se a seleção do campo, deu pra entender? É como se eu ainda estivesse dentro do campo esperando o LostFocus para atualizar nas vias de fato.
    A questão é que em quanto eu não for lá no form e fizer uma seleção com o mouse na forma convencional, não consigo mais atualizar o campo via código pois apresenta um erro!
    Digamos que o usuário alterou o IP pela segunda vês com o sistema ainda aberto sem ter sido fechado, Já houve uma seleção via código da ComboBox para alterar a coluna do IP, quando ele chama o evento ao Fechar do form de cadastro dos IP's dos servidores acontece o segunte erro no comando (Forms!Ambiente.Form!LstServidores.Requery) (Erro em tempo de execução 2118: Você deve salvar o campo atual antes de executar uma ação RepetirConsulta.)
    Preciso de um comando em VBA que atualize a ComboBox como se eu tivesse ido lá e selecionado um item com o mouse, que no caso até dispararia o evento AfterUpdate caso houvesse que não acontece para que ao chamar o evento ao Fechar pela segunda vês não Ocasionasse esse erro!
    Comando tipo: Forms!Ambiente.Form!LstServidores.Save
    ou Forms!Ambiente.Form!LstServidores.Update
    Lembrando que não estou trabalhando dentro do form estou em outro por isso preciso usar o caminho completo para referenciar a ComboBox.
    Se alguém puder ajudar agradeço!

    Resumo do problema:
    Toda vês que executo o comando Forms!Ambiente.Form!LstServidores.Selected("Índice") = True para selecionar um item na Combobox, não consigo mais executar o comando Forms!Ambiente.Form!LstServidores.Requery.
    Erro apresentado: Erro em tempo de execução 2118: Você deve salvar o campo atual antes de executar uma ação RepetirConsulta.
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7914
    Registrado : 15/03/2013

    Atualizar ComboBox via Código VBA Empty Re: Atualizar ComboBox via Código VBA

    Mensagem  Alvaro Teixeira 30/9/2018, 14:25

    Olá Ednardo,

    Sem um exemplo simples é difícil compreender o problema.
    A solução simples já que os IPs estão dinâmicos seria usar o caminho UNC, exemplo:
    \\NomeServidor\NomeDaShare

    Caso, pretenda pelos IPs, porque não tenta em vez de carregar o form (quando usuários faz login) que depois fica com a lista desatualizada, faz antes um Dlookup a pesquisar o IP quando necessário.

    Fica as dicas.

    Abraço

      Data/hora atual: 28/3/2024, 14:34