Dos cuadros de textos con la función DCount en un formulario filtrado

He visitado esta foro un determinado numero de veces y me ha sido de gran ayuda para resolver algunas dudas. En esta oportunidad se me presenta el siguiente problema:

Tengo un formulario basado en una consulta basada en su vez en dos tablas. En el formulario tengo un cuadro combinado del cual escojo una determinada fecha. Al escoger esa fecha se filtran todo los registros del formulario ( en formato continuo ) que coincidan con lo indicado. Este formulario tiene tambien el campo de "Estado"

Ahora, tengo dos cuadros de textos en el pie de pagina que quiero utilizar para contar los registros que aparezcan. Por ejemplo:

---Primero se filtran los registros que coincidan con 07/2020 (valor seleccionado en el cuadro combinado)

---Ahora: en el cuadro de texto "cortado" se cuentan los registros cuyo valor en el campo "Estado" sea el mismo

---Lo mismo para cuadro de texto "reinstalaciones".

He ingresado lo siguiente como origen de datos para cada cuadro de texto.

cortes = DCount("Estado", "ESTADO_Cliente", "[Fecha] LIKE '*" & Cuadrocorte & "*' and [Estado] = 'Activo'")
reinstalaciones = DCount("Estado", "ESTADO_Cliente", "[Fecha] LIKE '*" & Cuadrocorte & "*' and [Estado] = 'Reinstalado'")

Para "cortes no hay ningun problema, hace el conteo de la manera correcta

Sin embargo, cuando despues de haber filtrado me aparecen dos registros REINSTALADOS, el cuadro de "reinstalaciones" cuenta 3 registros y esto siempre sucede a excepcion de cuando no aparece ningun registro con ese valor.

Quisiera saber como solucionar este problema. ¿Y qué deberia hacer si en futuro quisiera contar con 3 cuadros de textos a la vez?

1 Respuesta

Respuesta
2

Evlad, yo creo que te complicas un poco. En el mismo evento en que filtras puedes poner

cortes=me.recordcount

En el caso del segundo, al no saber si la instrucción es tal como la has puesto, es difícil decir algo, ya que, en todo caso sería

....Estado=""Reinstalado""")

Cuando el nombre de un control no contiene espacios no es necesario encerrarlo entre corchetes y por otro lado el apóstrofe se usaría en caso de control o variable, pero en este caso es un texto.

Muchas gracias por la pronta respuesta. La cuestión es que por ejemplo cuando hago un filtro, me aparecen 5 registros suponiendo. 2 de ellos son reinstalados y los otros 3 activos. El cuadro de texto para activo cuenta a los 3 registros mientras que el otro cuadro de texto para reinstalado cuenta 3 registros (es decir, uno de mas). Este es el problema que tengo. 

Y por cierto. Lo de "Me.RecordCount" no aparece establecido en la parte de Visual Basic. Y ya cambie la comilla simple por la doble y todo sigue igual 

Al no saber como tienes construido todo, ni donde pones las instrucciones, valores, ni porque poner el criterio de fecha como texto, etc... Si tengo la tabla Otra con

Fiel exponente de la economía de trabajo, verás que hay cinco registro el día 30/10/2015

Si construyo un formulario al que le añado un cuadro combinado al que he llamado Elegir, al que en sus propiedades-datos-origen de la fila le pongo

SELECT Fecha FROM Otra GROUP BY Fecha;

Elijo el primer día y 

El código del combinado es

En caso de que alguna vez tuvieras la duda de si hay o no registros con valores nulos puedes usar lo anterior con la función Nz.

Por cierto, si vas a trabajar con el formato mm/aaaa, casi sería conveniente que en el origen de la fila del combinado pusieras

SELECT Month([Fecha]) & "/" & Year([fecha]) AS MesN FROM Otra GROUP BY Month([Fecha]) & "/" & Year([fecha]), Year([fecha]), Month([fecha]) ORDER BY Year([fecha]), Month([fecha]);

Así ye saldrán ordenados ascendente

Y entonces dejarías la instrucción como

Me.RecordSource = "select * from otra WHERE format([fecha],""mm/yyyy"") Like '" & Me.Elegir & "'"
Total = Me.Recordset.RecordCount
Cortes = DCount("*", "otra", "format([fecha],""mm/yyyy"") Like '" & Me.Elegir & " and estado=""Activo""")
Reinstalados = DCount("*", "otra", "format([fecha],""mm/yyyy"") Like '" & Me.Elegir & " and estado=""reinstalado""")

Muchas Gracias por tu respuesta y tu ayuda me sirvió de mucho. Al parecer hubo un error en la consulta en la que estuvo basado el formulario. En esta consulta ubique el total "Ultimo" que al parecer no mostraba un valor que requeria en mi consulta y pues en mi formulario, si era considerado. Lo solucione ubicando el total "Agrupar Por"

Hola nuevamente, me he dado cuenta de que cuando aplico el filtro en el formulario pues se filtran los registros de la tabla en la que esta basada, entonces el conteo lo hace según los datos filtrados de la tabla. Pero en realidad, mi formulario esta basado en una consulta de esa tabla y quiero que al filtrar el formulario, se haga el conteo según los datos establecidos en la consulta (no en los de la tabla) . Es decir, que al aplicar el filtro en el formulario, se filtren los datos de la consulta y se haga el conteo de los registros que contenga. 

Vamos a ver, yo te he puesto una tabla como origen del formulario porque no sé como está construida la consulta, pero le instrucción es exactamente la misma, donde yo pongo Otra sólo tienes que poner el nombre de la consulta. Aunque fuera un formulario independiente siempre puedes la misma instrucción. Lo importante para las funciones tipo, DSum, Dcount, Dlookup, Dfirst, etc es que tenga un criterio que le permita distinguir unos registros de otros.

Es decir contar los registros de una consulta filtrada desde un formulario

Ya te he dicho que no sé como filtras, por tanto tengo que suponer. Si tengo una consulta 1, diseñada así

Y tengo un formulario independiente

Cunado elijo un pais

Me dice cuantos registros de la consulta 1 tienen como país el que he elegido.

Y en el evento Después del combinado Elegir simplemente le pongo

Total = DCount("*", "consulta1", "pais='" & Me.Elegir & "'")

Hola, muchas gracias nuevamente por tu respuesta. Te voy a explicar: Mi consulta es la siguiente

Ahora mi formulario esta basado en esa consulta, es decir he establecido como origen de datos esa consulta. Ahora, he colocado el cuadro combinado que selecciones los valores del campo que deseo de esa consulta. Y al seleccionar pues me filtra los datos. Al parecer hasta aqui no hay problema. Ahora he colocados los otros 3 cuadros de texto para contar los registros que tengan el valor de "Activo", "Cortado" y "Reinstalado" simultáneamente. Y pues, luego de hacer el filtro, los cuadros de textos no cuentan los valores de la manera correcta

Para cada cuadro de texto he establecido como origen de datos la siguiente expresion:

=DCont("*","Consulta-estado","Fecha LIKE '*" & [Cuadrocorte] & "*' and Estado = ""Reinstalado""")

Y pues como ves esta basado en la consulta. Sin embargo, no cuenta bien los registros 

Por un lado, si esa expresión se la pones en un origen de datos de un control, no le puedes poner comas como separadores, en todo caso sería punto y coma.

Para no seguir alargando esto. Crea una tabla igual a Estado_cliente. Ponle datos imaginados y me la mandas junto con la consulta y el formulario a [email protected]

En el asunto del mensaje pon tu alias Evlad, ya que si no sé quien me escribe no los abro.

Por cierto, cuando agrupas una consulta por Suma, Max, Min, etc el campo ya no se llama Estado, se llama MáxdeEstado

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas