Access Consulta de parámetros VBA

Me gustaría saber como puedo mejorar mi código para hacer el siguiente procedimiento:

Se necesita saber si el resultado de una consulta de parámetros tiene datos o está vacía.

Si esta vacía se ejecuta una macro que ya está lista.

Si los parámetros de la consulta se cumplen se ejecuta otra macro.

ESTE ES EL CÓDIGO que quiero mejorar con la consulta a la misma tabla.

Private Sub Comando0_Click()
Dim dbsTemporal As DAO.Database
Dim rstMovimientos As DAO.Recordset 'Declaracion de variables
Dim Opcion1 As Integer
Dim Opcion2 As String
Dim nombreMacro As String
Set dbsTemporal = CurrentDb
Set rstMovimientos = dbsTemporal.OpenRecordset("MOVIMIENTO_PRESUPUESTO") 'Abre la tabla

rstMovimientos.MoveFirst 'ubica el primer registro
Opcion1 = rstMovimientos!TIPO_MOVIMIENTO
Opcion2 = rstMovimientos!TIPO_RUBRO

If Opcion1 = 1 And Opcion2 = "INGRESO" Then

MsgBox "El REGISTRO NO está vacío"
nombreMacro = "EDITAR_REGISTRO_PTO_INICIAL_INGRESOS"
DoCmd.RunMacro nombreMacro

Else

MsgBox "El REGISTRO está vacío"
nombreMacro = "INGRESAR_PTO_INICIAL_INGRESOS"
DoCmd.RunMacro nombreMacro
End If
End Sub

1 respuesta

Respuesta
1

Para saber si una recordset devuelve registros, tienes que usar la propiedad Recordcount, que en tu caso sería:

If rstMovimientos.RecordCount=0  Then 'Si no devuelve registros

'Código si no hay registros

Else

'Código si hay registros

End If

Un saludo.


Un nuevo foro de access, visítanos: http://nksvaccessolutions.com/Foro/ 

GRACIAS.

Otra pregunta: Puedo hacer lo mismo con el resultado de una consulta ?. Si la consulta de parámetros tiene registros se ejecute un código de lo contrario se ejecute otro.

algo así como esto:

Dim dbsTemporal As DAO.Database
Dim rstMovimiento As DAO.Recordset 'Declaracion de variables
Dim Consulta As QueryDef

Set dbsTemporal = CurrentDb 'Asignación de un objeto a la variable
Set Consulta = dbsTemporal.QueryDefs("CONSULTA_MTO1")
Consulta.Parameters("TIPO_MOVIMIENTO")= 1
Consulta.Parameters("TIPO_RUBRO") = "INGRESO"
Set rstMovimiento = Consulta.OpenRecordset

If rstMovimiento.RecordCount <> 0 Then 'Comprobamos que hayan registros en la tabla
MsgBox "El REGISTRO NO está vacío"
nombreMacro = "EDITAR_REGISTRO_PTO_INICIAL_INGRESOS"
DoCmd.RunMacro nombreMacro

Else

MsgBox "El REGISTRO está vacío"
nombreMacro = "INGRESAR_PTO_INICIAL_INGRESOS"
DoCmd.RunMacro nombreMacro

End If

De verdad agradezco mucho su colaboración.

Sí claro, Recordcount te funciona con cualquier recordset que cargues, ya sea tabla, consulta, consulta parametrizada...

GRACIAS POR TU RESPUESTA. 

Estoy ejecutando este código y funciona con ese parámetro, pero al incluir otro parámetro por ejemplo: MOVIMIENTO_PRESUPUESTO.TIPO_RUBRO="INGRESO"

aparece el texto de la consulta en rojo y el "mensaje error de compilación. Se esperaba fin de la instrucción."

Me apena abusar de su gentileza, de su tiempo, pero agradecería enormemente si pudieras ayudarme. Lograr ejecutar este tipo de consulta me servirá de mucho.

Nuevamente Muchas Gracias y disculpe las molestias.

Dim dbTemporal As DAO.Database
Dim Consulta As DAO.Recordset 'Declaracion de variables
Dim strSQL As String
Dim nombreMacro As String

Set dbTemporal = CurrentDb()
strSQL = "SELECT * FROM MOVIMIENTO_PRESUPUESTO WHERE MOVIMIENTO_PRESUPUESTO.TIPO_MOVIMIENTO=1"
Set Consulta = dbTemporal.OpenRecordset(strSQL, dbOpenDynaset)

If Consulta.RecordCount > 0 Then
MsgBox "El REGISTRO NO está vacío"
nombreMacro = "EDITAR_REGISTRO_PTO_INICIAL_INGRESOS"
DoCmd.RunMacro nombreMacro
Else

MsgBox "El REGISTRO está vacío"
nombreMacro = "INGRESAR_PTO_INICIAL_INGRESOS"
DoCmd.RunMacro nombreMacro

End If
End Sub

Prueba así:

strSQL = "SELECT * FROM MOVIMIENTO_PRESUPUESTO WHERE MOVIMIENTO_PRESUPUESTO.TIPO_RUBRO='INGRESO'"

Es decir, si el valor es de tipo texto, tiene que ir encerrado entre comillas simples.

Un saludo.


Un nuevo foro de access, visítanos: http://nksvaccessolutions.com/Foro/ 

¡Gracias! 

Su mercé ha sido muy amable. El código funciona perfecto. Gracias por su tiempo y por compartir su conocimiento.

Bendiciones y Buena Energía Siempre.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas