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 05-08-2003
Maxter Maxter is offline
Registrado
 
Registrado: ago 2003
Ubicación: México
Posts: 3
Poder: 0
Maxter Va por buen camino
Question 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.
Responder Con Cita
  #2  
Antiguo 06-08-2003
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

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
Responder Con Cita
  #3  
Antiguo 06-08-2003
Maxter Maxter is offline
Registrado
 
Registrado: ago 2003
Ubicación: México
Posts: 3
Poder: 0
Maxter Va por buen camino
Smile

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.
Responder Con Cita
  #4  
Antiguo 06-08-2003
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Pues podes hacerlo con un TQuery, de la forma:

Código:
Update MiTabla
     Set Campo1 = :New_Campo1
 where CampoLlave = :CampoLlave;
En este evento tenes acceso a las propiedades Old_Value y New_Value (o solo Value, no recuerdo) de los fields del DataSet, que son necesarios para las actualizaciones y los borrados.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 07-08-2003
Maxter Maxter is offline
Registrado
 
Registrado: ago 2003
Ubicación: México
Posts: 3
Poder: 0
Maxter Va por buen camino
Thumbs up

Creo que ya entendí... voy a experimentar y a ver que pasa.

Saludos.
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


La franja horaria es GMT +2. Ahora son las 04:44:07.


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