Jump to content
Fórum Script Brasil
  • 0

Como usar o combobox


jackbcc

Question

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

 

Help......

 

 

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Help.

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652.1k
×
×
  • Create New...