Ir ao conteúdo
  • Cadastre-se

vb6


Alberto09

Posts recomendados

Olá pessoal,

Alguém sabe como fazer com que um combo box funcione como um "espelho" da tabela, listando os dados de um campo ? Quero fazer isso para copiar dados de uma tabela e salvar em outra. O form utiliza um data control, mas os acessos aos dados da outra tabela faço via código.

Alberto

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Você tem que:

1) Conectar ao banco de dados

2) Encher um Recordset com dados da tabela

3) Usando uma estrutura de repetição 'For... Next' (ou 'Do... Loop'), colocar os registros dentro do ComboBox.

Trocando em miúdos:

1) Coloque um ComboBox num Form. Deixe ele nomeado como 'Combo1' mesmo, o nome dele não é importante nesse exemplo.

2) Faça referência ao 'Microsoft DAO Object Library 3.6', no menu 'Project - References'. Se já tiver, deixe como está.

3) Copie e cole no Form a rotina abaixo:

Private Sub PreencherCombo(Combo As ComboBox)

    Dim Banco As Database, Tabela As Recordset
    Dim Sql As String, Cont As Long, Qtd As Long, Valor As String
        
    On Error GoTo Erro
        
    Screen.MousePointer = vbHourglass
    
    Combo.Clear
    
    'Sua instrução SQL, que vai selecionar os dados do campo
    'cujos dados quer no ComboBox
    Sql = "SELECT Nome_do_campo FROM Nome_da_tabela;"

    'Conexão com o banco de dados
    Set Banco = OpenDatabase("coloque o caminho do seu banco de dados aqui")
    
    'Execução da instrução SQL e preenchimento do Recordset
    Set Tabela = Banco.OpenRecordset(Sql, , dbOpenForwardOnly)
    
    'Recalculando contador de registros. Isso é necessário apenas
    'na antiga biblioteca DAO, devido a um bug que a Microsoft se
    ''esqueceu' de corrigir. No ADO, esse bug já foi corrigido.
    Tabela.MoveLast
    Tabela.MoveFirst
    
    'Qtd. de registros retornados pela consulta
    Qtd = Tabela.RecordCount
    
    'Se a consulta retornou registros...
    If Not Qtd = 0 Then
        
        'Percorrer do primeiro ao último para preencher o ComboBox
        For Cont = 1 To Qtd
        
            DoEvents
        
            'Tomar o ciodado de verificar se o campo está nulo,
            'do contrário será retornado um erro 'Invalid use of null'
            If Not IsNull(Tabela.Fields!Nome_do_campo) Then
                Valor = Tabela.Fields!Nome_do_campo
            Else
                Valor = ""
            End If
            
            If Not (Valor = "") Then Combo.AddItem Valor
                
            'Movendo para próximo registro
            Tabela.MoveNext

        Next

        Combo.ListIndex = 0

    End If

    Banco.Close
    Set Banco = Nothing
    Set Tabela = Nothing
    
    Screen.MousePointer = vbDefault

Erro:
    
    Screen.MousePointer = vbDefault
    If Not Err.Number = 0 Then MsgBox Err.Description, vbCritical, "Erro: " & Err.Number
    Err.Clear

End Sub

Para chamar a rotina, na parte do código onde quiser preencher o combobox, use:

PreencherCombo Combo1

Atenção: não esqueça de substituir a instrução SQL por outra que faça a consulta na tabela que deseja. Da mesma forma, tem que colocar o caminho completo onde está o seu banco de dados.

E também, substituir tudo onde estiver "Nome_do_campo" pelo nome real do campo na tabela, o qual vai preencher com dados o ComboBox

É isso.

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois...

Isso pode até ter funcionado, mas não é a forma mais fácil que existe.

Acredito que sua conexão já esteja pronta, então vou pular a parte de como criar a conexão.

No evento form_load, chame a função PreencheCombo decrita abaixo:

private sub PreencheCombo()

Do While Not rs.EOF

ComboBox1.AddItem rs!NomeDaColuna

rs.MoveNext

Loop

End Sub

Isso te dará um código muito mais limpo.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
Isso pode até ter funcionado, mas não é a forma mais fácil que existe.

Acredito que sua conexão já esteja pronta, então vou pular a parte de como criar a conexão.

No evento form_load, chame a função PreencheCombo decrita abaixo:

private sub PreencheCombo()

Do While Not rs.EOF

ComboBox1.AddItem rs!NomeDaColuna

rs.MoveNext

Loop

End Sub

Isso te dará um código muito mais limpo.

Eu preciso é ter muita paciência com uns novatos que me aparecem aqui de vez em quando... que além de não saberem nada, esbanjam arrogância...

E ainda por cima, o cara me ressucita um post que já estava resolvido desde Outubro... pura insegurança pessoal misturada com falta do que fazer...

Eu frequento este Forum desde 2003 e já ajudei muita gente aqui (assim como já fui ajudado muitas vezes) e não posso admitir esse tipo de coisa de alguém que não tem o mínimo de humildade e pelo visto não passa de um wannabe, ou na melhor das hipóteses, um script kid entediado com a própria vida.

Bom, mas mesmo assim, vamos lá... estou aqui para ajudar, então deixa eu arregaçar as mangas e explicar como se faz:

Primeiramente, caro "Netobomelindo"... se meu código está "sujo" e "não é a forma mais fácil que existe" como você tão gentilmente sugeriu, é porque:

1) Eu declaro variáveis

2) Eu uso código estruturado

3) Eu coloco comentários explicando passo a passo o que cada linha de código está executando

4) Tudo isso eu faço para que aquele que tem dúvidas, entenda o que estou tentando explicar

Além do que, todo bom profissional da área (algo que certamente você não é) sabe que "pouco código" não significa "código eficiente".

Nem tudo o que é fácil fazer proporciona um bom resultado. É por causa de "pseudo-profissionais" que pensam assim igual você, é que o mercado de trabalho está contaminado com gente desqualificada.

E pra finalizar, quando você finalmente entender o que são estruturas de repetição, para que servem e quais as diferenças entre elas, aí você volta aqui e tenta me dar umas aulas, certo?

Por exemplo, você sabe (tenho certeza que não) a diferença entre "Do... Loop" e "For... Next", e em qual situação é adequado usar ou um ou outro?

Agora por favor, não me venha dizer que esse montinho de fezes caninas que você escreveu aí é mais eficiente do que o codigo que eu escrevi para ajudar o colega que estava com dúvida.

Da próxima vez, seja mais humilde, garoto.

E veja se aprende também a usar as ferramentas que o Forum oferece. Você poderia ter colocado isso que você chama de "código" usando os tags "code", ao invés de colocar em vermelho.

Boa sorte (você vai precisar...)

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!