Notifications
Clear all

Carregar Combobox - erro: "Operação não permitida..."

4 Posts
2 Usuários
0 Reactions
1,739 Visualizações
(@mpsanttanna)
Posts: 4
Active Member
Topic starter
 

Galera, recentemente pedi a ajuda de vcs sobre o tópico "ComboBox encadeado", inclusive recebi a ajuda do colega Wagner Morel, sobre o mesmo. Porém o que está acontecendo agora é o seguinte: o aplicativo inicia carregando duas combos, uma pedido e outra produtos. Inicia sem problema nenhum, porém quando vou salvar o registro novo, o excel trava completamente, estourando a memória ram. Fazendo a depuração manual do código encontrei o local onde está ocorrendo o erro e é nessa parte do código: Private Sub CboOPPedido_Change()

Do While Not banco.EOF
            Me.CboOPProduto.AddItem banco!Produto
            banco.MoveNext
         Loop

e quando posiciona o cursor em cima da linha Do While Not banco.EOF retorna o seguinte na linha de comentário: "Operação não permitida quando o objeto está fechado.". Alguém poderia ajudar-me a solucionar essa dúvida, pois faz 3 dias que estou tentando resolver, porém não consigo encontrar.

Agradeço a todos,

Melque Santana

 
Postado : 01/11/2012 2:55 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Melque,

Você precisa definir uma forma melhor de limpar os controles logo após gravar uma Nota. Veja:
Na sua rotina btnGravar_Click() a última linha de comando chama a rotina LimpaControles.
A rotina LimpaControles, por sua vez, sai modificando os valores dos diversos objetos existentes em seu formulário. Issi implica dizer que quando ela altera o valor de um objeto desses, faz disparar a rotina Change desse objeto.

Assim, quando você altera (na rotinaLimpaControles) o valor do objeto CboOPPedido, é disparada a rotina Change desse objeto que faz a leitura de um objeto de BD. Nesse momento, o objeto de BD não existe ou não foi aberto. Assim, o código a que você se referiu aqui nesse último post, fica em loop infinito, chegando a travar a máquina, porque Do While Not banco.EOF (enquanto não chegar o fim do arquivo) sempre vai ser falso.

Desse modo, você precisará traçar estratégias de como tratar isso. Dentre as opções disponíveis, você definir uma variável booleana para verificar quando o controle já foi limpo, nãolimpar os controles ou esse controle, mudar o código desse evento no objeto para um outro evento como o evento Exit, etc.

Precisa pensar um pouquinho mais para resolver isso. Coloque um break point na linha 6 da rotina btnGravar_Click() (If Not Me.LstvDP.ListItems.Count > 0 Then) e depois continue a execução com F8 (depuração passo-a-passo) que você vai perceber o que estou lhe dizendo.

 
Postado : 01/11/2012 10:48 am
(@mpsanttanna)
Posts: 4
Active Member
Topic starter
 

Salve, Salve, grande Wagner. Valew pela dica. Troquei o evento change() pelo exit(), funcionou perfeitamente. Muito obrigado pela ajuda.

Com relação ao loop infinito, fiz depuração passo-a-passo e pude compreender melhor sua observação.

Muito obrigado.

Abraço e bom feriado e final de semana,

Melque

 
Postado : 01/11/2012 6:10 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Igualmente, Melque.

Obrigado.

 
Postado : 02/11/2012 10:23 am