Imprimir página | Cerrar ventana

Formulario sin datos

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=84789
Fecha de impresión: 24/Abril/2024 a las 13:39


Tema: Formulario sin datos
Publicado por: fredy8alc
Asunto: Formulario sin datos
Fecha de publicación: 02/Noviembre/2019 a las 12:56
Buenos días.
Otra vez necesito ayuda del foro.
En el evento "al salir" de un campo de texto tengo puesto una instrucción para que me abra un formulario.
Lo que yo quiero es que, si NO hay datos que mostrar en ese formulario (que es lo normal) pues que no se abra o que se cierre.

En el evento "Al salir" tengo:

DoCmd.RunCommand acCmdSaveRecord
DoCmd.OpenForm "ControlTiempos"

Y en el evento "Al abrir" el formulario tengo:

If Me.RecordsetClone.RecordCount = 0 Then
    MsgBox "No hay registros que mostrar", vbExclamation, "AVISO"
    Cancel = True
End If

Al ejecutarse me da el error: (Al aceptar el MsgBox)

Se ha producido el error 2501 en tiempo de ejecución
La acción OpenForm se canceló


Por favor podeis echarme una mano.

Muchas gracias.



Respuestas:
Publicado por: rokoko
Fecha de publicación: 02/Noviembre/2019 a las 13:03
Puedes controlar el error 2501 o verificar antes si ese formulario va a tener fatos, si no los tiene que no se abra. Estobtendria que ir antes de querer abrir el formulario. Con un DCount se podria hacer...


Publicado por: fredy8alc
Fecha de publicación: 02/Noviembre/2019 a las 13:27
El formulario está basado en una consulta con muchos criterios de búsqueda.
Como puedo saber si va a tener datos o no?

Tengo un campo "Cuenta" en el formulario pero tiene valor nulo, Nz(Cuenta(Registros)). No me pone 0.

Gracias.


Publicado por: rokoko
Fecha de publicación: 02/Noviembre/2019 a las 13:41
Con DCount contamos registros si es igual a 0 es que no hay....

If DCount("*","NombreConsulta") = 0 Then
MsgBox "No hay registros que mostrar", vbExclamation, "AVISO"
Else
DoCmd.OpenForm "ControlTiempos"
End if

Si la consulta esta en SQl o la pasas a consulta normal para hacer la comprobacion(como arriba) o lo verificas con un recordset....

Dim Rs As DAO.Recordset, SQL As String


SQL = "SELECT ..........."
Set Rs = CurrentDb.OpenRecordset(SQL, dbOpenForwardOnly)

If Rs.RecordCount = 0 Then
MsgBox "No hay registros que mostrar", vbExclamation, "AVISO"
Else
DoCmd.OpenForm "ControlTiempos"
End if



Publicado por: prga
Fecha de publicación: 02/Noviembre/2019 a las 13:45
Hola.
Sí lo del dcount te resulta complicado, prueba cerrando el formulario de la siguiente forma:

If Me.RecordsetClone.RecordCount = 0 Then
    MsgBox "No hay registros que mostrar", vbExclamation, "AVISO"
   ''''' Cancel = True
  DoCmd.Close acForm, Me.Name

End If

espero que sirva
Ya comentas.
Un saludo a todos


Publicado por: fredy8alc
Fecha de publicación: 02/Noviembre/2019 a las 18:44
Muchas gracias rokoko:
Me da un error en
Set Rs = CurrentDb.OpenRecordset(SQL, dbOpenForwardOnly)

La alternativa propuesta por prga funciona correctamente.
De momento con esto resuelvo el tema

Muchas gracias a ambos.


Publicado por: rokoko
Fecha de publicación: 02/Noviembre/2019 a las 19:35
Publicado originalmente por fredy8alc fredy8alc escribió:

Muchas gracias rokoko:
Me da un error en
Set Rs = CurrentDb.OpenRecordset(SQL, dbOpenForwardOnly)

La alternativa propuesta por prga funciona correctamente.
De momento con esto resuelvo el tema

Muchas gracias a ambos.


Entiendo que si has optado por el recordset es que tienes la consulta en SQL no??

SQL = "SELECT ..........."
Set Rs = CurrentDb.OpenRecordset(SQL, dbOpenForwardOnly)

If Rs.RecordCount = 0 Then
MsgBox "No hay registros que mostrar", vbExclamation, "AVISO"
Else
DoCmd.OpenForm "ControlTiempos"
End if



Imprimir página | Cerrar ventana