** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Mostrar el ultimo registro insertado.
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoMostrar el ultimo registro insertado.

 Responder Responder
Autor
Mensaje
Antonio Pedro Ver desplegable
Asiduo
Asiduo


Unido: 13/Diciembre/2005
Estado: Sin conexión
Puntos: 308
Enlace directo a este mensaje Tema: Mostrar el ultimo registro insertado.
    Enviado: 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.

Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14017
Enlace directo a este mensaje Enviado: 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.

Access Aplicaciones
Tecsys.es
Arriba
Antonio Pedro Ver desplegable
Asiduo
Asiduo


Unido: 13/Diciembre/2005
Estado: Sin conexión
Puntos: 308
Enlace directo a este mensaje Enviado: 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.


Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14734
Enlace directo a este mensaje Enviado: 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

Mi web
Arriba
joanka Ver desplegable
Habitual
Habitual


Unido: 07/Abril/2021
Localización: Lleida
Estado: Sin conexión
Puntos: 140
Enlace directo a este mensaje Enviado: 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.
Arriba
Antonio Pedro Ver desplegable
Asiduo
Asiduo


Unido: 13/Diciembre/2005
Estado: Sin conexión
Puntos: 308
Enlace directo a este mensaje Enviado: 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.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable