Formulario para consultas

He creado una base de datos y necesitaría crear un formulario para ejecutar consultas; es decir, que pueda introducir los criterios de la consulta en el formulario y con un botón de comando pueda ejecutar esa consulta con esos criterios, por ejemplo tengo una tabla con empleados, puesto de trabajo, cantidades producidas y fecha, debo de hacer consultas de esa tabla de diferente empleados, en diferentes fechas y diferentes puestos.
Respuesta
1
Ante todo muchas gracias por la confianza depositada al realizarme esta pregunta.
Bien, voy a intentar ir por pasos para indicarte como realizar lo que quieres. Voy a partir de la premisa de que la tabla EMPLEADOS ya la tienes creada, según tu ejemplo, de la siguiente manera:
Tabla empleados:
Campos / Tipo
Nombre / Texto
Apellidos / Texto
PuestoTrabajo / Integer**
CantidadesProd / Numerico
Fecha / Fecha
**Yo pondria tipo Integer y crearia una tabla, MaestroPuestos, con dos campos (IdPuesto / DescripcionPuesto) con la que relacionaria la de empleados.
En base a todo esto hago el ejemplo:
1º Creas un formulario en el que debes poner 5 objetos tipo texto. Llamalos por ejemplo "TxtNombre, TxtApellidos, TxtCantidadesProd, TxtFechaIni, TxtFechaFin). Puedes darles el formato y/o mascaras que creas oportuno.
2º En ese mismo formulario debes poner también una Lista (llamala LstPuesto), en la que cargaremos todos los puestos de trabajo existentes. Debes modificar las propiedades de esta Lista para que los datos que muestre los coja de la Tabla
MaestroPuestos, mostrando las dos columnas correspondientes a los campos de dichas tablas.
3º Grabamos, de momento ese formulario, SELECCIÓN, y lo cerramos.
4º Creamos un nuevo formulario en el que lo primero que vamos a hacer es definir su origen de datos, indicándole que los datos mostrados los recoja de la tabla EMPLEADOS.
5º Colocamos todos los campos de la tabla EMPLEADOS en este formulario. Para el campo PuestoTrabajo podemos utilizar otra lista como la del ejemplo del formulario anterior.
6º Grabamos y cerramos este formulario, DATOS.
7º Volvemos a editar el formulario SELECCIÓN y ponemos en el un botón. Este botón será el encargado de realizar, por código, las sentencias necesarias y la apertura posterior del formulario DATOS.
8º Codificamos el botón siguiendo, más o menos, el siguiente ejemplo:
Dim SentenciaSQL As String
Dim ClausulaWhere As String
SentenciaSQL = "SELECT * FROM [EMPLEADOS]"
IF TxtNombre <> "" Then ClausulaWhere = "Nombre = " & TxtNombre & " AND "
If TxtApellidos <> "" Then ClausulaWhere = ClausulaWhere & "Apellidos = " & TxtNombre & " AND "
....asi con cada uno de los campos, teniendo en cuenta la casuistica de la lista.....
If ClausulaWhere = "" Then
Msgbox "No ha definido ningun criterio de seleccion"
Exit Sub
Else
SentenciaSql = SentenciaSql & Mid$(ClausulaWhere, 1, Len(ClausulaWhere) - 5)
Endif
Domd. OpenForm "DATOS"
Datos.RecordSource = SentenciaSql
Datos. Refresh
--------
Hay miles de posibilidades de codificación diferente y de diseño de la aplicación variado... Espero que con esto te haya podido dar una idea de cómo podrías hacerlo, sobretodo la sentencia SQL que a lo mejor es lo más complicado de realizar.
De todos modos, una vez veas este mensaje y lo pruebes, si tienes alguna duda concreta no dudes en hacérmela llegar. Siento no poder detallarte más cada uno de los pasos, pero es imposible... A distancia esto es casi lo máximo que puedo hacer y espero que así lo entiendas.
Lo dicho, si tienes alguna duda sobre algo en concreto, házmelo saber y lo solucionaremos lo antes posible.
¿Qué tal Oscar?
He probado lo que me comentas pero cuando hago click en el botón de comando este no hace nada, como tu me comentabas tengo varias tablas relacionadas, una para empleados, otra proyectos, otra turnos y la final de donde quiero sacar los datos, que se llama Partediario en la cual introduzco los datos selccionando de las tablas relacionadas que te menciono más arriba, de la tabla parte diario he confeccionado una consulta y lo único que cambia en el código que tu me das es en la Select, que le digo que la haga de esta consulta que te digo, el formulario DATOS que me comentas que cree recoge los datos de la consulta en vez de la tabla directamente, ya que las relaciones son datos de tipo autonumérico a través de los campos Id.
Ya se que es difícil contestar sin ver la aplicación, por eso te agradezco el tiempo que me dedicas,
Saludos,
Pepe
He leído tu mensaje pero no entiendo eso de que cuando pulsas el btton no hace nada...
Abre al menos el formulario DATOS, no ¿?
Si lo abre (que debería abrirlo fijo) supongo que tu problema estará en que te da un error en la sentencia SQL del "recorsource" o bien recupera unos datos que no son...
En ambos casos el problema está en la cadena de texto que esta haciendo para la sentencia SQL. Pon un "Break Point" (F9) en la linea de código
Datos.RecordSource = SentenciaSql
Ejecuta la aplicación y haz click en el botón. Cuando se pare en el "Break Point" mira el valor de SentenciaSql y pónmelo aquí en un mensaje para ver donde puede estar el error...
De todos modos, intenta explicarme bien y concretamente que es lo que "te esta haciendo mal" la aplicación y que es realmente lo que ocurre cuando pulsas en el botón.
Hola Oscar, una vez más gracias.
Hoy he conseguido abrir el formulario "datos" que tu me indicas, pero cuando hago click en el botón "calcular" se ejecuta el editor de VB y en la línea del recordsource me dice que no se ha definido sub o Function, si borro el recordsource y el refresh es cuando se abre el formulario, pero cuando se abre este en vez de salir los registros que yo selecciono en el form. Selección salen todos pero ordenados por turno, te paso el código que he puesto en el botón "calcular"
Option Compare Database
Private Sub Comando12_Click()
Dim SentenciaSQL As String
Dim clausulawhere As String
SentenciaSQL = "SELECT * FROM [tblparte general]"
If TextFechaIni <> "" Then clausulawhere = "Fecha = " & TextFechaIni & "AND"
If TextFechaFin <> "" Then clausulawhere = "Fecha = " & TextFechaFin & "And"
If CmbTurno <> "" Then clausulawhere = "Turno = " & CmbTurno & "and"
If CmbProyecto <> "" Then clausulawhere = "Proyecto = " & CmbProyecto & "and"
If clausulawhere = "" Then
MsgBox "No ha definido nigún criterio de seleccion"
Exit Sub
Else
SentenciaSQL = SentenciaSQL & Mid$(clausulawhere, 1, Len(clausulawhere) - 5)
stDocName = "frmtblparte general"
DoCmd.OpenForm stDocName
End If
frmtblparte general.RecordSource = SentenciaSQL
frmtblparte general.Refresh
Cuando pongo el punto de break me da el mismo error que te comento más arriba.
Saludos,
Pepe
No tienes porque darme las gracias... Pa eso estamos... je je je
He detectado dos errores en tu código, uno por fallo mio al ponértelo y otro tuyo:
- El mio:
Donde pone
SentenciaSQL = SentenciaSQL & Mid$(clausulawhere, 1, Len(clausulawhere) - 5)
Debe poner
SentenciaSQL = SentenciaSQL & " WHERE " & Mid$(clausulawhere, 1, Len(clausulawhere) - 5)
- El tuyo:
Donde pones
frmtblparte general.RecordSource = SentenciaSQL
frmtblparte general.Refresh
Debes poner (al llevar espacios el nombre del formulario va entre corchetes)
Forms![frmtblparte general].RecordSource = SentenciaSQL
Forms![frmtblparte general].Refresh
(Dando por hecho que el formulario que muestra los datos se llama "frmtblparte general")
Pruébalo, y ya no debería darte errores en código. Como mucho podría pasarte que hubieses construido mal la SentenciaSql y solo con poner un Break Point donde te decía y viendo el valor de esa variable podríamos ver el fallo...
Si lo pruebas y te da algún error o datos incorrectos, intenta sacer el valor de SentenciaSQL y posteamelo junto con los nombres de los campos y tipos de los campos de la tabla donde estas ejecutando la selección.
Un saludo y espero tu respuesta. No olvides donde estoy para cualquier aclaración!
Óscar L.M.V.
Hola Oscar, hice las modificaciones que me recomendaste, pero aun sigue dando un error, cuando ejecuto el botón me da un mensaje que dice "error de sintaxis en la clausula FROM", si depuro el error
en la ventana de código se me queda marcada en amarillo la línea:
Forms![frmtblparte general].RecordSource = SentenciaSQL
Hice lo que me recomendabas del punto de Break pero no me dice ni hace nada, no sé si era el error que te comento más arriba lo que querías saber.
De todas formas cuando ejecuto el botón después de salir el mensaje de error el formulario frmtblparte general se abre mostrando todos los registros sin ejecutar el filtro que hacemos con el formulario selección.
Saludos y buen fin de semana.
Pepe
Se nos está escapando alguna cosilla por ahí que es la que está jodiendo todo el invento...
Lo último que se me ocurre ya es que, si quieres, hagas una copia de la BBDD sin datos (borra todos los datos ya que a mi no me interesan para nada) y me la hagas llegar compactada y comprimrida para ver que es concretamente lo que te ocurre y ver la solución.
Mi dirección e-mail (creada para casos como éste; es decir, no es mi dirección habitual por lo que no contesto a mensajes que no hayan sido indicados desde esta página), es -> [email protected]
Si por cualquier motivo no te parece una buena opción, házmelo saber y veremos otras opciones.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas