Escribir correctamente sentencia SQL en Recordset

Deseo extraer el último registro de un recordset, por favor, ¿alguien me puede ayudar con esta sentencia?

Dim Rst3 As DAO.Recordset
Set Rst3 = CurrentDb.OpenRecordset("SELECT TOP 1 * FROM tbl_AlmacenIngreso ORDER BY Id DESC WHERE IdMedicamentos=" & Rst1!IdMedicamento)

Rst1! IdMedicamento es el código del producto que necesito que se filtre es un campo de texto

1 Respuesta

Respuesta
2

Las cláusulas ORDER BY siempre van al final de todo:

Set Rst3 = CurrentDb.OpenRecordset("SELECT TOP 1 * FROM tbl_AlmacenIngreso WHERE IdMedicamentos=" & Rst1!IdMedicamento & " ORDER BY Id DESC")

Muchas gracias, indica se ha producido el error '3061' en tiempo de ejecución: Pocos parámetros.  Se esperaba 2.  IdMedicamentos y Rst1!IdMedicamento son campos de texto, supongo que es por el uso de comillas, no entiendo cómo se usa, he leido sobre las sentencias SQL y no llevan comillas y en VBA llevan por todo lado y no entiendo la forma.

Si si, una aclaración más, el motor de base de datos es en mysql

Si es campo de texto es así:

Set Rst3 = CurrentDb.OpenRecordset("SELECT TOP 1 * FROM tbl_AlmacenIngreso WHERE IdMedicamentos='" & Rst1!IdMedicamento & "' ORDER BY Id DESC")

Set Rst3 = CurrentDb.OpenRecordset("SELECT TOP 1 * FROM tbl_AlmacenIngreso WHERE IdMedicamentos='" & Rst1!IdMedicamento & "' ORDER BY IdMedicamentos DESC")

A menos que tengas un campo que se llame Id y quieras ordenar por él.

Hora indica lo mismo, pero que se esperaba 1 ya no dos (Pocos parámetros.  Se esperaba 1)

El campo Id es la llave autonumérica y si necesito que se ordene de acuerdo a ese criterio.

Si ahora el error te pasa de pedir 2 parámetros a 1, es porque el campo que usas en el ORDER BY no existe (con el nombre que tenías inicialmente (Id)). Si te fijas, al cambiarlo por IdMedicamentos sí lo reconoce como un campo de la tabla tbl_AlmacenIngreso, y por eso ya solo pide un parámetro.

El otro parámetro "que falta", tiene que estar necesariamente en la parte del WHERE, y como aparentemente el campo IdMedicamentos existe en la tabla (está para ordenar por él), el error lo tienes que tener necesariamente en el valor que le asignas, que por lo visto, no es ningún valor.

Comprueba que Rst1! IdMedicamento efectivamente devuelve un valor

¡Gracias! Bueno al final opté por usar mover el recordset hasta el último registro, ya no hice la prueba, pero muchas gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas