Sacar datos diferentes de un listbox a textbox diferentes y hacer una búsqueda en otro listbox

Nuevamente molestando... Genere un formulario simple donde tengo dos listbox de tabla diferentes e independientes, dos buscadores y textbox independientes. Del primer listado realizo un búsqueda con el primer buscador, me entrega los datos del resultado de la columna 3 al combo "CC_ TRAMO2", pero no puedo hacer que me realice la búsqueda en el segundo listado en forma automática, solo me deja de forma manual actualizando el combo. A su vez lleno un textbox "VTroncal" de la columna4, pero necesito llenar el segundo textbox "VTroncal2" con otro registro de esa búsqueda. Toda la búsqueda en ambas listas es por la columna Tramo. Este es mi registro;

Option Compare Database
Private Sub CC_Tramo_AfterUpdate()
On Error Resume Next
Dim SQL As String
        SQL = "SELECT * FROM Tabla_PTRuta5Sur"
        SQL = SQL & " WHERE Tramo Like '*" & Me.CC_Tramo.Text & "*'"
        Me.Lista0.RowSource = SQL
        Me.CC_Tramo.SetFocus
        Me.CC_Tramo.SelStart = 100
End Sub
Private Sub CC_Tramo2_AfterUpdate()
On Error Resume Next
Dim SQL As String
        SQL = "SELECT * FROM Tabla_PLRuta5Sur"
        SQL = SQL & " WHERE Troncal Like '*" & Me.CC_Tramo2.Text & "*'"
        Me.Lista1.RowSource = SQL
        Me.CC_Tramo2.SetFocus
        Me.CC_Tramo2.SelStart = 100
End Sub
Private Sub Comando12_Click()
Me.CC_Tramo = ""
Me.CC_Tramo2 = ""
On Error Resume Next
Dim SQL As String
Dim SQL2 As String
        SQL = "SELECT * FROM Tabla_PTRuta5Sur"
        SQL = SQL & " WHERE Tramo Like '*" & Me.CC_Tramo.Text & "*'"
        Me.Lista0.RowSource = SQL
        Me.CC_Tramo.SetFocus
        Me.CC_Tramo.SelStart = 100
        SQL2 = "SELECT * FROM Tabla_PLRuta5Sur"
        SQL2 = SQL & " WHERE Troncal Like '*" & Me.CC_Tramo2.Text & "*'"
        Me.Lista1.RowSource = SQL2
        Me.CC_Tramo2.SetFocus
        Me.CC_Tramo2.SelStart = 100
Dim miOrigen As String
    miOrigen = "SELECT Tabla_PLRuta5Sur.Troncal FROM Tabla_PLRuta5Sur" & " ORDER BY Tabla_PLRuta5Sur.Troncal"
    Me.Lista1.RowSource = miOrigen
End Sub
Private Sub Form_Load()
Me.CC_Tramo = ""
Me.CC_Tramo2 = ""
Me.VTroncal = ""
Me.VTroncal2 = ""
On Error Resume Next
Dim SQL As String
        SQL = "SELECT * FROM Tabla_PTRuta5Sur"
        SQL = SQL & " WHERE Tramo Like '*" & Me.CC_Tramo.Text & "*'"
        Me.Lista0.RowSource = SQL
        Me.CC_Tramo.SetFocus
        Me.CC_Tramo.SelStart = 100
Dim miOrigen As String
    miOrigen = "SELECT Tabla_PLRuta5Sur.Troncal FROM Tabla_PLRuta5Sur" & " ORDER BY Tabla_PLRuta5Sur.Troncal"
    Me.Lista1.RowSource = miOrigen
End Sub
Private Sub Lista0_Click()
Me.CC_Tramo2 = Lista0.Column(3)
Me.VTroncal = Lista0.Column(4)
End Sub

No puedo subir una imagen para mostrar lo que quiero, el sistema no me deja.

Respuesta
1

En principio el error que llama la atención es que se esta utilizando la opción 'TEXT' en la creación de las SQLs y dado que esta propiedad solo esta disponible para el objeto que tiene el foco (el objeto activo), en 'Comando12_click' darán error.

Se tendría que modificar  (en 'Comando12_click') Me.CC_Tramo.Text ===>>> Me.CC_Tramo e igualmente para Me.CC_Tramo2.

Personalmente verificaría con antelación que AMBOS objetos (CC_Tramo y CC_Tramo2) tienen seleccionado uno de sus items para evitar que el valor devuelto no sea un NULL.


                    

1 respuesta más de otro experto

Respuesta
1

Para solucionar los problemas mencionados y lograr la actualización automática de ambos listbox y los textbox asociados, necesita realizar algunos ajustes en tu código. A continuación, te detallo los cambios y explico cómo integrarlos:

Problemas identificados:

  1. Actualización automática del segundo listbox (Lista1): No se actualiza automáticamente al seleccionar un elemento en el primer listbox (Lista0).
  2. Llenado de VTroncal2 con otro registro: Requiere seleccionar y procesar datos de otro registro relacionado con la búsqueda.
Option Compare Database
' Evento para actualizar Lista0 según búsqueda en CC_Tramo
Private Sub CC_Tramo_AfterUpdate()
    On Error Resume Next
    Dim SQL As String
    SQL = "SELECT * FROM Tabla_PTRuta5Sur WHERE Tramo Like '*" & Me.CC_Tramo.Text & "*'"
    Me.Lista0.RowSource = SQL
    Me.CC_Tramo.SetFocus
    Me.CC_Tramo.SelStart = Len(Me.CC_Tramo.Text)
End Sub
' Evento para actualizar Lista1 según búsqueda en CC_Tramo2
Private Sub CC_Tramo2_AfterUpdate()
    On Error Resume Next
    Dim SQL As String
    SQL = "SELECT * FROM Tabla_PLRuta5Sur WHERE Troncal Like '*" & Me.CC_Tramo2.Text & "*'"
    Me.Lista1.RowSource = SQL
    Me.CC_Tramo2.SetFocus
    Me.CC_Tramo2.SelStart = Len(Me.CC_Tramo2.Text)
End Sub
' Evento para limpiar controles y resetear los listboxes
Private Sub Comando12_Click()
    Me.CC_Tramo = ""
    Me.CC_Tramo2 = ""
    Me.VTroncal = ""
    Me.VTroncal2 = ""
    On Error Resume Next
    Dim SQL As String
    SQL = "SELECT * FROM Tabla_PTRuta5Sur"
    Me.Lista0.RowSource = SQL
    Dim miOrigen As String
    miOrigen = "SELECT Troncal FROM Tabla_PLRuta5Sur ORDER BY Troncal"
    Me.Lista1.RowSource = miOrigen
End Sub
' Evento de carga del formulario para inicializar controles
Private Sub Form_Load()
    Me.CC_Tramo = ""
    Me.CC_Tramo2 = ""
    Me.VTroncal = ""
    Me.VTroncal2 = ""
    On Error Resume Next
    Dim SQL As String
    SQL = "SELECT * FROM Tabla_PTRuta5Sur"
    Me.Lista0.RowSource = SQL
    Dim miOrigen As String
    miOrigen = "SELECT Troncal FROM Tabla_PLRuta5Sur ORDER BY Troncal"
    Me.Lista1.RowSource = miOrigen
End Sub
' Evento al seleccionar un elemento en Lista0
Private Sub Lista0_Click()
    On Error Resume Next
    ' Llenar CC_Tramo2 con la columna 3 del registro seleccionado
    Me.CC_Tramo2 = Me.Lista0.Column(3)
    ' Llenar VTroncal con la columna 4 del registro seleccionado
    Me.VTroncal = Me.Lista0.Column(4)
    ' Actualizar automáticamente Lista1 y VTroncal2
    Dim SQL As String
    SQL = "SELECT * FROM Tabla_PLRuta5Sur WHERE Troncal Like '*" & Me.CC_Tramo2 & "*'"
    Me.Lista1.RowSource = SQL
    ' Llenar VTroncal2 con la columna 4 del primer registro en Lista1
    If Me.Lista1.ListCount > 0 Then
        Me.VTroncal2 = Me.Lista1.Column(4, 0) ' Primera fila, columna 4
    Else
        Me.VTroncal2 = "" ' Vaciar si no hay registros
    End If
End Sub

Explicación de los cambios:

  1. Eventos CC_Tramo_AfterUpdate y CC_Tramo2_AfterUpdate:

    • Actualizan los listboxes Lista0 y Lista1 al realizar una búsqueda en sus respectivos campos.
  2. Evento Lista0_Click:

    • Llenan los campos CC_Tramo2 y VTroncal automáticamente al seleccionar un registro en Lista0.
    • Ejecutan una consulta SQL para actualizar Lista1 con los datos relacionados.
    • Llenan el textbox VTroncal2 con el valor de la primera fila de Lista1.
  3. Evento Form_Load:

    • Inicializa todos los controles y configura las consultas predeterminadas.
  4. Botón Comando12:

    • Restablece todos los valores y listboxes.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas