VBA Access: DCOUNT con dos criterios

Necesitaría saber cómo se pueden contar cantidad de registros que cumplan dos criterios dependiendo de si otros objetos tienen valor o no, a saber:
1) El primer criterio que puede ser nulo o contener un valor es el USUARIO.

2) El segundo criterio también puede ser nulo o contener un valor y es el campo DESCRIP.

Los casos posibles son:
USUARIO nulo y DESCRIP nulo: Muestra el total de registros.
USUARIO no nulo y DESCRIP nulo: Muestra el total de registros para el usuario.
USUARIO no nulo y DESCRIP no nulo: Cuenta registros de según ambos filtros.
USUARRIO nulo y DESCRIP no nulo: Cuenta la cantidad de registros según DESCRIP.
No sé como hacerlo mediante DCount y sinceramente me he devanado los sesos por días buscando la forma en videos y otras páginas pero no logro hacerlo. Agradecería el código armado para un caso Nulo y para otro No Nulo y yo adaptaría para cada caso combinando. Decirme como funciona o a razgos generales no me ayudaría porque no tengo tanto conocimiento como para hacerlo sin ayuda. Y si es otra la forma, menos aún.

1 respuesta

Respuesta
2

DCount con dos (o más) criterios funciona exactamente igual que con uno, simplemente has de encadenar los dos, igual que harías con un DBúsq, un filtro para abrir un formulario/informe o un filtro en una SQL, y tener en cuanta la sintaxis (si es campo texto, numérico o de fecha):

DCount("Campo","Tabla","Criterio 1 AND Criterio2")

En tu caso sería una cosa así:

Caso 1: DCount("*","Tabla")

Caso 2: DCount("*","Tabla","USUARIO Is Not Null AND DESCRIP Is Null")

Caso 3: DCount("*","Tabla","USUARIO Is Not Null AND DESCRIP Is Not Null")

Caso 4: DCount("*","Tabla","USUARIO Is Not Null AND DESCRIP Is Not Null")

Si usas Ifs encadenados para analizar USUARIO y DESCRIP, ya tienes forma de saber cual de las 4 usar.

¡Gracias!
Quedó fantástico. Ahora tengo que armar el código de acuerdo a lo que realmente necesito. Por el momento el código quedó así:

If Me.txtUsuarioSelect.Value = "[Sin sleccionar]" Then
    Me.txt1.Value = DCount("*", "[US_HISTORIAL]", "[DESCRIP] = 'Normal'")
    Me.txt2.Value = DCount("*", "[US_HISTORIAL]", "[DESCRIP] = 'Autorizado'")
    Me.txt3.Value = DCount("*", "[US_HISTORIAL]", "[DESCRIP] = 'Actualización'")
    Me.txt4.Value = DCount("*", "[US_HISTORIAL]", "[DESCRIP] = 'Denegado'")
    Me.txt5.Value = DCount("*", "[US_HISTORIAL]", "[DESCRIP] = 'Fallido'")
    Me.txt6.Value = DCount("*", "[US_HISTORIAL]", "[DESCRIP] = 'Forzado'")
Else
    Me.txt1.Value = DCount("*", "[US_HISTORIAL]", "[USUARIO] = txtUsuarioSelect And [DESCRIP] = 'Normal'")
    Me.txt2.Value = DCount("*", "[US_HISTORIAL]", "[USUARIO] = txtUsuarioSelect And [DESCRIP] = 'Autorizado'")
    Me.txt3.Value = DCount("*", "[US_HISTORIAL]", "[USUARIO] = txtUsuarioSelect And [DESCRIP] = 'Actualización'")
    Me.txt4.Value = DCount("*", "[US_HISTORIAL]", "[USUARIO] = txtUsuarioSelect And [DESCRIP] = 'Denegado'")
    Me.txt5.Value = DCount("*", "[US_HISTORIAL]", "[USUARIO] = txtUsuarioSelect And [DESCRIP] = 'Fallido'")
    Me.txt6.Value = DCount("*", "[US_HISTORIAL]", "[USUARIO] = txtUsuarioSelect And [DESCRIP] = 'Forzado'")
End If

Con esto ya obtuve un resultado. Con esto que me pasas ampliaré a las otras posibilidades pudiendo quitar objetos y quizá en un solo TextBox mostrar el resumen entero y ocultar si no tiene valor.
Dejo la pregunta abierta para incluir el código cuando lo termine. Sigo teniendo problemas con Windows 10 (para variar, cuándo no) así que no sé cuando podré volver a publicar. Formatear dos veces en menos de 3 días por fallos en el arranque es vergonzoso (para MS, obvio).

Evidentemente no se publicó el código que pasé. Es un desastre como está funcionando TE, con lo útil que es para personas neófitas como nosotros. Igual, me funciona de maravillas.

La verdad es que sí es un desastre, y no parece que se vaya a solucionar pronto. Neckkito y yo tenemos montado un foro de Access al que estás invitado, si te quieres unir: http://nksvaccessolutions.com/Foro/

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas