Jump to content
jackbc

Erro ao carregar combobox

Recommended Posts

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

Edited by jackbc

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.