¿Cómo hacer una consulta avanzada en Access?

Tengo tres tablas, de las cuales necesito traer los datos de la primer columna de cada tabla concatenados, pero buscar cada dato con los datos de la segunda columna. Necesito encontrar la manera de hacer un tipo formulario y que de ahí se saquen los valores de la búsqueda, que me muestre el nombre de los tres parámetro y como un solo dato el concatenado de los tres códigos... ¿Es posible?.

Respuesta
1

Si puedes envíame la imagen de las tablas o el diseño para entender mejor tu consulta.

Mira tengo las tres tablas

lo resaltado en amarillo debe de salir concatenado es una serie de números y los rojos es con lo que guío la consulta.

Lo que quiero es que la consulta no tenga que cerrarla y ejecutarla para poder obtener los datos; estuve leyendo que se puede vincular a un formulario quisiera que del formulario trajera los datos a buscar y los datos en amarillo sigan saliendo concatenados.

Te aclaro algo, una cosa es concatenar que significa unir el contenido de varios campos, algo como, campo1 & "," & campo2 & "," & campo3 etc., otra cosa es mostrar el contenido de 3 campos o más. Como veo en la figura tu quieres es ejecutar la consulta de tal forma que los criterios los tome de un formulario, esto se puede hacer claro que sí.

En este caso debes crear un formulario que contenga los campos y un botón para ejecutar la consulta, supongamos que el formulario se llame frmConsulta y que uno de los campos del formulario se llame txtMakeName, suprimes los criterios de al cuadricula de consulta y lo reemplazas por, forms! FrmConsulta! TxtMakeName, haces lo mismo para los otros campos.

Supongamos que la consulta se llame qryVerDatos, en este caso en el botón creas un evento Al hacer Clic y agregas lo siguiente:

if not isnull(me.campo1) or not Isnull(campo2) or not Isnull(campo3) then

    DoCmd.OpenQuery "qryVerDatos"

else

  msgbox "Faltan datos para la consulta,vbinformation,"Fatan Datos"

end if

En lugar de abrir la consulta podrías crear un suboformulario con ésta y abrir el formulario desde el botón con:

DoCmd.OopenForm "nombre_subformulario" 

Hay muchas formas para mostrar la información

Se me olvido decirte que así como está la consulta no hay relación entre tablas, esto hará que se generen más registros de lo necesario, por ejemplo si cada tabla tiene 3 registros en la consulta saldrían 9 registros. Y si quieres concatenar adicionas un campo en la cuadricula de la consulta, algo como:

Resultado:[campo1] & "," [campo2] & "," [campo3]

Puedes reemplazar la coma (,) por un espacio u otra cosa

La pregunta es, si pongo dos formularios ¿Puedo concatenar?; como ves en el código estoy concatenando tres datos, que son puros números lo único que quería era saber si podía unir el formulario a la consulta y si puedo hacer que la consulta se guarde en otro lado para que cuando cambie los parámetros no pierda la información de la consulta anterior. Se que es un desastre pero es como hacer una tabla a partir de lo que me arroje la consulta.

Tú lo dices la única forma de guardar la consulta es en una tabla mi pregunta es ¿Para qué guardar el resultado? ¿Luego no podrías volver a consultar? Por eso se llama consulta, algo que se puede realizar las veces que se quiera.

Porque es como hacer una bd de otra bd es mucha información y la idea es que se extraiga la cadena de el concatenado y va a generar diferentes cadenas porque después de esos tres se les tiene que agregar otro ID si tengo la información recopilada ya solo seria cuestión de aumentar el siguiente ID así ya solo me quedaría esa tabla mas otro ID.... esta un poco enredado creo pero es lo que necesito y lo que me haría más fácil trabajar con esto.

Realmente no entiendo bien tu pregunta dejo te colabore otro experto

1 respuesta más de otro experto

Respuesta
2

Ana, antes de nada déjame decirte que efectivamente, si haces una consulta con tablas que no están relacionadas te va a multiplicar el número de registros que muestre. Dicho esto vamos a suponer que las tablas son más o menos así

Si haces la consulta como la imagen tuya(le he quitado la coma entre los campos, luego te explico porqué) te quedará

Te saldrán 24 registros, resultado de 2*3*4

En el formulario que sea puedes poner un combinado Elegir con un cuadro de texto A

Como ya no me deja escribir más continúo en otra respuesta

Si en el formulario, en el combinado eliges un Aces

La instrucción en el evento después de actualizar del combinado Elegir

Le pongo

A = DLookup("makename", "make", "makeid=left(elegir,1)") & ", " & DLookup("modelname", "model", "modelid=mid(elegir,2,1)") & ", " & DLookup("submodelname", "submodel", "submodelid=right(elegir,1)")

Tambien se podría hacer poniendo las columnas como ocultas en el combinado y poner el código como

a=elegir.column(1)&", & elegir.column(2)......

En el caso de que los Id no sean numéricos, por ejemplo, que fueran texto, los podrías poner como M-1, N-1, S-1 pero luego en el código del combinado tendías que partir la cadena en tres trozos. Se puede hacer.

Hola, muchas gracias por responder.

No puedo crear relaciones entre las tablas porque son relaciones de varios a varios, y la búsqueda es al contrario de lo que me muestras en el ejemplo. Lo que intento es que al buscar un datos de cada tabla me arroje el ID que son puros números y que salgan concatenados... siguiendo tu ejemplo si alguien pone en Make Jose, en Model Audi y en Submodel A8 que el resultado que me arroje sea 132 así concatenado. La pregunta es si es posible que al hacer la consulta se pueda guardar el registro o en su defectos si se puede hacer un tipo consulta multiple porque la verdad ya estuve investigando y todo lo que encuentro me manda a un formulario con una consulta pero ninguna me dice como guardar o como hacer que se muestren varios resultados a la vez... se que suena a que quiero que se me resuelva la vida en un clic pero es lo que necesito.

Vamos por partes. Tal como lo planteas en la primera parte, es sencíllísimo. Vamos a suponer que lo quieres en un formulario, que te salga más o menos esto

Te explico el primer combinado, los demás son igual

En el primer combinado, en el origen de la fila le pongo la tabla Make, es decir los campos Makeid y makename. En sus propiedades-formato-número de columnas le pongo 2 y en Ancho de columnas le pongo 0;5(para ocultar el makeid, ya que es más fácil acordarse del nombre que del id) y en sus propiedades-otras-nombre le pongo Make.

Al cuadro de texto le he puesto como nombre Cadena.

En el evento después de actualizar del combinado Submodel le pongo

Cadena = Make & ", " & Model & ", " & Submodel

Porque el valor que "guarda" el combinado es el de su columna dependiente que es la del Id.

En el caso de que quisieras hacerlo con una consulta hazla como la imagen

Cuando vayas a abrir te pregunta por un Make, lo escribes, aceptas, te pregunta por...

Vamos con lo de guardar. Es de suponer que lo querrás guardar en otra tabla. En ese caso, o bien en el formulario pones lo de

Docmd. Runslq(insert into tablaquesea(loquesea, lotro, otrocampo, yotro)values(cadena, make, model, submodel)"

O bien la consulta la conviertes en una de datos anexados.

¡Gracias! 

De verdad que es lo que andaba buscando. Probare con el formulario, la consulta ya la tengo hecha así pero se me hace un poco trabajosa para lo que tengo que hacer.

Muchas gracias.

Saludos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas