Como hacer consultar mediante formularios

Tengo una base de datos de mis facturas, necesito hacer consulta de meses completos mediante un formulario, mi formulario se llama Formulario mes y contiene un botón por cada mes.
Lo que no quiero es crear una tabla de consulta por cada mes, estoy utilizando una tabla de consulta que se llama Consultas_mes esta tabla deberá estar variando el mes de consulta dependiendo del boto que yo oprima (Enero, Febrer, etc.)
Necesito saber como asignar una variable que contenga los datos del mes a consultar y que esta variale sea la que utilice la tabla de consulta como criterio a buscar. Mientras la respuesta sea más sencilla será mejor para mi entenderla ya que no tengo cuento con mucha experiencia en programación.

1 Respuesta

Respuesta
1
Lo que comentas es un poco "abstracto" para poderte dar una buena respuesta. Si eres tan amable, ¿podrías decirme qué campos incluyes en la consulta "Consultas_mes"? ¿Es una consulta "normal", es decir, una consulta de selección?
Por otra parte, y sólo como opinión, ¿no te sería más cómodo, en el formulario, tener una casilla donde introdujeras el número de mes (1-Enero, 2-Febrero, etc.) y un sólo botón para sacar la información? Te lo comento porque eso simplificaría mucho el proceso.
Bueno, en cuanto tenga esa info y tus comentarios intentaré echarte una mano.
Gracias por responder amigo aquí te dejo la información.
Los campos que estoy incluyendo en la consulta son:
No. Fact
Fecha emisión
Fecha pagada
Cliente
Concepto
Subtotal
IVA
Total
(En el campo Fecha emisión es donde necesito poner la condición de búsqueda.
-----------------------------------------------------------------------------------------------------------
La consulta es de selección.
-----------------------------------------------------------------------------------------------------------
Es buena idea la de elección por número de mes, cualquier forma en la que me puedas ayudar te lo agradecería.
Te explico cómo hacer lo que quieres utilizando el cuadro de texto y un único botón. Al final de este mensaje te explico cómo hacerlo si tienes un botón por mes, pero será más trabajoso para ti.
Como comentas que no tienes mucha experiencia en programación te lo detallaré al máximo. De todas maneras, si tienes algún problema, me lo comentas y te explico más minuciosamente el asunto ;)
Vamos allá:
1.- En el formulario insertas un cuadro de texto. Sacas sus propiedades y te vas a la pestaña "Otras". En la propiedad nombre cambias el valor que haya por este otro (sin comillas): "txtMes"
2.- Ahora insertas un botón y te vas a sus propiedades. En la pestaña "Otras" le pones de nombre (sin comillas) "cmdFiltraMes". Te vas a la pestaña de eventos y buscas el evento "Al hacer click". Te sitúas sobre la parte blanca que hay a la derecha y verás que te sale un pequeño botón con puntos suspensivos. Le das a ese botoncillo y en la ventana que te sale le marcas que quieres generar código.
3.- Se te abrirá la ventana del editor de VBA. Ahí le tienes que copiar el código que te paso, pero antes te comento que te he marcado en negrita las palabras del código que debes cambiar por los nombres que tú tengas en tu BD (parto del supuesto que has puesto el mismo nombre al botón y al cuadro de texto creados tal y como te he indicado más arriba). Después del código te pongo las equivalencias. El código es:
---
Private Sub cmdFiltraMes_Click()
    Dim vMes As Variant
    Dim miSql As String
    vMes = Me.txtMes.Value
        'Si no se ha introducido ningún mes se
        'sale del procedimiento
    If IsNull(vMes) Then Exit Sub
        'Redefinimos la consulta con el filtro
    miSql = "SELECT * FROM Cons1 WHERE Month([FEm]) = " & vMes
        'Aplicamos el nuevo origen del registro al
'formulario y refrescamos la información
    Me.RecordSource = miSql
    Me.Requery
End Sub
---
Las equivalencias son:
- Cons1 -> tienes que cambiarlo por el nombre de tu consulta. Si tiene espacios en blanco en el nombre ponlo entre corchetes.
- FEm -> tienes que cambiarlo por el nombre del campo que contiene la fecha de emisión, que según me comentas es [Fecha emision]
Y eso es todo: ahora, cuando pongas el número de mes en el cuadro de texto y le des al botón sólo verás los registros correspondientes al mes seleccionado.
---
Si sigues con tu idea de tener 12 botones tienes que asignar, a cada uno de ellos, el anterior código en el evento "Al hacer click". Las líneas que, en este caso, debes modificar son las siguientes:
- Dim vMes As Variant -> Debes sustituirla por: Const vMes As Integer = X
donde X es el número de mes (1 para el botón enero, 2 para el botón febrero, etc.)
- vMes = Me.txtMes.Value -> Tienes que borrar esta línea
-         'Si no se ha introducido ningún mes se
        'sale del procedimiento
    If IsNull(vMes) Then Exit Sub
--> Tienes que borrar estas tres líneas
---
Y, de nuevo, eso es todo.
Ya me dirás si te ha funcionado bien.
Un gran saludo.
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 358px; width: 1px; height: 1px; overflow: hidden;">Private Sub cmdFiltraMes_Click()
    Dim vMes As Variant
    Dim miSql As String
    vMes = Me.txtMes.Value
        'Si no se ha introducido ningún mes se
        'sale del procedimiento
    If IsNull(vMes) Then Exit Sub
        'Redefinimos la consulta con el filtro
    miSql = "SELECT * FROM Cons1 WHERE Month(FEm) = " & vMes
        'Aplicamos el nuevo origen del registro al
'formulario y refrescamos la información
    Me.RecordSource = miSql
    Me.Requery
End Sub</div>
Gracias experto, lo pondré a prueba y te comento como me fue.
OK. Espero ;)
Hola experto, he realizado lo que me aconsejaste y no obtengo ningún resultado, cuando corro el código en las dos opciones que indicas no pasa nada, pero tampoco recibo ningún error de ejecución.
He remplazado lo que me indicaste, el nombre de mi consulta es Consulta_emitidas_mes y el campo por el que voy a filtrar es Fecha Emisión
Código con caja de texo
Option Compare Database
Private Sub cmdFitraMes_Click()
    Dim vMes As Variant
    Dim miSql As String
    vMes = Me.txtMes.Value
    'Si no se ha introducido ningún mes se
    'sale del procedimiento
If IsNull(vMes) Then Exit Sub
'Redefinimos la consulta con el filtro
miSql = "SELECT* FROM Consulta_emitidas_mes WHERE Month([Fecha Emisión])=" & vMes
'Aplicamos el nuevo origen del registro al
'formulario y refrescamos la información
Me.RecordSource = miSql
Me.Requery
End Sub
CODIGO CON BOTON DE MES
Private Sub Comando33_Click()
    Const vMes As Integer = 1
    Dim miSql As String
    'Redefinimos la consulta con el filtro
    miSql = "SELECT* FROM Consulta_emitidas_mes WHERE Month([Fecha Emisión])=" & vMes
'Aplicamos el nuevo origen del registro al
'formulario y refrescamos la información
Me.RecordSource = miSql
Me.Requery
End Sub
He creado una miniBD y he testeado el código y a mí me funciona perfectamente. Eso me lleva a pensar que hay algo en alguna parte de tu BD que está definido de alguna manera que no "cuadra". Un par de preguntas:
- El formulario, ¿está creado a partir de la consulta "Consulta_emitidas_mes"?
- El tipo de campo [Fecha Emisión], ¿es un tipo Fecha/Hora?
Si la respuesta a ambas preguntas es "sí" no se me ocurre qué es lo que puede estar fallando. Necesitaría pues ver la BD de datos. Si a ti te parece bien me la podrías pasar en un zip a mi correo, que es [email protected]
Si quieres haz una copia y borra los registros que consideres confidenciales antes de pasármela. Yo encantado la miro y te explico, si lo pillo, dónde está el error.
Bueno.
Listo experto ya te la envié
Ya tienes la respuesta en el mail ;)
Gracias por la ayuda experto ya funciona, pero los resultados que crea la consulta me los muestra en un formulario de registro en registro, lo que necesito es que me muestre todos los registros que coincidan con el mes de búsqueda en una tabla de consulta
Poco a poco creo que lo vamos a conseguir.
Si quieres los resultados así la BD Facturas 2011-01 no te sirve. Tendrás que utilizar la BD Facturas 2011-02.
Coge el formulario "Formulario Mes" y ponlo en vista diseño. Te vas al botón que ejecuta la consulta y al código que tienes le cambias esta línea:
DoCmd.OpenForm "FFiltraPorMes", , , "Month([Fecha Emisión]) = " & vMes
por esta otra:
DoCmd.OpenForm "FFiltraPorMes", acFormDS, , "Month([Fecha Emisión]) = " & vMes
En todos los códigos de los botones que hayas puesto la línea en cuestión también tienes que cambiarla por la segunda.
Ya me dirás si ahora te sale ;)
No he recibido ninguna respuesta. ¿Te ha ido bien?
Bueno. Ya me dirás cosas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas