Como elegir un campo en una consulta para que ordene por él.

Estoy gestionando una base de datos de una Asociación y quiero empezar a "jugar" con los datos que tenemos.

Cada vez que quiero hacerlo, creo una consulta sobre lo que en ese momento necesito, p.ej. Todos los residentes en Cuenca. Con una consulta y un criterio asociado al campo en concreto solo necesito de una consulta para ese campo, eligiendo en el criterio la provincia que quiera ver.

Pero luego quiero otra consulta para otro campo, y después para otro..., y así podría crear cientos de ellas.

¿Existe forma alguna de tener una sola consulta sobre la tabla general de datos, con uno o varios criterios en cada uno de sus campos, y que al entrar en ella te liste todos sus campos; elijas uno de ellos y te muestre el o o los criterios asociados a ese campo, para poder rellenar uno?

Creo que sería más fácil eso que crear 15 consultas. Lo difícil, me imagino, es generar el código necesario para que funcione esto.

1 respuesta

Respuesta
2

No es muy difícil de hacer, pero sí un poco largo de explicar, por lo que te remito al ejemplo que tiene Neckkito para crear filtros múltiples: http://neckkito.xyz/nck/index.php/ejemplos/13-formularios/77-crear-un-filtro-multiple

Yo en tu caso, lo que haría es:

1º/ Un formulario sobre la tabla, directamente (lo haría sobre una consulta si solo te interesa una parte de los datos)

2º/ En ese formulario, en el encabezado o en el pie le pondría X cuadros combinados que cojan los datos de los distintos campos, por ejemplo, un cuadro combinado para las provincias que liste todas las provincias de tu tabla (sin repetirlas, claro), otro combinado para el sexo, otro para la nacionalidad...

3º/ Siguiendo el ejemplo indicado, construyes el filtro múltiple, de tal forma que si seleccionas Cuenca, te muestre todos los registros de Cuenca, pero si seleccionas Cuenca, Mujer, Australiana, te liste las mujeres australianas que viven en Cuenca...

Lo que tu planteas tampoco es complicado de hacer. Necesitas:

1º/ Un cuadro combinado (lo llamaré cboCampo) en el que escojas como tipo de origen de la fila "Lista de campos" y en origen de la fila, el nombre de la tabla/consulta que vas a usar (la misma sobre la que hagas el formulario)

2º/ Un segundo cuadro combinado (cboValor) en el que en el evento "al entrar" o "al recibir el enfoque" le pongas este código:

If Isnull(me.cboCampo) then
  Msgbox "Tienes que seleccionar un campo primero",vbCritical,"ERROR"
  Me.cboCampo.SetFocus
  Exit Sub
End If
Me.cboValor.RowSource="SELECT DISTINCT [" & Me.cboValor & "] FROM TuTabla/Consulta  ORDER BY [" & Me.cboValor & "]"
Me. CboValor. Requery

3º/ Un botón para filtrar con este código (lo podrías hacer también en el evento "después de actualizar del segundo combinado):

If IsNumeric(Me.cboValor) Then
   Me.Filter= "[" & Me.cboCampo & "]=" & Me.cboValor
ElseIf IsDate (me.cboValor) Then
   Me.Filter= "[" & Me.cboCampo & "]=#" & Me.cboValor & "#"
Else
   Me.Filter= "[" & Me.cboCampo & "]='" & Me.cboValor & "'"
End If
Me.FilterOn=True

4º/ Un botón para volver a ver todos los registros:

Me.FilterOn=False

Lógicamente, con este sistema solo podrás filtrar por una condición, la que resulte de la combinación Campo-Valor  elegida en los combos. Por eso veo más práctico el primer sistema. Pero para gustos, colores.

Te he preparado un ejemplo de la segunda opción para que lo veas: http://www.filebig.net/files/fHPzniLpHG

Por cierto, en el primer código hay una errata, y tendría que ser así:

Me.cboValor.RowSource="SELECT DISTINCT [" & Me.cboCampo & "] FROM TuTabla/Consulta  ORDER BY [" & Me.cboCampo & "]"

Muchísimas gracias.

Lo intentaré hacer de las dos formas, más que nada por ir aprendiendo.

Si tuviera problemas te volvería a molestar.

Gracias de nuevo y un saludo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas