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


    Atualizar ComboBox via Código VBA

    avatar
    Ednardo
    Novato
    Novato

    Respeito às Regras 100%

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

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

    Mensagem  Ednardo em 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.
    ahteixeira
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

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

    Mensagem  ahteixeira em 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: 13/12/2019, 08:49