FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Ayuda con Cached Updates
Tengo una aplicación sencilla de captura de facturas.
Uso Delphi 5, y componentes sencillos: TTable (con CachedUpdates = True) y TDataSource con un DBGrid . Para trabajar he elegido usar Cached Updates y todo trabajaba bien hasta que decidí tratar de mostrar un ProgressBar que reflejara el progreso de la actualización. Para tal efecto decidí usar el evento OnUpdateRecord que sería el que afectaría el avance en el ProgressBar. Sin embargo no funciona como esperaba. He escrito el valor de UpdateAction a uaApplied, pero en la tabla no se escribe nada. No me marca ningún error, ni nada. Si no le doy a UpdateAction ningún valor, entonces me marca un error de 'Table is Read Only'. Si elimino el evento OnUpdateRecord, la actualización de lleva a cabo correctamente. Resumiendo: procedure TFEditFactsMany.TFactsGeneralUpdateRecord(DataSet: TDataSet; UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction); begin UpdateAction:= uaApplied end; no actualiza la tabla procedure TFEditFactsMany.TFactsGeneralUpdateRecord(DataSet: TDataSet; UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction); begin // otro código cualquiera que no // cambia el puntero de registro end; marca 'Table Is ReadOnly' y sin el evento todo trabaja bien. Ojalá alguien me pueda dar una pista de porqué este comportamiento, qué estoy haciendo mal. O bien, si hay otra forma de presentar un ProgressBar al usuario que muestre el avance de la actualización. De antemano muchas gracias. |
#2
|
||||
|
||||
No se exactamente a que te referis con el progreso de la actualización... pero supongo que es mostrar al usuario el porcentaje de progreso cuando se están aplicando los cambios a la base de datos. Si es esto lo que queres hacer, salvo que el usuario quiera actualizar millones de registros, te recomiendo abandonar la idea, porque sencillamente estas trabajando de mas.
El evento OnUpdateRecord sirve para sustituir el comportamiento del BDE al hacer las actualizaciones, para asumir nosotros esa responsabilidad. El significado de los parámetros es: UpdateKind: ukInsert: Hay que insertar un nuevo registro con los datos de la fila activa ukModify: Hay que actualizar un registro existente con los datos de la fila activa ukDelete: Hay que borrar el registro correspondiente a la fila activa. UpdateAction: uaFail: Lanza una excepción, indicando el fallo de las actualizaciones uaAbort: Lanza una excepción silenciosa (EAbort) uaSkip: Ignora el registro contenido en la fila activa, y continua con el siguiente uaApplied: La actualización se realizó exitosamente. Como te comento, la responsabilidad de realizar las actualizaciones al utilizar este evento, es tuya. Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#3
|
|||
|
|||
Te agradezo el tiempo que te tomaste para responder mi cuestión.
Aunque sí había notado que las actualizaciones a las bases eran muy rápidas, por cuestiones de pura presentación sí quería mostrar una barra de progreso. Creo que tomaré tu sugerencia y no lo haré, pero aún así me intriga el comportamiento del evento OnUpateRecord. Si yo voy a tomar la responsabilidad de efectuar las actualizaciones, ¿cómo lo hago? Estoy pensando que cuando creé el evento y escribí UpdateAction:= uaApplied; como única línea del evento, la tabla no se actualizaba, ¿como debo actualizarla entonces?. De nueva cuenta, gracias por tu ayuda. Saludos. |
#4
|
||||
|
||||
Pues podes hacerlo con un TQuery, de la forma:
Código:
Update MiTabla Set Campo1 = :New_Campo1 where CampoLlave = :CampoLlave; Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#5
|
|||
|
|||
Creo que ya entendí... voy a experimentar y a ver que pasa.
Saludos. |
|
|
|