Crear un histórico en access

Tengo una tabla con números de taquilla (campo bloqueado) nombres y observaciones. Me gustaría tener otra tabla que me guarde los nombres y observaciones junto con el número de taquilla y la fecha actual. La idea es que cuando se dé de baja una taquilla (recordando que el campo del número de taquilla no se borra) pase toda la información a otra tabla. El problema es que el registro de la tabla original no se borra por completo ya que los números de taquilla están bloqueados así que no puedo poner un evento que se ejecute al eliminar registro ya que solo se borran algunos campos. Así que no sé cómo hacerlo.

Si a alguien se le ocurre como se lo agradezco mucho

1 respuesta

Respuesta
1

Por partes, supongamos que la tabla se llama Taquillas, y la otra llamada Histórico tiene los mismos campos que Taquillas y otro que se llame Fechaactual. Supongamos que estás en un formulario único hecho con la tabla Taquillas. Puedes poner un botón y en su evento Al hacer clic crea un procedimiento de evento y entre Private Sub y End Sub  poner

docmd.setwarnings false

Docmd. Runsql "insert into historico(Numtaquilla, nombre, observaciones, fechaactual)values(numtaquilla, nombre, observaciones, date())"

DoCmd. DoMenuItem acFormBar, acEditMenu, 8,, acMenuVer70
DoCmd. DoMenuItem acFormBar, acEditMenu, 6,, acMenuVer70

Así, cuando lo pulses te pasará los datos del registro activo a la tabla Histórico y luego te borra el registro activo de la tabla Taquillas.

En caso de ser un formulario continuo, tendrías que poner un botón a la derecha. Y en el código lo mismo.

Si estuvieras en otro formulario que no tiene nada que ver con ambas tablas., pon en el campo Fecha actual como valor predeterminado

=date()

Luego, en ese formulario independiente puedes poner un cuadro combinado y en su origen de la fila poner, con el generador de consultas, los números de taquillas y en el evento después de actualizar del combinado poner

docmd.setwarnings false

docmd.runsql"insert into historico select * from taquillas where numtaquilla=" & me.nombredelcombinado & ""

docmd.runsql"delete * from Taquillas where numtaquilla=" & me.nombredelcombinado & ""

Hola Icue,

Muchísimas gracias por tu respuesta y perdona el retraso en contestar pero estaba probando lo que me habías dicho. La segunda parte de tu respuesta no la he aplicado porque solo tengo un formulario y no sabía a que te referías. 

Funciona perfecto pero elimina los números de taquilla a pesar de tenerlos bloqueados y no quiero que se borren, la idea es que deje el registro vacío pero con el número de taquilla. 

Por otra parte quería preguntarte si es posible poner un botón y hacer todo esto con el formulario en vista hoja de datos. 

En lo que yo había pensado era que al dar de baja un registro (en realidad no lo daría de baja) copiase los campos a la tabla de bajas y borrase todos los campos del registro excepto el número de taquilla. Y si fuera posible dejarlo con la vista hoja de datos, aunque si esto último no es posible lo podría poner como formulario continuo.

Un saludo y sobretodo muchas gracias por tu rápida respuesta.

Había entendido que una vez que se pasara a Histórico que eliminara el registro de la tabla Taquillas. Si lo que quieres es que te "borre" todos los campos pero que te deje NumTaquilla en la instrucción pon

docmd.runsql"delete nombre,observaciones from taquillas where numtaquilla=....

En caso de que el formulario fuera en Vista Hoja de Datos, como no le puedes poner un botón a la derecha del registro, el problema sería como "identificar" el registro que quieres guardar, y además no hay encabezado ni pie del formulario tampoco podrías poner un botón de comando(no se vería). Por lo que lo mejor sería que en la tabla Taquillas, le pusieras un campo Eliminar, tipo Si/No y se lo añadieras al formulario. Luego en el evento Después de actualizar de la casilla de verificación Eliminar puedes poner

If Eliminar = -1 Then
DoCmd.SetWarnings False
DoCmd.RunSQL "insert into historico select NumTaquilla,nombre, observaciones from Taquillas where Numtaquilla=" & Me.Numtaquilla & ""
Nombre = ""
Observaciones=""
Nombre.SetFocus
Eliminar = 0
End If

Así cuando marques una casilla y pulses Enter, te pasara los datos a la tabla Histórico, luego te borra el valor de los cuadros de texto Nombre y Observaciones, el cursor se va a Nombre y la casilla Eliminar te la pone a cero, para empezar de nuevo.

Hola de nuevo,

Muchas gracias por tu rapidísima respuesta. La solución es perfecta para lo que yo quería, pero me da errores. La instrucción:

DoCmd.RunSQL "insert into Bajas select n_taquilla,nombre,observaciones from taquillas where Numtaquilla=" & Me.Numtaquilla & ""

no sé como funciona, entonces no sé si estoy poniendo bien los nombres de los campos. Da el error "No se encontró el método o dato miembro" y marca el último Me.Numtaquilla.

Hay dos tablas, Bajas con los campos: id (autonumérico), n_taquilla, nombre, fecha_alta (tipo fecha), fecha_baja (tipo fecha) y observaciones. Y la tabla Taquillas con los campos: llave, nombre, observaciones, fecha_alta (tipo fecha), y fecha_baja (tipo si/no).

Sé que me voy a poner pesado pero podrías decirme que tengo que poner en la instrucción? Ese Numtaquilla no sé a que se refiere.

Muchas gracias

Un saludo

Hola de nuevo,

Una aclaración: Hay dos tablas, Bajas con los campos: id (autonumérico), n_taquilla, nombre, fecha_alta (tipo fecha), fecha_baja (tipo fecha, este se llena automáticamente con la fecha del momento que se produce la baja) y observaciones. Y la tabla Taquillas con los campos: llave, nombre, observaciones, fecha_alta (tipo fecha), y Eliminar (tipo si/no).

No te había dicho bien los campos.

Muchas gracias

Creo que lo mejor es que, si quieres, repito, si quieres me mandes un mensaje(sólo el mensaje) a [email protected] y te mando un ejemplo, que es como mejor se ve. Si lo haces, en el asunto del mensaje pon tu alias Jose Luis, ya que si no sé quien me escribe ni los abro.

Hola Icue,

Muchas gracias de nuevo. Funciona muy bien lo que me enviaste. Únicamente te quería preguntar como se puede hacer para que no dé error cuando le das a un registro ya vacío, al  dar a depurar se va a la instrucción: 

DoCmd.RunSQL "insert into borrar(n_taquilla, nombre, fecha_alta, observaciones)values(" & Me.N_Taquilla & ",'" & Me.Nombre & "'," & Me.Fecha_Alta & ",'" & Me.Observaciones & "')"  

y da el error:

Se ha producido el error '3134' en tiempo de ejecución:

Error de sintaxis en la instrucción INSERT INTO.

Muchas gracias

Un saludo.

Joer, si alguien teniendo el registro en blanco marca la casilla, lo mejor es que le quites la base. Te la mando por correo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas