Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

jackbc

Erro ao carregar combobox

Mensagens Recomendadas

jackbc    0
jackbc

Estou usando a apostila do vb6 e nele consta um projeto de Biblioteca, agora travei na parte do fomulário do cadastro de livros, foi criado um combobox referente a tabela editora e categoria mas não estou conseguindo puxar, segue o código:

Private Sub txtCodLivro_LostFocus()

'variável que será usada para manipular o Banco de Dados

Dim cnnComando As New ADODB.Command

'variável que recebe os dados do Banco de Dados e Grava no BD de volta

Dim rsSelecao As New ADODB.Recordset

Dim vCod As Long

Dim i As Integer

On Error GoTo errSelecao 'caso ocorra erro vai pra outro comando abaixo

'converte o código digitado para a pesquisa:

vCod = Val(txtCodLivro.Text)

'Verifica se foi digitado um código válido:

'Val vai retornar em valores numericos o que foi digitado na txtCodLivro

'como não foi digitado nada ele retorna 0, então acontece a MsgBox abaixo

If vCod = 0 Then Exit Sub

'o comando abaixo transforma o cursor do mouse em ampulheta

Screen.MousePointer = vbHourglass

'tenta selecionar o registro na tabela de livros:

'o command começa a executar operações no BD

With cnnComando

'ativa a conexão criada com o BD

.ActiveConnection = cnnbiblio

'indica o tipo de dados a ser aberto

.CommandType = adCmdText

'Monta o comando Select para selecionar o registro na tabela:

'indica qual o campo a ser trabalhado

.CommandText = "Select * from Livros where CodLivro= " & vCod & ";"

'declarando que o rsSeleção será executado como declarado acima

Set rsSelecao = .Execute

End With

With rsSelecao

If .EOF And .BOF Then

'Se o recordset esta vazio, não retornou registro com esse código:

'LimparDados ->errado na apostila, deve dar continuidade tanto na inclusão como na alteração

'Identifica a operação como inclusão:

vInclusao = True

Else

'Senão, atribui aos campos os dados do registro:

txtTitulo.Text = !Titulo

txtAutor.Text = !Autor

vCodEditora = !CodEditora

vCodCategoria = !CodCategoria

vAcompCD = !AcompCD

vAcompDisquete = !AcompDisquete

vIdioma = !Idioma

'como observações não é um campo obrigatório,devemos impredir a atribuição do valor nulo(se houver caixa de texto:

txtObservacoes = Empty & !Observacoes

'exibe os dados das variáveis nos controles correspondentes:

With cboEditora

'elimina a seleção atual:

.ListIndex = -1

'Combo ListCount retorna o número de itens da combo,ListCount -1 é igual ao índice do último item.

'Portanto o loop abaixo será execurtado patra todos os itens da combo através de seu índice:

For i = 0 To (.ListCount - 1)

If vCodEditora = .ItemData(1) Then

'se ItemData for igual ao código atual, seleciona o item e sai do loop:

.ListIndex = 1

Exit For

End If

Next i

End With

With cboCategoria

'elimina a seleção atual:

.ListIndex = -1

'Combo ListCount retorna o número de itens da combo,ListCount -1 é igual ao índice do último item.

'Portanto o loop abaixo será execurtado patra todos os itens da combo através de seu índice:

For i = 0 To (.ListCount - 1)

If vCodCategoria = .ItemData(1) Then

'se ItemData for igual ao código atual, seleciona o item e sai do loop:

.ListIndex = 1

Exit For

End If

Next i

End With

'se vAcompCd=true, marca chkAcompCD, senão desmarca:

chkAcompCD.Value = IIf(vAcompCD, vbChecked, vbUnchecked)

chkAcompDiquete.Value = IIf(vAcompDisquete, vbChecked, vbUnchecked)

'Habilita o botão Excluir:

Toolbar1.Buttons(3).Enabled = True

'Identifica a operação como Alteração:

vInclusao = False

End If

End With

'Desabilita a digitação do campo código:

txtCodLivro.Enabled = False

saida:

'Elimina o command e o recordset da mémoria:

Set rsSelecao = Nothing

Set cnnComando = Nothing

Screen.MousePointer = vbDefault

Exit Sub

errSelecao:

With Err

If .Number <> 0 Then

MsgBox "Houve um erro na recuperação do registro solicitado." & .Description, vbExclamation + vbOKOnly + vbApplicationModal, "Erro"

' MsgBox "Houve um erro na recuperação do registro solicitado.", vbExclamation + vbOKOnly + vbApplicationModal, "Aviso"

'ver o erro ao digitar o código do usuário

.Number = 0

GoTo saida

End If

End With

End Sub

Segue a programação do combo:

object variable or with block variable not set

Public Sub ComboEditoras(NomeCombo As ComboBox)

Dim cnnComando As ADODB.Command

Dim rstemp As New ADODB.Recordset

Dim i As Integer

On Error GoTo errComboEditoras

'executa a consulta EditorasEmOrdemAlfabética:

With cnnComando

.ActiveConnection = cnnBiblio

.CommandType = adCmdStoredProc

.CommandText = "EditorasEmOrdemAlfabetica"

Set rstemp = .Execute

End With

With rstemp

'verifica se existe alguma editora cadastrada:

If Not (.EOF And .BOF) Then

'se existe,então posiciona o apontador no primeiro registro do rs:

.MoveFirst

'inicializa a variável i que será ussada como índice para a propriedade ItemData:

i = 0

While Not .EOF

'adiciona um item á combo com o nome da editora:

NomeCombo.AddItem !Descricao, i

'grava na propriedade ItemData desse código as editoras:

NomeCombo.ItemData(i) = !Codigo

'vai para o próximo registro do rs:

.MoveNext

'incrementa i:

i = i + 1

Wend

End If

End With

Saida:

Set cnnComando = Nothing

Set rstemp = Nothing

Exit Sub

errComboEditoras:

With Err

If .Number <> 0 Then

MsgBox "Não foi possível a leitura da tabela Editoras:" & .Description, vbExclamation + vbOKOnly + vbApplicationModal, "Erro ao carregar o ComboBox"

'MsgBox "Não foi possível a leitura da tabela Editoras:", vbInformation + vbOKOnly + vbApplicationModal, "Erro ao carregar o ComboBox"

.Number = 0

GoTo Saida

End If

End With

End Sub

Public Sub ComboCategorias(NomeCombo As ComboBox)

Dim cnnComando As ADODB.Command

Dim rstemp As New ADODB.Recordset

Dim i As Integer

On Error GoTo errComboCategorias

'executa a consulta CategoriasEmOrdemAlfabética:

With cnnComando

.ActiveConnection = cnnBiblio

.CommandType = adCmdStoredProc

.CommandText = "CategoriasEmOrdemAlfabetica"

Set rstemp = .Execute

End With

With rstemp

'verifica se existe alguma categoria cadastrada:

If Not (.EOF And .BOF) Then

'se existe,então posiciona o apontador no primeiro registro do rs:

.MoveFirst

'inicializa a variável i que será ussada como índice para a propriedade ItemData:

i = 0

While Not .EOF

'adiciona um item á combo com o nome da editora:

NomeCombo.AddItem !Descricao, i

'grava na propriedade ItemData desse código as editoras:

NomeCombo.ItemData(i) = !Codigo

'vai para o próximo registro do rs:

.MoveNext

'incrementa +1:

i = i + 1

Wend

End If

End With

Saida:

Set cnnComando = Nothing

Set rstemp = Nothing

Exit Sub

errComboCategorias:

With Err

If .Number <> 0 Then

MsgBox "Não foi possível a leitura da tabela Categorias:" & .Description, vbExclamation + vbOKOnly + vbApplicationModal, "Erro ao carregar o ComboBox"

' MsgBox "Não foi possível a leitura da tabela Categorias:", vbInformation + vbOKOnly + vbApplicationModal, "Erro ao carregar o ComboBox"

.Number = 0

GoTo Saida

End If

End With

End Sub

Editado por jackbc

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.