[RESUELTO]Mover datos a una tabla histórica

Discute sobre las herramientas de la base de datos
Responder
finnalcrash
Mensajes: 7
Registrado: Jue May 09, 2019 2:33 pm

[RESUELTO]Mover datos a una tabla histórica

Mensaje por finnalcrash »

Buenos días,

Estoy creando una base de datos para gestionar las diferentes vicisitudes y cursos de personal. La base de datos consta de una tabla principal (PERSONAL) donde están los datos de cada individuo, usando como clave principal el DNI (no debe haber más de una entrada en tiempo actual para cada persona), además dicha tabla incorpora el puesto de trabajo, la fecha de inicio y una fecha de fin. Tengo dos tablas más relacionadas con esta primera tabla por el DNI (pero cuyas claves principales son un autonumérico, permitiendo de esta forma tener más de un registro para cada DNI).

Ahora bien, necesito que, cuando un individuo cese en un puesto de trabajo, pasarlo a una tabla de histórico para, de esta forma, mantener un histórico, valga la redundancia, de su paso por el trabajo, y permitir poder volver a usar el DNI si se vuelve a incorporar, sin perder los datos de su paso anterior.

Tengo claro que, esta nueva tabla, ha de ser igual que la de PERSONAL, pero sin que el DNI sea una clave principal (probablemente use un autonumérico), el problema es cómo genero la macro, para que al pulsar un botón, me copie los datos de PERSONAL a PERSONAL_HISTÓRICO y borre la entrada de la primera tabla. Los cursos y vicisitudes no hace falta pasarlas a histórico, pues siguen valiendo aunque pase el tiempo.

Un saludo y gracias de antemano.



Editado: Por RMG, recuerda que las normas del foro, no permiten ni títulos ni texto en mayúsculas.
Última edición por finnalcrash el Mar May 21, 2019 11:46 am, editado 2 veces en total.
LibreOffice 6.0.7.3 en Linux Mint
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Mover datos a una tabla histórica

Mensaje por Longi »

Bueno!
A falta de ejemplo, se pueden decir algunas cosas.....
Lo primero es que todo lo que cuentas parece correcto en cuanto a estructura.
Lo segundo es que la macro en cuestión tendría que hacer un UPDATE en la tabla histórica usando los datos del DNI en cuestión (en definitiva copiar los datos de una tabla a otra con un SQL).
Lo tercero sería hacer un borrado con otra orden SQL (Delete en este caso) en la tabla digamos 'actual'.
Con esto habrías 'jubilado' al pobre hombre (o mujer).
Si quieres cambiarlo de empresa no sería necesario el DELETE, simplemente un UPDATE con los nuevos datos en la tabla 'actual'.

Con un pequeño ejemplo, sin datos personales (más bien, con ellos ficticios) se podría mirar cómo hacerlo.

Un saludo! ;)
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
finnalcrash
Mensajes: 7
Registrado: Jue May 09, 2019 2:33 pm

Re: Mover datos a una tabla histórica

Mensaje por finnalcrash »

Muchas gracias por la rápida respuesta,

Te dejo una muestra de la base de datos como me dices:

https://mega.nz/#!uiRwGSSC!Y_hcSfsSgy9i ... qDBEcBXMgs

Un saludo.
LibreOffice 6.0.7.3 en Linux Mint
finnalcrash
Mensajes: 7
Registrado: Jue May 09, 2019 2:33 pm

Re: Mover datos a una tabla histórica

Mensaje por finnalcrash »

Mientras no encuentro una solución exacta para lo que quiero, he decidido crear una tabla a parte de puestos de trabajo, con fecha de inicio y fecha de fin, y en la tabla de personal he puesto una casilla de verificación para activarla si es trabajador actual o no. De esta forma el histórico de puestos de trabajo existe sin necesidad de repetir DNI.

Un saludo.

(Lo dejaré un tiempo activo, por si alguien propone un código para el primer caso, siempre es bueno por si se necesita en el futuro)
LibreOffice 6.0.7.3 en Linux Mint
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Mover datos a una tabla histórica

Mensaje por RMG »

Hola,

Viendo un poco tu BD y lo que quieres hacer, te ofrezco esta sugerencia de como la enfocaría. Fijate que no hace falta un histórico, simplemente poniendo fecha de cese el puesto ya no te aparece en el formulario personal, pero si lo tienes internamente.

Saludos
Adjuntos
GEPE31_foro.zip
(18.79 KiB) Descargado 189 veces
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
finnalcrash
Mensajes: 7
Registrado: Jue May 09, 2019 2:33 pm

Re: Mover datos a una tabla histórica

Mensaje por finnalcrash »

RMG escribió:Hola,

Viendo un poco tu BD y lo que quieres hacer, te ofrezco esta sugerencia de como la enfocaría. Fijate que no hace falta un histórico, simplemente poniendo fecha de cese el puesto ya no te aparece en el formulario personal, pero si lo tienes internamente.

Saludos
Muchas gracias, la estudiaré a fondo. La razón de mantener un histórico, principalmente, es de cara a poder realizar consultas de cuantos puestos cambiaron de gente durante un período de tiempo, saber si alguien alguna vez fue miembro de la empresa, etc...

En una primera visual, parece que es útil tal y como la planteas.

Muchas gracias.
LibreOffice 6.0.7.3 en Linux Mint
finnalcrash
Mensajes: 7
Registrado: Jue May 09, 2019 2:33 pm

Re: Mover datos a una tabla histórica

Mensaje por finnalcrash »

La idea que planteas RGM, es buena y me gusta la estética pero, como expliqué, una de los motivos por los que necesito una tabla histórica es la posibilidad de que un empleado que marchó, vuelva y ocupe otro puesto, sin perder los datos de cuando estaba en el anterior puesto. En tu ejemplo no puedo introducir dos veces al mismo individuo, por lo que al volver a darlo de alta o borro los datos anteriores o no pedo.

No obstante muchas gracias, ya que, como digo, me gusta la estética que has usado.
LibreOffice 6.0.7.3 en Linux Mint
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Mover datos a una tabla histórica

Mensaje por RMG »

Hola,

Sí que puedes poner más de un puesto a un docente, lo que no puedes es tener un docente con el DNI duplicado. Compruebalo y veras que puedes.
Es más puedes hacer con la fecha de baja que no te aparezca en el listado y si vuelve simplemente le quitas la fecha de baja.

Quizas no puedas poner el puesto porque en mi ejemplo hay un pequeño error, que lo he detectado al probar, simplemente en el listado del puesto despliega el generador de consultas y pones además de puesto y funcion que yo puse el ID_Puesto, para que se pueda guardar el registro.

Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
finnalcrash
Mensajes: 7
Registrado: Jue May 09, 2019 2:33 pm

Re: Mover datos a una tabla histórica

Mensaje por finnalcrash »

RMG escribió:Hola,

Sí que puedes poner más de un puesto a un docente, lo que no puedes es tener un docente con el DNI duplicado. Compruebalo y veras que puedes.
Es más puedes hacer con la fecha de baja que no te aparezca en el listado y si vuelve simplemente le quitas la fecha de baja.

Quizas no puedas poner el puesto porque en mi ejemplo hay un pequeño error, que lo he detectado al probar, simplemente en el listado del puesto despliega el generador de consultas y pones además de puesto y funcion que yo puse el ID_Puesto, para que se pueda guardar el registro.

Saludos
Ok entonces probaré a fondo. Siendo como dices la solución es muy buena. No obstante, seguiré intentando crear un código que me permita hacer lo que digo, únicamente por orgullo personal de lograrlo.jejejeje.

Dejaré el hilo abierto un tiempo, por si alguien más quiere aportar alguna idea de cómo hacerlo.

Un saludo.
LibreOffice 6.0.7.3 en Linux Mint
joaofmateus
Mensajes: 33
Registrado: Lun Dic 05, 2016 12:53 pm

Re: Mover datos a una tabla histórica

Mensaje por joaofmateus »

Aquí tienes todo lo que necesitas. ¡Es sólo adaptar!

Sub Contabiliza()
Dim DatabaseContext As Object
Dim DataSource As Object
Dim Connection As Object
Dim Statement As Object
Dim ResultSet As Object
Dim oBarraEstado As Object
Dim co1 As Integer


'Inicia o processo de contabilização

'Msgbox "A iniciar o processo de Contabilização"


'Referencia a barra de estado do documento activo
oBarraEstado = ThisComponent.getCurrentController.StatusIndicator
'Estabelece o texto inicial e o limite da barra de progresso
oBarraEstado.start( "Processo de Contabilização a decorrer.Aguarde...", 3 )


'Limpa todos os movimentos contabilisticos
'Primeiro Processo

'Esta Conexão só funciona em Bases de Dados Registadas
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource = DatabaseContext.getByName("contabilidade")
Connection = DataSource.GetConnection("","")
'Connection=thisdatabasedocument.CurrentController.activeconnection Com o meu AutoExec dá erro nesta linha por isso necessário registar base de dados

Statement = Connection.createStatement()
ResultSet = Statement.executeQuery("DELETE FROM ""tMOVIMENTOS_CONTA"";")
'Estabelece o valor da barro de progresso
oBarraEstado.setValue( 1 )
'E o texto
oBarraEstado.setText ("Limpou os Dados Contabilísticos")
'Espera um segundo
Wait 1000

'Contabiliza os movimentos a Débito
'Segundo Processo

'Esta Conexão só funciona em Bases de Dados Registadas
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource = DatabaseContext.getByName("contabilidade")
Connection = DataSource.GetConnection("","")
'Connection=thisdatabasedocument.CurrentController.activeconnection
Statement = Connection.createStatement()
ResultSet = Statement.executeQuery("INSERT INTO ""tMOVIMENTOS_CONTA""(""ID_MOV"",""COD_CONTA"",""DATA_MOV"",""DESC_MOV"",""DEBITO"",""CREDITO"")SELECT ""ID_MOV"",""CONTA_DEB"" AS ""COD_CONTA"",""DATA_MOV"",""DESC_MOV"",""VALOR"" as ""DEBITO"",0 AS ""CREDITO"" FROM ""tMOVIMENTOS"";")
'Estabelece o valor da barro de progresso
oBarraEstado.setValue( 2 )
' E o texto
oBarraEstado.setText ("Inseriu os valores a Débito")
'Espera um segundo
Wait 1000

'Contabiliza os movimentos a Crédito
'Terceiro Processo

'Esta Conexão só funciona em Bases de Dados Registadas
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource = DatabaseContext.getByName("contabilidade")
Connection = DataSource.GetConnection("","")
'Connection=thisdatabasedocument.CurrentController.activeconnection
Statement = Connection.createStatement()
ResultSet = Statement.executeQuery("INSERT INTO ""tMOVIMENTOS_CONTA""(""ID_MOV"",""COD_CONTA"",""DATA_MOV"",""DESC_MOV"",""DEBITO"",""CREDITO"")SELECT ""ID_MOV"",""CONTA_CRED"" AS ""COD_CONTA"",""DATA_MOV"",""DESC_MOV"",0 as ""DEBITO"",""VALOR"" AS ""CREDITO"" FROM ""tMOVIMENTOS"";")
'Estabelece o valor da barro de progresso
oBarraEstado.setValue( 3 )
' E o texto
oBarraEstado.setText ("Inseriu os valores a Crédito")
'Espera um segundo
Wait 1000



'Finaliza a barra de progresso para devolver o controlo ao utilizador
oBarraEstado.end()
Msgbox "Processo de Contabilização concluído"

End Sub

Procedimientos que deben realizarse.

1. Cree una macro similar a la sub "Contabiliza"
2. Con un bota de acción en un formulario u otro procedimiento similar, ejecute la macro
OpenOffice 4.1.6
Windows 10
finnalcrash
Mensajes: 7
Registrado: Jue May 09, 2019 2:33 pm

Re: Mover datos a una tabla histórica

Mensaje por finnalcrash »

Muchas gracias, lo voy a estudiar a fondo y te comento.

Actualizo: En principio, a falta de adaptarlo un poco más a mis necesidades, el código parece que funciona. Muchas gracias.
LibreOffice 6.0.7.3 en Linux Mint
Responder