• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

_Rest_

[VB6] ComboBox com dados da BD

5 mensagens neste tópico

Boas!

A minha dúvida é como é k se vai buscar valores a BD (em access) através de uma combobox. Só consegui com uma datacombo mx depois nao consigo gravar.

Este e o comment k ta no código so k nao sabia se dava pa ler:

    'rs!num_cliente = DataCombo1.Text aki dá erro tem k ser com combobox como no rs!estado

    'só se o erro for por a datacombo tar a ir buskar os dados a outra tabela(Cliente - Nome) mas este

    'corresponde a um num_cliente na tabela Chamadas


Dim CONDecsis As ADODB.Connection
Dim rs As ADODB.Recordset


Private Sub Gravar()
    
    rs!case_number = txtcase_number.Text
    rs!num_chamada = txtnum_chamada.Text
    rs!tipo_produto = txttipo_produto.Text
    rs!modelo = txtmodelo.Text
    
    'rs!num_cliente = DataCombo1.Text aki dá erro tem k ser com combobox como no rs!estado
    'só se o erro for por a datacombo tar a ir buskar os dados a outra tabela(Cliente - Nome) mas este
    'corresponde a um num_cliente na tabela Chamadas
    
    rs!serial_number = TxtSerial_number.Text
    rs!observações = txtobservações.Text
    rs!avaria = txtavaria.Text
    rs!estado = Combo1.Text
    rs!localização = txtlocalização.Text
    
End Sub

Private Sub LimparText()

    txtcase_number.Text = ""
    txtnum_chamada.Text = ""
    txttipo_produto.Text = ""
    txtmodelo.Text = ""
    TxtCliente.Text = ""
    TxtSerial_number.Text = ""
    txtobservações.Text = ""
    txtavaria.Text = ""
    txtlocalização.Text = ""
    
End Sub

Private Sub cmdAdicionar_Click()

    Set rs = New ADODB.Recordset
    rs.CursorType = adOpenStatic
    rs.CursorLocation = adUseClient
    rs.LockType = adLockPessimistic
    rs.Source = "SELECT * FROM Chamadas WHERE case_number=" & txtcase_number.Text
    rs.ActiveConnection = CONDecsis
    rs.Open
    
    If rs.RecordCount = 0 Then
    
    rs.AddNew
    Call Gravar

    rs.Update
    Call LimparText
        
    Else
       MsgBox "Case Number ja existente", vbCritical, "Failure"
    End If

End Sub
Private Sub Form_Load()

Set CONDecsis = New ADODB.Connection
CONDecsis.ConnectionString = "Provider=Microsoft.jet.oledb.4.0; Data Source=" & App.Path & "\DB\Decsis.mdb"
CONDecsis.Open
CONDecsis.CursorLocation = adUseClient

End Sub


Private Sub txtcase_number_KeyPress(KeyAscii As Integer)

      If KeyAscii < 49 Or KeyAscii > 57 Then
    If KeyAscii <> 8 Then KeyAscii = 0
    End If
    If KeyAscii = 13 Then
        SendKeys "{TAB}"
    End If
End Sub

Private Sub txtnum_chamada_KeyPress(KeyAscii As Integer)
    
    If KeyAscii < 49 Or KeyAscii > 57 Then
    If KeyAscii <> 8 Then KeyAscii = 0
    End If
    If KeyAscii = 13 Then
        SendKeys "{TAB}"
    End If
End Sub

Private Sub txttipo_produto_KeyPress(KeyAscii As Integer)
    
    If KeyAscii = 13 Then
        SendKeys "{TAB}"
    End If
End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para isso que queres é bastante fácil de fazer por ex:

Private sub Combo1_click()

    rs.close (fechas o recordset anterior)

    rs.open (nome da tabela que queres)

    e depois vais adicionando

    while contador<>rs.recordcount

            combo1.add rs.field("o nome do campo que queres")

            rs.recordnext

            contador=contador+1

    wend

Basicamente é isto agora apartir desta ideia fazes tu próprio (Nota pús este código aqui sem o testar pode ter alguma falha mas não vai fugir muito disto.)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado! Meti assim

Private Sub Form_Load()

Set CONDecsis = New ADODB.Connection
CONDecsis.ConnectionString = "Provider=Microsoft.jet.oledb.4.0; Data Source=" & App.Path & "\DB\Decsis.mdb"
CONDecsis.Open
CONDecsis.CursorLocation = adUseClient

    Set rs = New ADODB.Recordset
    rs.CursorType = adOpenStatic
    rs.CursorLocation = adUseClient
    rs.LockType = adLockPessimistic
    rs.Source = "SELECT * FROM Clientes"
    rs.ActiveConnection = CONDecsis
    rs.Open
    
   
    While contador <> rs.RecordCount
            Combo2.AddItem rs!Nome
            rs.MoveNext
            contador = contador + 1
    Wend
    
     contador = 0
     rs.close
     
End Sub

Mas continuo com o mesmo problema da datacombo. Eu não consigo gravar pk o valor da combo é o nome do cliente e não o num_cliente.

Sem mostrar a BD e dificil explicar mx não sei como se posta fotos.

Private Sub Gravar()
    
    rs!case_number = txtcase_number.Text
    rs!num_chamada = txtnum_chamada.Text
    rs!tipo_produto = txttipo_produto.Text
    rs!modelo = txtmodelo.Text
    rs!num_cliente = Combo2.Text
    rs!serial_number = TxtSerial_number.Text
    rs!observações = txtobservações.Text
    rs!avaria = txtavaria.Text
    rs!estado = Combo1.Text
    rs!localização = txtlocalização.Text
    
End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Talvés estejas a tentar gravar dados numa outra tabela que não tenha esses campos.

Ps: é estramamente dificil ajudar-te sem ter um ponto exacto da situação, ou seja esse problema pode advir de vários sitios:

      Pode vir de estar a tentar gravar numa outra tabela completamente diferente.

      Pode ter a ligação desactivada.

      Pode a própria base de dados estar mal feita.

      Pode ser que o vb6 esteja em conflito com a versão da base de dados (do qual duvido).

Só vendo que podesse resolver o problema

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora