Realizar una búsqueda en tres tablas independientes

Tengo tres tablas independientes con sus respectivos formularios tCliente, tProveedor y tObra. He hecho tres consultas sobre las tablas anteriores en las que incluyo dos campos ID y Nombre; y añado un campo calculado para diferenciar las tablas que me añade à la consulta Clientes una "C", Proveedores una "P" y a Obras una "O".

Realizo una consulta de Union, que sirve de base para realizar una búsqueda sobre las tres tablas, el resultado se refleja en un cuadro de lista. Me gustaría que al elegir un elemento en este cuadro de lista, se abriera el formulario asociado a ese elemento: forCliente, forProveedor o forObra.

Me encuentro con ID repetidos, he pensado diferenciarlos añadiendo un campo calculado que una las letras y los ID.  (C1, P1;O1,C2,...)

Igual, me estoy complicando demasiado.

1 Respuesta

Respuesta
1

He preparado este ejemplo para hacer la búsqueda desde un cuadro combinado o desde un cuadro de lista.

TABLAS

FORMULARIO PARA BUSCAR

CODIGO DEL FORMULARIO

Código del evento Al abrir

Private Sub Form_Open(Cancel As Integer)
 Dim strSQL
 strSQL = "SELECT id,Nombre,'C' AS AUX FROM tCliente  UNION(SELECT id,Nombre,'P' AS AUX FROM tProveedor )" & vbCrLf
 strSQL = strSQL & "UNION (SELECT id,Nombre,'O' AS AUX FROM tObra );"
 Me.cboBuscar.RowSource = strSQL
 Me.lstBuscar.RowSource = strSQL
End Sub

Código del evento Después de Actualizar del cuadro combinado cboBuscar

Private Sub cboBuscar_Click()
   If Me.cboBuscar.Column(2) = "C" Then
     DoCmd.OpenForm "forCliente", , , "id=" & Me.cboBuscar
   ElseIf Me.cboBuscar.Column(2) = "O" Then
     DoCmd.OpenForm "forObra", , , "id=" & Me.cboBuscar
   Else
    DoCmd.OpenForm "forProveedor", , , "id=" & Me.cboBuscar
   End If
End Sub

Código del evento Al hacer clic del cuadro de lista lstBuscar

Private Sub lstBuscar_Click()
   If Me.lstBuscar.Column(2) = "C" Then
     DoCmd.OpenForm "forCliente", , , "id=" & Me.lstBuscar
   ElseIf Me.lstBuscar.Column(2) = "O" Then
     DoCmd.OpenForm "forObra", , , "id=" & Me.lstBuscar
   Else
    DoCmd.OpenForm "forProveedor", , , "id=" & Me.lstBuscar
   End If
End Sub

Solo le muestro los resultados del cuadro de lista.

RESULTADO DE LAS BUSQUEDAS CON BASE EN EL CUADRO DE LISTA

Observe que he seleccionado la fila del id=2, nombre= MARIO y la columna AUX="C". Al hacer clic obtengo el formulario forCliente con la información del id=2 y Nombre=MARIO

Las siguientes imágenes siguen la misma idea.

Si quiere el ejemplo lo puede solicitar a [email protected], favor en el asunto anotar la consulta.

Se complica menos si llena el cuadro de lista con base en la tabla, algo como:

CODIGO

Hola Eduardo

He aplicado a mi BD la solución Buscar1 y me ha funcionado perfectamente, y es lo que necesitaba, Te agradezco el envío de la versión Buscar2, me doy cuenta que es más simple, pero no se adapta a mis necesidades, aunque tomo nota, para posibles aplicaciones.

¡¡¡ Muchas Gracias !!! 

Anjel

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas