Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Añadir registros manualmente ClientDataset.Delta (https://www.clubdelphi.com/foros/showthread.php?t=94141)

Juanfran68 21-08-2019 13:55:21

Añadir registros manualmente ClientDataset.Delta
 
Buenos días a todos:

a ver si alguien me puede "iluminar" con la siguiente situación

Estoy desarrollando una aplicación para una gestión de presupuestos. He diseñado dos tablas (maestro-detalle), la tabla maestro con los datos generales del presupuesto, y la tabla detalle con los artículos que componen el presupuesto. Estas tablas están creadas y funcionan sin problemas.

Aquí viene el "detalle". El usuario necesita mantener un histórico de los cambios de los registros de detalle, es decir si un registro se modifica, realmente no se va a modificar sino que se generará automáticamente un nuevo registro con los cambios en dicho registro, utilizando para ello un "número de versión"

Versión Artículo Cantidad
1 Articulo 1 2
2 Articulo 1 3

En el ejemplo anterior se modifica la cantidad del artículo (2 -> 3), el registro internamente no se modifica sino que se crea un nuevo registro incrementando el número de versión y con la cantidad modificada. Esto es necesario ya que el usuario necesita poder saber los diferentes cambios que ha sufrido un mismo artículo

Trabajo con Delphi Tokyo, DbExpress, Firebird

Muchas gracias anticipadas

Casimiro Notevi 21-08-2019 14:21:31

Puedes tener una tabla aparte con las revisiones anteriores.
id del documento
línea del documento
número de revisión
artículo
otros campos

movorack 21-08-2019 15:11:03

Cita:

Empezado por Casimiro Notevi (Mensaje 533217)
Puedes tener una tabla aparte con las revisiones anteriores.
id del documento
línea del documento
número de revisión
artículo
otros campos

Y esta tabla de histórico podría ser alimentada mediante un trigger

Casimiro Notevi 21-08-2019 16:04:55

Cita:

Empezado por movorack (Mensaje 533218)
Y esta tabla de histórico podría ser alimentada mediante un trigger

Por supuesto, debe ser así.
^\||/^\||/^\||/

Juanfran68 22-08-2019 08:25:28

Buenos días y muchas gracias por vuestras respuestas. Esta solución que me proponéis ya me ha pasado por la cabeza y no la descarto. La que estoy estudiando ahora es la posibilidad, como comenté en mi primer mensaje, de que cuando se edite un registro, convertir esa edición en una inserción, correspondería a la nueva versión del registro modificado.

Vers. - nº lin. - artículo - cantidad
1 - 1 - ARTICULO 1 - 3
2 - 1 - ARTICULO 1 - 6

En este caso se modificaría el registro (linea 1) cambiando la cantidad de 3 a 6. Al aplicar las actualizaciones (ApplyUpdates) el primer registro no se actualizaría y se insertaría el nuevo registro, correspondiente a la versión 2. Para ello estoy estudiando el comportamiento del evento OnUpdateData del datasetprovider y el valor de la propiedad UpdateStatus.

¿Qué os parece la idea?

Gracias de nuevo

Casimiro Notevi 22-08-2019 09:32:19

Desconocemos los requisitos de lo que tienes que conseguir finalmente. Si te viene bien así, pues hazlo así.

Juanfran68 22-08-2019 11:26:50

Gracias de nuevo por tu respuesta

Al final de lo que se trata es que cuando se modifica un registro, realmente no se modifica sino que se inserta un nuevo registro. Estoy valorando las opciones que comentaba en mi anterior mensaje, y me interesaba saber si os parecía viable, si alguien tiene experiencia en ese tipo de escenarios (alterar el contenido de la propiedad delta del clientDataset, algo así como que cuando dataset.updatestatus=usmodified insertar manualmente el registro en el Delta).

De todas formas, entiendo perfectamente lo que me propones (trigger y tabla adicional con el registro de cambios).

Gracias otra vez.

Casimiro Notevi 22-08-2019 11:33:22

También está bien como dices. Si tienes que presentar todos los cambios. En caso contrario tendrás que hacer un max(revision) from cada línea en los select que necesites para obtener la última versión válida del registro.

Juanfran68 22-08-2019 11:40:05

El usuario podrá visualizar las diferentes versiones del presupuesto. Lo que ocurre es que no tengo claro si trabajar directamente con el Delta, o utilizar una tabla más con todos los cambios de las líneas.
Tengo que elegir entre una manera de hacerlo u otra. :confused:. Estoy valorando pros y contras de las dos opciones

Gracias otra vez por tu ayuda


La franja horaria es GMT +2. Ahora son las 19:06:02.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi