** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Formulario sin datos
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoFormulario sin datos

 Responder Responder
Autor
Mensaje
fredy8alc Ver desplegable
Habitual
Habitual


Unido: 19/Abril/2016
Localización: España
Estado: Sin conexión
Puntos: 168
Enlace directo a este mensaje Tema: Formulario sin datos
    Enviado: 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.


Editado por fredy8alc - 02/Noviembre/2019 a las 12:58
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2171
Enlace directo a este mensaje Enviado: 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...
Arriba
fredy8alc Ver desplegable
Habitual
Habitual


Unido: 19/Abril/2016
Localización: España
Estado: Sin conexión
Puntos: 168
Enlace directo a este mensaje Enviado: 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.
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2171
Enlace directo a este mensaje Enviado: 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

Arriba
prga Ver desplegable
Moderador
Moderador


Unido: 16/Noviembre/2004
Localización: España
Estado: Sin conexión
Puntos: 3250
Enlace directo a este mensaje Enviado: 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
Arriba
fredy8alc Ver desplegable
Habitual
Habitual


Unido: 19/Abril/2016
Localización: España
Estado: Sin conexión
Puntos: 168
Enlace directo a este mensaje Enviado: 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.
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2171
Enlace directo a este mensaje Enviado: 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
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable