COMBOBOX

JABA 19/08/2009 11:07:45
#320232
Olá pessoal, gostaria de fazer referencia dos dados de um recordSet para um ComboBox:

EX:

Meu recordSet tem os campos Codigo e Nome

No ComboBox eu quero que apareça os nomes que estao no recordset e depois que eu selecionar algum dado neste ComboBox, eu obtenha o Codigo deste item selecionado.

Estou tentando isso:

Combo.DataMember = [Ô]Codigo[Ô]
Combo.DataField = [Ô]Nome[Ô]
Set Combo.DataSource = oPaciente.CarregaDados.DataSource

Funciona, porém, o ComboBox aparece apenas com um unico dado, ou seja, o primeiro registro, sendo que o meu recordset tem muito mais dados,
e outra coisa, nao estou conseguindo saber o codigo do item selecionado desta forma que estou fazendo, tem alguma propriedade na combo que o valor fique guardado?

vlw pessoal
ROBIU 19/08/2009 11:19:04
#320233
Para Carregar o combo:

Private Sub Combo1_GotFocus()
[ô]abrir a conexao definida no módulo

Conexao.Conex
Set Rs = New ADODB.Recordset
Combo1.Clear [ô]limpa o combo para não duplicar
[ô]Neste Exemplo estou selecionando vários campos da tabela mas no seu caso é apenas um campo
Sql = [Ô]SELECT Codigo,Nome,Curso FROM Tabela ORDER BY Codigo[Ô]
Rs.Open Sql, Bd, adOpenKeyset, adLockPessimistic
[ô]Este loop adiciona todos os registros da tabela no combo
Do While Not Rs.EOF
Combo1.AddItem Rs(0) & [Ô] | [Ô] & Rs(1) & [Ô] - [Ô] & Rs(2)
Rs.MoveNext
Loop
Combo1.Refresh
[ô]E importante fechar e destruir as váriaveis de acesso ao banco de dados,
[ô]principalmente trabalhando em rede
Rs.Close
Set Rs = Nothing
Conexao.Desconex

End Sub


Para Preencher as textboxs:
Private Sub Combo1_Click()
[ô]isso Carrega os campos
[ô]Esse código é só para preencher as textboxs com os valores das tabelas,
Conexao.Conex
Set Rs = New ADODB.Recordset

Sql = [Ô]select Codigo,Nome,Curso From Tabela Where Codigo=[ô][Ô]
Sql = Sql & Mid(Combo1.Text, 1, 3) & [Ô][ô][Ô]
Rs.Open Sql, Bd, adOpenKeyset, adLockPessimistic
Txt1.Text = Rs(0)
Txt2.Text = Rs(1)
Txt3.Text = Rs(2)
Rs.Close
Set Rs = Nothing
Conexao.Desconex
[ô]Observe que sempre abro o banco, pego as informações e fecho o banco
[ô]Se esse banco estiver no servidor, não terá problema com lentidão na conexão

End Sub
LEANDRO 19/08/2009 11:49:10
#320244
Eu faço assim. e funciona perfeitamente

Dim i As Integer
Set ComboCarregaBanco = gMyConn.Execute([Ô]SELECT codigo, banco,concat(lpad(codigo,3,[ô]0[ô]), [ô] - [ô], banco,[ô] - [ô],nome) as nomebanco FROM cadban ORDER BY concat(lpad(codigo,3,[ô]0[ô]), [ô] - [ô], banco,[ô] - [ô],nome)[Ô])
i = 0
While Not ComboCarregaBanco.EOF
Me.ComboBanco.List(i) = ComboCarregaBanco.Fields([Ô]nomebanco[Ô]).Value
Me.ComboBanco.ItemData(i) = ComboCarregaBanco.Fields([Ô]codigo[Ô]).Value
i = i + 1
ComboCarregaBanco.MoveNext
Wend
ComboCarregaBanco.CloseRecordset
Set ComboCarregaBanco = Nothing

JABA 19/08/2009 17:53:40
#320329
Não é bem isso pessoal, estou querendo colocar os dados na combo passando a fonte de dados de uma forma direta, tipo: combo.DataSource = rs.DataSource, pois depois é só apontar o nome do campo que se quer exibir do banco no DataField da Combo, que ficaria assim : combo.DataField = [Ô]Nome[Ô]. Desta Forma que estou fazendo até funciona, só que eu esperava que a combo viesse com todos os dados(Nomes que estao no banco) só que esta sendo preenchida com apenas um unico dado(Só esta aparecendo um valor na combo sendo que existe mais dados na fonte de dados que eu passei pra ela).

Mesmo assim agradeço pela intenção.Vlw
ROBIU 21/08/2009 08:53:43
#320509
O que você está pedindo não é possível fazer com a combo padão do Vb6. Sempre usamos o código acima para preencher a combo. Você está tentando fazer algo semelhante a combo do Access. Para obter esse efeito, devemos criar uma ocx com essa finalidade. Veja que o código que postei obtem o mesmo resultado, mas tem que ser via código. Note que estou colocando três campos no combo.

ALEMAO 21/08/2009 11:46:03
#320544
Bom dia JABA!

Utiliza em teu o projeto o DataCombo!

Dai define nas propriedades do DATACOMBO:

BoundColumm =>Campo com o CODIGO
ListField =>Campo com o NOME

Depois alimenta assim:

Set DATACOMBO.RowSource = Nome do seu RECORDSET

Dessa maneira vai aparecer o código no DATACOMBO.BoundText e o nome no DATACOMBO.Text

Abraço
JABA 21/08/2009 13:29:34
#320560
Alemao, é exatamente isto que estou querendo, onde que encontro este componente? vlw
ALEMAO 21/08/2009 14:01:53
#320572
Jaba, qual a versão do VB estas usando?

Aqui eu tenho VB6 com SP5 e SP6 + 2 pacotes de expansão... só que eu não sei em qual deles é que esta o DataCombo... vou tentar descobrir e entro em contato...
ALEMAO 21/08/2009 14:50:21
#320591
Resposta escolhida
Achei... o nome da OCX é: MsDatlst.ocx

Vai em Project, depois Components (ou aperta Control + T) depois na aba CONTROLS, tu procura por:

Microsoft DataList Controls 6.0 (SP3) (OLEDB)

Vale lembrar que eu uso ADO, VB6... e não sei se esse componente existe na versão que tens ai... da uma conferida e qualquer coisa prende o grito!

Abraço
JABA 21/08/2009 17:18:52
#320620
valeu Alemao, encontrei o componente, muito obrigado pelas ajudas ae de vcs, um forte abraço a todos.
Tópico encerrado , respostas não são mais permitidas