PREENCHER COMBO COM ADO

USUARIO.EXCLUIDOS 10/01/2005 16:46:20
#59837
Olá amigos , para aqueles que puderem me ajudar ,agradeço antecipadamente.

Vejam esta situação:

Tenho um projeto , com CONEXÃO ADO, trabalhando em módulo, usando o MDI.

Na tela CADCD (que é meu cadastro principal), quando este form carregar,
Preciso que a minha COMBOGENERO esteja carregada. Esta deve trazer os “gêneros dos Cds” que estão cadastrados em outra tabela.
Como carregar esta combo ?
A minha dificuldade é a intrução sql.

Espero ter sido o mais específico possível.
é que aindo sou novato nesta linguagem.
Obrigado galera!!!

(Obs “ são duas tabelas do mesmo banco de dados )
[S54]
USUARIO.EXCLUIDOS 10/01/2005 17:05:27
#59841
Segue instrução:

"SELECT nome_do_campo_genero FROM nome_da_tabela_genero"

Estou supondo que você tenha uma tabela de gêneros onde cada gênero está cadastrado uma única vez.

Se não for isso, avise.
USUARIO.EXCLUIDOS 10/01/2005 17:05:55
#59843
faça assim

adodc1.recordset.movefirst
sql = "select generos from tabela order by generos"
adodc1.recordsource = sql

do while not adodc1.recordset.eof
combobox.additem adodc1.recordset![Generos]
adodc1.recordset.movenext
loop


USUARIO.EXCLUIDOS 10/01/2005 17:08:20
#59844
'se o adodc1, for uma conexao usada no form.

adodc1.recordset.movefirst 
sql = "select * from tabela order by generos"
adodc1.recordsource = sql
adodc1.refresh
do while not adodc1.recordset.eof
combobox.additem adodc1.recordset![Generos]
adodc1.recordset.movenext
loop
adodc1.recordset.movefirst


RODRIGUESRM 10/01/2005 17:09:10
#59845
AGS_Alex,

Se eu fosse vc utilizaria uma DBCombo ou DataCompo para isso... mas se vc realmente quiser utilizar ComboBox, então aí vai um exemplo com utilização de ADO 2.8

  

Private Sub Form_Load()

'Estou utilizando neste código ADO 2.8

Dim BD As ADODB.Connection
Dim RS As ADODB.Recordset

Set BD = New ADODB.Connection
Set RS = New ADODB.Recordset

Combo1.Clear

BD.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\NSC\GesCom\GesCom.mdb"
RS.Open "SELECT cmpCODIGO, cmpDESCRICAO FROM Generos ORDER BY cmpDESCRICAO ASC", BD, adOpenKeyset, adLockBatchOptimistic

If RS.RecordCount <> 0 Then

RS.MoveFirst
Do While Not RS.EOF

Combo1.AddItem RS("cmpDESCRICAO")
RS.MoveNext

Loop

End If

End Sub

USUARIO.EXCLUIDOS 10/01/2005 17:41:55
#59863
obrigado pela ajuda pessoal!!!



Só crescemos profissionalmente, compartilhando esperiências e principalmente, perguntar sempre !!



Valeu!!!!



USUARIO.EXCLUIDOS 10/01/2005 18:39:29
#59874
Deu tudo certo amigo?
Se sim, por favor encerre o tópico.
LCSD 11/01/2005 08:25:18
#59913
Resposta escolhida
AGS_Alex

Você pode declarar uma rotina Genérica no Módulo, assim qualquer preenchimento de Combo ou ListBox ficaria acessível.

Em um Módulo:

Public Sub PreencherLista(ByRef pLista As Control, pTabela As String, pCampoChave As String, pCampoTexto As String)
' Declaração do RecordSet e Instanciamento
Dim plRecordset As ADODB.Recordset
Set plRecordset = New ADODB.Recordset

On Error GoTo errLista

gSQL = "Select " & pCampoChave & ", " & pCampoTexto & " from " & pTabela & " order by " & pCampoTexto

plRecordset.Open gSQL, Conexão1, adOpenForwardOnly, adLockReadyOnly

With pLista
.Clear
Do While Not plRecordset.EOF
.AddItem plRecordset(1).Value
.ItemData(.NewIndex) = plRecordset(0).Value
plRecordset.MoveNext
Loop
End With

'Fechamento e Destruição do RecordSet
plRecordset.Close
Set plRecordset = Nothing
Exit Sub

errLista:
Erro "preenchimento da lista"
Exit Sub
End Sub


O Conexão1 é o Connection, que deve estar ativo no momento da inclusão, altere para o nome que você tiver no seu Projeto

O cursor adOpenForwardOnly e adLockReadyOnly são os mais rápidos, já que o adOpenForwardOnly é o mais rápido mas não suporta que se retorne, Previous, só que para preenchimento de ListBox e ComboBox isto não é necessário.

Os parà¢metros pCampoChave, pCampoTexto e pTabela são os Campos e a Tabela que deverá ser a Fonte dos Dados.

Teste e veja se resolve a sua dúvida.
[s95]
Tópico encerrado , respostas não são mais permitidas