Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-08-2019
Juanfran68 Juanfran68 is offline
Registrado
 
Registrado: ago 2019
Posts: 4
Poder: 0
Juanfran68 Va por buen camino
Question 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
Responder Con Cita
  #2  
Antiguo 21-08-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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
Responder Con Cita
  #3  
Antiguo 21-08-2019
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
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
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #4  
Antiguo 21-08-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por movorack Ver Mensaje
Y esta tabla de histórico podría ser alimentada mediante un trigger
Por supuesto, debe ser así.
Responder Con Cita
  #5  
Antiguo 22-08-2019
Juanfran68 Juanfran68 is offline
Registrado
 
Registrado: ago 2019
Posts: 4
Poder: 0
Juanfran68 Va por buen camino
Arrow

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
Responder Con Cita
  #6  
Antiguo 22-08-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Desconocemos los requisitos de lo que tienes que conseguir finalmente. Si te viene bien así, pues hazlo así.
Responder Con Cita
  #7  
Antiguo 22-08-2019
Juanfran68 Juanfran68 is offline
Registrado
 
Registrado: ago 2019
Posts: 4
Poder: 0
Juanfran68 Va por buen camino
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.
Responder Con Cita
  #8  
Antiguo 22-08-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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.
Responder Con Cita
  #9  
Antiguo 22-08-2019
Juanfran68 Juanfran68 is offline
Registrado
 
Registrado: ago 2019
Posts: 4
Poder: 0
Juanfran68 Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 08:50:55.


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
Copyright 1996-2007 Club Delphi