Acceso al anterior registro de una tabla

He de acceder a una tabla desde una fecha determinada pero necesito acceder al anterior registro que este situado en la tabla para conocer su numeración.

Si la fecha solicitada es: 26/06/2021 con el código: 258756 lo que busco es saber con la fecha: 25/05/2021 el ultimo registro que este guardado que puede ser el código: 527841471

3 Respuestas

Respuesta
1

Lo puedes hacer de mil formas. La pregunta es ¿desde un formulario? ¿El formulario es dependiente de la tabla o es independiente? ¿El resultado lo quieres ver directamente en un cuadro de texto o en un mensaje?,¿Lo quieres en código VB o en Sql de consulta?

Por ejemplo, supongamos que el cuadro de texto donde está escrita o vayas a escribir es fecha que citas, 26/06/2022 se llama FechaRegistro y el cuadro donde quieres ver el código se llama BuscaCodigo. En cualquier evento podrías poner:

1º Si de verdad las fechas son correlativas

Buscacodigo=dlookup("Codigo","nombredelatabla","fecharegistro=#" & me.Fecharegistro & "#-1")

Es decir, pon en el control Buscacodigo aquel valor de campo Codigo de la tabla... de aquel registro en que la fecha de registro sea un día menos que la que figura en el control FechaRegistro

2º Si las fechas no fueran correlativas debería usar

Buscacodigo=dlast("codigo","nombredelatabla","fecharegistro<#" & me.fecharegistro & "#")

O sea, ponme en el control Busca registro el último valor del campo Codigo de la tabla ... de aquel registro en que el valor del campo Fecharegistro sea menor que la fecha que figura en el control fecha.

De todas formas, si pusieras una imagen sería mejor.

Respuesta
1

Dada una fecha cualquiera, la anterior es la fecha de referencia menos un día (el día es la unidad para calcular fechas), con la función DateAdd se calcula así:

F_Anterior = DateAdd("d", -1, [fecha de referencia])

La función añadirá el numero de unidades (el segundo parámetro: -1) del tipo que se le indique (el primer parámetro: días = d, semanas = w, meses = m, minutos = n ...) tomando como referente la fecha que se le indique en el tercer parámetro.

EL ultimo registro guardado es un dato ambiguo, puede ser DLast (que será el ultimo según el orden aplicado) DMax el mayor en el conjunto y algunos utilizan DCount que solo es fiel si la serie es continua y no faltan datos intermedios (además de comenzar en la unidad).

Con DLast:
=DLast("[un campo]"; "[un origen]", "[La_Fecha] = " & DateAdd("d", -1, [Una Fecha]))

Con DMax:
=DMax("[un campo]"; "[un origen]", "[La_Fecha] = " & DateAdd("d", -1, [Una Fecha]))

Con DCount:
=DCount("*"; "[un origen]", "[La_Fecha] = " & DateAdd("d", -1, [Una Fecha]))

Respuesta
1

Tengo la siguiente tabla

Y elaboro el siguiente formulario e ingreso la fecha y código, hago clic en Ver último

Obtengo el último 527841471. En caso que no esté ya sea por fecha o código obtengo

CÓDIGO DEL BOTON VER ÚLTIMO

Private Sub btnUltimo_Click()
 Dim lnultimo As Long
 If Not IsDate(Me.ctlFecha) Then
    MsgBox "Verifique la fecha", vbInformation, "Le informo"
    Me.ctlFecha.SetFocus
    Exit Sub
 End If
 If Me.ctlCodigo = "" Then
    MsgBox "Falta el código", vbInformation, "Le informo"
    Me.ctlCodigo.SetFocus
    Exit Sub
 End If
 lnultimo = penultimo(Me.ctlFecha, Me.ctlCodigo)
If lnultimo > 0 Then
  Me.ctlUltimo = lnultimo
Else
  MsgBox "Con la fecha " & Me.ctlFecha & " y código " & Me.ctlCodigo & _
  " no hay registros", vbInformation, "Le cuento"
  Me.ctlUltimo = Null
End If
End Sub

CÓDIGO DE LA FUNCIÓN

Public Function penultimo(mfecha As Date, mcodigo As Long) As Long
 Dim fecha_ant As Date
 fecha_ant = mfecha - 1
 penultimo = Nz(DLast("numero", "tblpedidos", "codigo=" & mcodigo & " AND fecha=" & "#" & Format(fecha_ant, "mm/dd/yyyy") & "#"))
End Function

Aunque utilicé una función puede hacerlo directamente el procedimiento.

En el ejemplo asumo que los campos son numéricos, en caso contrario adicione los respectivos apostrofes ''

Y la función cambia porque va retornar es una cadena de texto

¡Gracias! 

Me alegro le haya servido el ejemplo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas