Imprimir página | Cerrar ventana

Mostrar el ultimo registro insertado.

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=86424
Fecha de impresión: 27/Marzo/2026 a las 06:10


Tema: Mostrar el ultimo registro insertado.
Publicado por: Antonio Pedro
Asunto: Mostrar el ultimo registro insertado.
Fecha de publicación: 25/Julio/2022 a las 23:51
Un Saludo, os comento el asunto por si me podeis orientar.
Tengo dos tablas (TDatosPersonales y TNuevaPresentacion) y como campo clave el número de documento. Tengo un formulario independiente (FDatospersonales) para que me muestre la consulta mediante el numero de documento. En dicho formulario se muestran todos lo campos de la tabla TDatospersonales y un campo de la tabla TNuevaPresentacion (Fechapresentacion). 

Por ejemplo registro un dni 11111111-A y fecha presentacion:01/01/2022, inserto otra el mismo dni pero con una fecha diferente 25/07/2022.

Pues bien, lo que estoy intentando y no doy con ello es que a la hora de realizar una consulta me muestre el ultimo registro insertado, es decir que me mostrara 25/07/2022, para ello tengo insertada la siguiente instrucción al cargar el formulario FDatospersonales: DLast ("FechaPresentacion","TNuevaPresentacion","Numero='"&Forms!FConsultadocumentacion!Numerodocumento &"'").

FConsultadocumentacion es un formulario desde donde realizo la consulta y lo que deseo buscar (documento y numero) Dni y 111111111-A.

Y como dije anteriormente en vez de mostrarme el ultimo registro insertado con la ultima fecha insertada, me muestra el primero 01/01/2022.

Como debería de plantearlo para que me mostrara la ultima fecha introducida.

Un Saludo.




Respuestas:
Publicado por: Mihura
Fecha de publicación: 26/Julio/2022 a las 08:10
El DLast puede darte esas sorpresas, ... ¿te podría valor un DMax? ... es decir suponiendo que introduces las fechas en orden.

En caso de que lo anterior no te valga, tendrías que hacerte una consulta (mejor con un RecordSet) que cogiera la tabla TNuevaPresentación filtrada por el DNI, ordenada por el ContadorId (porque supongo que tienes un campo Id autonumérico que haga de contador) descendente y te quedas con el primer registro (TOP 1).



-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: Antonio Pedro
Fecha de publicación: 16/Agosto/2022 a las 22:54
Saludos y gracias por contestar, comentarte lo que he realizado y no me da el resultado que estoy buscando, adjunto la instrucción:

Dim dbs As DAO.Database

Dim rst As DAO.Recordset

Dim mySql As String

    'Definimos las variables

 mySql = "SELECT TOP 1 ID,FechaPresentacion, Numero FROM TNuevaPresentacion  WHERE Numero = '" & Forms!FConsultadocumentacion!Numerodocumento & "' ORDER BY FechaPresentacion DESC;"

 Set dbs = CurrentDb

 Set rst = dbs.OpenRecordset(mySql, dbOpenSnapshot)

 Fechapresentacion.value = rst.Fields("FechaPresentacion").value

    'Limpiamos memoria

 If Not rst Is Nothing Then

     rst.Close

     Set rst = Nothing

    End If

 If Not dbs Is Nothing Then

     dbs.Close

     Set dbs = Nothing

 End If

Me salta error 3021, No hay ningún registro activo. y me marca la instrucción

Fechapresentacion.value = rst.Fields("FechaPresentacion").value

Un Saludo.




Publicado por: xavi
Fecha de publicación: 17/Agosto/2022 a las 08:54
Hola,

Varias cosas

1. ¿Desde dónde lanzas ese código? Porque a  lo mejor puedes cambiar la llamada al formulario por un simple Me!Numerodocumento

2. Pon un punto de interrupción después de la asignación de la variable mySQL para comprobar que, efectivamente, estás tomando un valor para la WHERE

3. Después de la apertura del Recorset comprueba si tienes datos en el mismo (If rst.EOF ... es que está vacío)

4. (manías personales) Ese código puede quedar mucho más corto si:
4.1 No utilizas la variable dbs y, en su lugar, invocas directamente a CurrentDb
4.2 Lanzas la SQL directamente en el OpenRecordset y unicamente con el valor que quieres recuperar
4.3 Cierras si o si el recordset
Algo así:
Dim rst As DAo.Recordset
Set rst = CurrentDb.OpenRecordset("SELECT TOP 1 FechaPresentacion FROM TNuevaPresentacion  WHERE Numero = '" & Me!Numerodocumento & "' ORDER BY FechaPresentacion DESC")
If rst.EOF Then
  ' vacío: no hacemos nada
Else
  ' Con datos. Tomamos valor
  Me!FechaPresentacion = rst!FechaPresentacion
End If
rst.Close
Set rst = Nothing


5. Dado que buscas el valor máximo de la fecha de presentación, ¿porqué no utilizas el DMax como sugirió Mihura? Incluso controlando el nulo para devolver un blanco. Algo así:

Me!FechaPresentacion = Nz(DMax("FechaPresentacion", "TNuevaPresentacion", "Numero = '" & Me!NumeroDocumento & "'"), "")


Nota: todos los código escritos al vuelo.

Un saludo


-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: joanka
Fecha de publicación: 17/Agosto/2022 a las 11:20
Hola,

Prueba a añadir en la consulta el parámetro Id además del DNI. Con DLast te tendría que funcionar correctamente.

Saludos.


Publicado por: Antonio Pedro
Fecha de publicación: 14/Mayo/2023 a las 17:57
Hola y Saludos. Se me había pasado esta pregunta, gracias a Xavi por su respuesta, ya lo solucione gracias a su ayuda.
Se puede cerrar el hilo.
Saludos.



Imprimir página | Cerrar ventana