Jump to content

[VB6] ComboBox com dados da BD


_Rest_

Recommended Posts

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

Link to comment
Share on other 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.)

Lema: Se eu não saber de alguma coisa não se preocupem porque tento sempre ajudar alguma coisita, nem que seja, por palpites/sugestões.

Link to comment
Share on other 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
Link to comment
Share on other 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

Lema: Se eu não saber de alguma coisa não se preocupem porque tento sempre ajudar alguma coisita, nem que seja, por palpites/sugestões.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.