Como puedo saber cuantos resultados arroja una consulta?

Tengo un formulario que se habre al inicar la base de datos, la cual contiene mensajes grabados por el asuario previamente. Presenta los mensajes marcados como finalizados. Por lo que los no marcados se presentan.

Ahora, mi problemas es que habre el formulario con o sin mensajes, ya que en algunas ocaciones no hay mensajes. Por lo que me gustaria saber si hay forma de saber cuantos resultados arroja la consulta. Ya que despues seria tan facil como poner un IF... THEN...

Pero no se como saber o contar los resultados con una macro y cargar el dato en una variante y haci poder hacer el IF... THEN

2 Respuestas

Respuesta
1

Puedes poner un poquito de código que se ejecute al cargar el formulario donde muestras los mensajes.

Imagina que tienes una tabla con los mensajes, y con un campo si/no llamado leido.

Imagina también que tienes un formulario llamado FormularioAvisos, donde salen los mensajes sin leer. En el evento Al cargar (On Load), pondrías el siguiente código

Private Sub Form_Load()
    Dim MensajesSinLeer As Integer
    MensajesSinLeer = DCount("*", "mensajes", "leido=No")
    If MensajesSinLeer = 0 Then DoCmd.Close acForm, "FormularioAvisos"
End Sub

Esto hace que cuente los mensajes sin leer, y si el resultado es 0, entonces el formulario se cierra. Podrías también poner una label de fondo en el formulario, con el aviso de que "NO HAY MENSAJES", o algo así. Al cargar el formulario, está oculta. Pero si al contar es 0, entonces se vuelve visible.

Gracias.

En la línea

MensajesSinLeer = DCount("*", "mensajes", "leido=No")

Que significa "*" y "mensajes" y "leido=No"?

Es que tenga en cuenta que ya tengo todo hecho, solo ocuparía acomodarlo a mis tablas y mis formularios.

Gracias, todo lo demás lo entendí perfectamente.

La función DCount, es equivalente a hacer lo siguiente:

SELECT COUNT (*) FROM tabla WHERE condicion

Por eso, el ejemplo que te he puesto es igual que

SELECT COUNT (*) FROM tablamensajes WHERE campoleido=No

Como ese código es más difícil usarlo en un VBA (habría que trabajar con recordset), te sugiero usar la otra sentencia, que es una función agregada de dominio (se llaman así).

DCOUNT ("el campo que quieres contar", "tabla", "condicion")

En tu caso:

"*" = el campo que vas a contar, que es el registro completo.

"mensajes" = tu tabla donde tienes los mensajes.

"leido=No" = la condición (el Where) que quieres aplicar: que los mensajes estén sin leer. En el momento que se marquen como leídos, ya no los contará.

Respuesta
1

Si como entiendo, lo único que necesitas es que el formulario no se abra si no tiene ningún registro, basta con que en el evento "Al abrir" del formulario, pongas lo siguiente:

If Me.Recordset.EOF And Me.Recordset.BOF Then DoCmd.Close

¡Gracias!

WOW, quedo excelente y funciona de maravilla.

Te agradecería que me explicaras el código.

Por supuesto.

Primero: Recordset, por decirlo de alguna manera, abre el listado de registros en segundo plano.

Segundo: Tanto me. Recordset. Eof como me. Recordset. Bof, devuelven un valor "booleano", es decir, verdadero o falso.

BOF, devuelve verdadero si estamos antes del primer registro

EOF, devuelve verdadero si estamos despues del último registro.

Por lo tanto si ambos devuelven verdadero, es que no hay ningún registro.

Pasate por access facil y verás más cosas como estas, muy sencillas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas