FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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 |
#2
|
||||
|
||||
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 |
#3
|
||||
|
||||
Y esta tabla de histórico podría ser alimentada mediante un trigger
__________________
Buena caza y buen remar... http://mivaler.blogspot.com |
#4
|
||||
|
||||
Por supuesto, debe ser así.
|
#5
|
|||
|
|||
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 |
#6
|
||||
|
||||
Desconocemos los requisitos de lo que tienes que conseguir finalmente. Si te viene bien así, pues hazlo así.
|
#7
|
|||
|
|||
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. |
#8
|
||||
|
||||
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.
|
#9
|
|||
|
|||
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. . Estoy valorando pros y contras de las dos opciones Gracias otra vez por tu ayuda |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Lentitud al leer ClientDataSet.ChangeCount / Delta | rcarrillom | Providers | 14 | 11-06-2014 19:21:16 |
buscar registros de un ClientDataSet a otro clientDataSet | novato_erick | Conexión con bases de datos | 2 | 02-02-2013 20:48:09 |
añadir campos a un ClientDataSet en ejecución | sanpra | Varios | 2 | 24-10-2007 13:25:07 |
por que duplicidad de registros con clientdataset sin ingresar registros ...mysql | Arturo | MySQL | 3 | 05-09-2006 18:39:37 |
Bloqueo de registros manualmente | Will | Firebird e Interbase | 6 | 17-06-2005 17:38:38 |
|