BK: Tabla con nombre + fecha del sistema

Quiero realizar backup de una tabla y que cada vez que se ejecute se genere una nueva tabla con el nombre T-BK+fecha del sistema + versión. Para eso estoy realizando una consulta y guardarla en una tabla, lo que necesito es poder indicar que cada vez que grabe la consulta en la tabla lo realice en una nueva tabla cuyo nombre va ir variando la fecha y la versión. Por ej. T-BK20220510_1; T-BK20220510_2;

T-BK 20220511_1.

1 respuesta

Respuesta
1

Sería conveniente conocer la estructura de la tabla para tener una mejor aproximación.

Si tiene el nombre como T-BK20220510_1 indica que solo va a requerir de 9 tablas, no es mejor

¿T-BK20220510_01 y así puede tener hasta 99 tablas?

La estructura de la tabla T-Original es Cod, Subcod, fecha, estado, todos los campos tipo texto menos fecha que es tipo fecha corta. La tabla T-BK debe ser T-Original pero con el nombre T-BKaaaammdd_xx (si es de 2 dígitos la versión ya que la misma es por día, por lo que sobra).

Como desconozco la consulta le suministro la función para crear la tabla. Observe la imagen

TABLAS

Aux= Tabla para llevar las tablas que cumplen con la fecha y así poder tomar la última. No obstante, esto se puede hacer de otra forma.

T-BK= Tabla modelo 

FUNCIÓN PARA CREAR LA TABLA

Public Function creatabla(Optional dfecha As Date)
 ' Máximo 9 tablas del _1 al _9
  Dim strFecha As String
  Dim strFecha1 As String
  Dim rs As Recordset
  Dim db As Database
  Dim aux1 As String
  Dim intUltimo As Integer
  Dim tdf As TableDef
  If CLng(dfecha) = 0 Then
    dfecha = Date
  End If
strFecha = "T-BK" & Format(dfecha, "yyyymmdd")
strFecha1 = Format(dfecha, "yyyymmdd")
Set db = CurrentDb
DoCmd.SetWarnings (False)
DoCmd.RunSQL "DELETE FROM aux"
For Each tdf In db.TableDefs
 If Left(tdf.Name, 4) = "T-BK" Then
   aux1 = Mid(tdf.Name, 5, 8)
   If aux1 = strFecha1 Then
     DoCmd.RunSQL "INSERT INTO aux(aux) VALUES('" & tdf.Name & "')"
     intUltimo = Right(DLast("aux", "aux"), 1)
   End If
 End If
Next tdf
 strFecha = Mid(strFecha, 1, 13) & Format(intUltimo + 1, "_0")
 DoCmd.CopyObject , strFecha, acTable, "T-BK"
End Function

Ejemplo para llamar la función:

¿

? Creatabla(date) --- Si no se pasa la fecha toma la del sistema.

Queda faltando como se llama desde la consulta, no lo hago porque la desconzco.

Supongo que necesita en nombre de la tabla para indicársela a la consulta, en este caso se requiere que la función retorne el nombre. Cambie la función por esta.

Public Function creatabla(Optional dfecha As Date) As String
 On Error GoTo hay_error
 ' Máximo 9 tablas del _1 al _9
 ' Crea la tabla y retorna el nombre
  Dim strFecha As String
  Dim strFecha1 As String
  Dim rs As Recordset
  Dim db As Database
  Dim aux1 As String
  Dim intUltimo As Integer
  Dim tdf As TableDef
  If CLng(dfecha) = 0 Then
    dfecha = Date
  End If
strFecha = "T-BK" & Format(dfecha, "yyyymmdd")
strFecha1 = Format(dfecha, "yyyymmdd")
Set db = CurrentDb
DoCmd.SetWarnings (False)
DoCmd.RunSQL "DELETE FROM aux"
For Each tdf In db.TableDefs
 If Left(tdf.Name, 4) = "T-BK" Then
   aux1 = Mid(tdf.Name, 5, 8)
   If aux1 = strFecha1 Then
     DoCmd.RunSQL "INSERT INTO aux(aux) VALUES('" & tdf.Name & "')"
     intUltimo = Right(DLast("aux", "aux"), 1)
   End If
 End If
Next tdf
 strFecha = Mid(strFecha, 1, 13) & Format(intUltimo + 1, "_0")
 DoCmd.CopyObject , strFecha, acTable, "T-BK"
 If Err.Number = 0 Then
   creatabla = strFecha
 End If
hay_error_exit:
  Exit Function
hay_error:
    MsgBox "Ocurrió el error " & Err.Number & vbCrLf & Err.Description, vbCritical, "Error.."
    Resume hay_error_exit
    

Por ejemplo,

¿

? Creatabla(date)
T-BK20220511_4

De acuerdo con la imagen inicial de las tablas de la respuesta anterior.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas