Código para mostrá datos en un comboxbox

Necesito un código que me permita llenar un combo box con los datos de una base de datos del campo nombre de la tabala empleados.. Que el combo se autocomplete cuando coloque una letra dentro del combo mostrando todas las coincidencias

1 respuesta

Respuesta
1
La manera de agregar datos en un combobox es la siguiente:
Obtención de datos (esta es una rutina que solía usar para cargar los datos de usuario de un base de datos)
Public Sub load_us()
    Dim connectingString As String
    Dim dlconn           As New DataLayer
    Dim SQLQuery         As String
    Dim rsInput          As ADODB.Recordset
    Dim blsuccess        As Boolean
    'users
    SQLQuery = "SELECT [Name] FROM basededatos.dbo.empleados ORDER BY [Name]"
    blsuccess = dlconn.getRecordset("..Aquí va tu conexion a la base de datos...", SQLQuery, rsInput)
    If blsuccess Then
        If rsInput.RecordCount > 0 Then
            Me.Cmbuser.AddItem "Seleccione el empleado..."
            While Not rsInput.EOF
                Me.Cmbuser.AddItem rsInput("Name")
                Me.Cmbuser.ListIndex = 0
                rsInput.MoveNext
            Wend
        End If
        Set dlconn = Nothing
    Else
        Dim aux As String
        aux = "Error al cargar la lisa de empleados, consulte con el administrador" & vbCrLf
        aux = aux & "La aplicación se cerrará de manera automática."
        MsgBox aux, vbCritical, Leyenda
        End
    End If
End Sub
Hola tengo una aplicación que se ejecuat normal
tengo 15 texbox que contienen los datso de los empleados, ya se anombre, dni etc de cada empleado y botonones que van al primer, siguiente anterior y ulktimo registro, agrega nuevo, edita cancela e imprime los datos hasta ahí todo bien .. el problema es que no se como agregar un combobox y que se carguen en el los datos del campo nombre de ñla tabla empleados en el ... ademas que se autocomplete cuando coloque parte del nombre del empleado y cuando seeleccione uno de los empleados del combo y al hacer clic en un command "buscar" que me arrojen los datos de este empleado en los texbox .. y que no tenga problemas en que al hacer clic en los botone sde navegación ya se primero, siguiente, anterior o ultimo pasen a los registros correspondientes.. peste es mi código que me funciona correctamente no quiero que cambies nada solo que ue agregues el código del combo que me hace falat y del command "buscar"
Option Explicit
Dim cn As Connection
Dim rst As Recordset
' Primer registro, siguiente, etc...
Private Sub cmdNav_Click(Index As Integer)
Dim iaños As Integer
    ' Si hay registro activo sale
    If rst.BOF And rst.EOF Then Exit Sub
    Select Case Index
        Case 0
            rst.MoveFirst
            If txt_field(13).Text <> "" Then
            iaños = CalculaEdad(txt_field(13).Text)
            txt_field(16).Text = "Tiene " & iaños & " años."
            rst.Update
            Else
            txt_field(16).Text = ""
            End If
        Case 1
            rst.MovePrevious
            If rst.BOF Then rst.MoveFirst
               If txt_field(13).Text <> "" Then
            iaños = CalculaEdad(txt_field(13).Text)
            txt_field(16).Text = "Tiene " & iaños & " años."
            rst.Update
            Else
            txt_field(16).Text = ""
            End If
        Case 2
            rst.MoveNext
           If rst.EOF Then rst.MoveLast
           If txt_field(13).Text <> "" Then
            iaños = CalculaEdad(txt_field(13).Text)
            txt_field(16).Text = "Tiene " & iaños & " años."
            rst.Update
            Else
            txt_field(16).Text = ""
            End If
       Case 3
            rst.MoveLast
          If txt_field(13).Text <> "" Then
            iaños = CalculaEdad(txt_field(13).Text)
            txt_field(16).Text = "Tiene " & iaños & " años."
            rst.Update
            Else
            txt_field(16).Text = ""
            End If
    End Select
    ' Carga la imagen en el Picture
    Call Mostrar_Imagen
End Sub
Private Sub Command1_Click(Index As Integer)
    Select Case Index
        'Agrega un nuevo registro
        Case 0
            rst.AddNew
            Picture1.Cls
            'Elimina el registro activo
            CmdNuevo
        Case 1
            If rst.EOF Or rst.BOF Then Exit Sub
            If MsgBox("Eliminar Registro", vbQuestion + vbYesNo) = vbNo Then Exit Sub
            Picture1.Cls
            'Elimina el archivo de la carpeta de imágenes
            If rst(Field_Img) <> "" Then
                Call Kill(Carpeta_IMG & rst(Field_Img))
            End If
            rst.Delete
            If rst.RecordCount > 0 Then
               cmdNormal
            Else
               cmdSinRegistros
            End If
            If rst.EOF Or rst.BOF Then
                Exit Sub
            End If
            rst.MoveNext
            If rst.EOF Then
               On Error Resume Next
               rst.MoveLast
            End If
            'Carga la imagen del registro activo
            Mostrar_Imagen
            Exit Sub
        ' Botón Actualizar los cambios en la base de datos
        Case 2
            If Not rst.EOF And Not rst.BOF Then
                rst.Update
                Guardar_Imagen
                cmdNormal
            End If
        ' Cancela la atualización o edición del registro que se editando o añadiendo
        Case 3
             cmdEditar
            Setear_TextBox
            Exit Sub
        'Botón Editar el registro activo
        Case 4
            If rst.EOF And rst.BOF Then Exit Sub
            rst.CancelUpdate
            If Not rst.BOF And Not rst.EOF Then
                If rst(Field_Img) <> "" Then
                    Call Dibujar_Imagen(Picture1, Carpeta_IMG & rst(Field_Img))
                End If
            End If
            If rst.RecordCount > 0 Then
                cmdNormal
            Else
                cmdSinRegistros
            End If
        'Carga una imagen en el control Picture1
        Case 5
            With CommonDialog1
                .DialogTitle = " Seleccionar imagen"
                .Filter = "BMP|*.bmp|JPEG|*.jpeg|GIF|*.gif|JPG|*.jpg|Todos|*.*"
                .ShowOpen
                If .FileName = "" Then
                    Exit Sub
                Else
                    ' Graba el nombre en el campo, el id de imagen _
                    Que es el mismo que el campo Id
                    rst(Field_Img) = rst!ID '
                    ' Se dibuja la imagen en el Picture
                    Call Dibujar_Imagen(Picture1, .FileName)
                End If
            End With
            Exit Sub
        Case 6
            ' Limpia la imagen del Picture y Elimina el id de _
            imagen del registro actual de la base
            If MsgBox("Desea eliminar la imagen ?", vbYesNo + vbQuestion) = vbYes Then
               Picture1.Cls
               rst(Field_Img) = ""
               Exit Sub
            End If
    End Select
    Setear_TextBox
    ' Muestra la imagen
    Mostrar_Imagen
End Sub
Sub Guardar_Imagen()
    ' Si el campo Id_Imagen no está vacio ...
    If rst(Field_Img) <> "" And CommonDialog1.FileName <> "" Then
        ' Copia el archivo a la carpeta de imagen
        Call FileCopy(CommonDialog1.FileName, _
                      Carpeta_IMG & "\" & rst!ID)
        '... si no, si el archivo está en lacarpeta lo  elimina
    ElseIf Dir(Carpeta_IMG & "\" & rst!ID) <> "" And rst(Field_Img) = "" Then
       Call Kill(Carpeta_IMG & rst!ID)
    End If
End Sub
Private Sub Mostrar_Imagen()
    With rst
        ' Si no hay ningún registro activo sale
        If .EOF Or .BOF Then
            Exit Sub
        End If
        ' Si el registro no tiene una imagen asociada Limpia el Picture
        If .Fields(Field_Img) = "" Or .Fields(Field_Img) = 0 Then
           Picture1.Cls
        Else
           ' Lee el archivo de imagen y lo dibuja en el Picture
            Call Dibujar_Imagen(Picture1, Carpeta_IMG & .Fields(Field_Img))
        End If
        'Me.Caption = "Registro N°: " & CStr(.AbsolutePosition)
    End With
End Sub
Private Sub Setear_TextBox()
    'Bloquea y desbloquea los textbox
    Dim T As TextBox
    For Each T In Me.txt_field
        T.Locked = Not T.Locked
    Next
End Sub
' Habilita y deshabilita los CommandButton
Private Sub Setear_botones()
    Dim i As Integer
    For i = 0 To Command1.Count - 1
        Command1(i).Enabled = Not Command1(i).Enabled
    Next
    For i = 0 To cmdnav.Count - 1
        cmdnav(i).Enabled = Not cmdnav(i).Enabled
    Next
End Sub
Private Sub Imprimir()
Dim rsficha As ADODB.Recordset
    Set rsficha = New Recordset
    rsficha.Open "Select * FROM empleados Where Id =" & lblid.Caption, cn, adOpenStatic, adLockReadOnly
    If rsficha.RecordCount > 0 Then
       Set DataReport1.DataSource = rsficha
       With DataReport1
            If rsficha!id_Imagen <> "" Then
                .Sections.Item("Sección1").Controls("lblSinFoto").Visible = False
                Set .Sections.Item("Sección1").Controls("rptImagen").Picture = Picture1.Image
            Else
                .Sections.Item("Sección1").Controls("lblSinFoto").Visible = True
            End If
            DataReport1.Show
        End With
    Else
       MsgBox "No hay registro para imprimir ", vbInformation
    End If
End Sub
Private Sub Command2_Click()
    Call Imprimir
End Sub
Private Sub Command3_Click()
Form4.Show
Form5.Hide
Unload Me
End Sub
Private Sub Form_Unload(Cancel As Integer)
    On Error Resume Next
    If Not rst Is Nothing Then
        If rst.State = adStateOpen Then rst.Close
        Set rst = Nothing
    End If
    If Not cn Is Nothing Then
        If cn.State = adStateOpen Then cn.Close
        Set cn = Nothing
    End If
End Sub
Private Sub Form_Load()
    Dim Pathbd As String, cadena As String
    Dim T As TextBox
    Set cn = New Connection
    Pathbd = App.Path & "\data.mdb"
    cadena = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Pathbd & _
                                     ";Persist Security Info=False"
    cn.Open cadena
    Set rst = New Recordset
    rst.Open "Select * FROM empleados Order by NOMBRE", cn, adOpenStatic, adLockOptimistic
    ' Nombre del campo  que tiene el ID de imagen
    Field_Img = "ID_Imagen"
    ' Path de la carpeta donde están las imagenes
    Carpeta_IMG = App.Path & "\imgemp\"
    ' Si no existe la carpeta para guardar las imagen la crea
    If Dir(App.Path & "\imgemp", vbDirectory) = "" Then
        MkDir App.Path & "\imgemp"
    End If
    If rst.RecordCount > 0 Then
        Call cmdNormal
    Else
        Call cmdSinRegistros
    End If
    Set txt_field(0).DataSource = rst
    Set txt_field(1).DataSource = rst
    Set txt_field(2).DataSource = rst
    Set txt_field(3).DataSource = rst
    Set txt_field(4).DataSource = rst
    Set txt_field(5).DataSource = rst
    Set txt_field(6).DataSource = rst
    Set txt_field(7).DataSource = rst
    Set txt_field(8).DataSource = rst
    Set txt_field(9).DataSource = rst
    Set txt_field(10).DataSource = rst
    Set txt_field(11).DataSource = rst
    Set txt_field(12).DataSource = rst
    Set txt_field(13).DataSource = rst
    Set txt_field(14).DataSource = rst
    Set txt_field(15).DataSource = rst
    Set txt_field(16).DataSource = rst
    Set txt_field(17).DataSource = rst
    txt_field(0).DataField = "Nombre"
    txt_field(1).DataField = "dni"
    txt_field(2).DataField = "ruc"
    txt_field(3).DataField = "domicilio"
    txt_field(4).DataField = "cargo"
    txt_field(5).DataField = "e-mail"
    txt_field(6).DataField = "celular"
    txt_field(7).DataField = "fijo"
    txt_field(8).DataField = "est_sup"
    txt_field(9).DataField = "fech_ing"
    txt_field(10).DataField = "fech_ret"
    txt_field(11).DataField = "tipo de afiliacion"
    txt_field(12).DataField = "est_civ"
    txt_field(13).DataField = "fech_nac"
    txt_field(14).DataField = "est_pri"
    txt_field(15).DataField = "est_sec"
    txt_field(16).DataField = "edad"
    txt_field(17).DataField = ""
      'Opcional: esto visualiza el Id del registro en un label
    Set lblid.DataSource = rst
    lblid.DataField = "Id"
    Call Setear_TextBox
   Mostrar_Imagen
   While Not rst.EOF
Combo1.AddItem rst.Fields("nombre").Value
rst.MoveNext
Wend
End Sub
Sub cmdNormal()
    DeshabilitarTodosCmd
    Command1(0).Enabled = True
    Command1(1).Enabled = True
    Command1(3).Enabled = True
End Sub
Sub cmdSinRegistros()
    DeshabilitarTodosCmd
    Command1(0).Enabled = True
End Sub
Sub cmdEditar()
    DeshabilitarTodosCmd
    Command1(2).Enabled = True
    Command1(4).Enabled = True
    Command1(5).Enabled = True
    Command1(6).Enabled = True
End Sub
Sub CmdNuevo()
    DeshabilitarTodosCmd
    Command1(2).Enabled = True
    Command1(4).Enabled = True
    Command1(5).Enabled = True
    Command1(6).Enabled = True
End Sub
Sub DeshabilitarTodosCmd()
    Command1(0).Enabled = False
    Command1(1).Enabled = False
    Command1(2).Enabled = False
    Command1(3).Enabled = False
    Command1(4).Enabled = False
    Command1(5).Enabled = False
    Command1(6).Enabled = False
End Sub
Private Sub mnuImprimir_Click()
    Call Imprimir
End Sub
Private Sub mnuVerTodo_Click()
    With Form2
         Set .MSHFlexGrid1.DataSource = rst
        .Show vbModal
    End With
End Sub
Al momento no dispongo de una pc con VB6 instalado pero espero que esto te pueda ser de ayuda
1. Agrega o modifica en el método Load_Form lo siguiente:
'--------
' Veo que tienes ya un código para llenar el combobox
'--------
   Do While Not rst.EOF 
     Combo1.AddItem rst.Fields("nombre").Value 
     rst.MoveNext 
   Loop
'------------
2. Agrega este método:
'------ Código Agregado
Private Sub SearchByName()
' aqui recorres tu recordset en función del texto que tiene en el combo1
dim i as integer
for i =0 to rst.recordcount
if  rst.Fields("nombre").Value=Combo1.text then
' aqui agrega a cada objeto los valores de cada campo de tu recordset.
end if
next
End Sub
'----------------------------------
3. Agrega un botón por ej. BtnSearch y en el evento click llama al método
buscar: Call SearchByName
4. Para que se autocomplete automáticamente debes seleccionar la propiedad
combo box styles en "Drop Down List"
Hola jose .. no me funciono el código .. seria mucho pedirte que lo pruebes en visual 6.0 lo necesito brother para el fin de semana .. necesito entregar este trabajo .. es mi nota si no me van a jalar .. todo el código me funciona perfecto. Solo quiero buscar nada más gracias de antemano ..
Ok,
Envíame por favor tu proyecto al mail, para probarlo en VB6 esta noche.
Hola jose muchas gracias .. pero dime cuale es tu correo.. el proyecto te lo envío mañana por ahora he salido de viahe urgente .. ok gracias
Claro,
este es mi mail es: [email protected]
Saludos,
JM
Te envié por correo el link para que puedas descargar la solución que necesitas.
Saludos,
JM

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas