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)
-   -   Dudas con Transacciones y Actualizaciones en Caché (https://www.clubdelphi.com/foros/showthread.php?t=14275)

cybergerman 15-09-2004 15:01:12

Dudas con Transacciones y Actualizaciones en Caché
 
Estamos desarrollando un proyecto tipo TPV con manejo de Stock,clientes,etc.

Estuve leyendo sobre transacciones y Actualizaciónes en Caché, pero no se que usar y cuales son las ventajas y desventajas de cada una.

Por lo que lei, Actualizaciones en Cache utiliza internamente transacciones.

Pero no se por ejemplo si "commit" es igual a "ApplyUpdates" o "roolback" a "CancelUpdates".

Si utilizo actualizaciones en cache, debo usar tambien StartTransaction en combinación o no.

Yo probé usar la técnica de actualizaciones con DBGrids y Querys y funciona bien, pero trabajando directamente con el dbgrid; es decir editando y borrando sobre la misma.

Pero en general en este proyecto utilizo unicamente los dbgrids para consulta.
Solamente actualizo las tablas con instrucciones sql y manejo de transacciones.

Conviene utilizar el componente TUpdateSqL???

mamcx 16-09-2004 00:49:15

El cache es local , la transaccion es en la BD.

Se usa cache como un "mini" sistema de transacciones para soportar actualizacion en batches. Por ejemplo, ya que hablas de grid, se activa el cache, el usuario edita, si todo va bien se manda a la BD y se confirma el cache. Es muy usado en aplicaciones Cliente/Servidor. Entonces el flujo de trabajo es:

- Activar cache
- Edicion local
- Confirmar que esta OK
- Enviar al a)Servidor b)Modulo de datos y llamar ApplyUpdates si esta conectado a un provider
- Aqui va las transacciones normales. Se hacen manualmente
- Si todo Ok: Confirmar el cache local. Llamar ApplyUpdates si se envio a un servidor remoto...

El componente TUpdateSql es solo para permitir a consultas de solo lectura, que se puedan editar (porque se les pone como es el insert, el delete y el update)

Los cache son utiles para hacer modificaciones en batch, o para enviar datos de actualizacion a un servidor remoto. De lo contrario (edicion registro a registro) es mas simple hacerlo directo.

Como veo que estas arrancando, visita mi blog que he cubierto varias cosas ya... (Por ejemplo, mala idea usar la BDE....)

cybergerman 16-09-2004 02:02:56

El problema que tengo, es, que por lo que leí ApplyUpdates llama a post,

y CancelUpdates llama al método cancel de la tabla o query; pero en el caso mío

que estoy usando ExecSql como se usa.

Yo lo que hago cuando grabo es esto:

EJ:
if Datamodule.db.intransaction then
datamodule.db.roolback;
try
datamdule.db.starttransaction;
datamodule.queryGeneral.sql.add('Insert....');
//Mensaje de confirmación....
datamodule.queryGeneral.execsql;
datamodule.queryGeneral.commit;
except
datamodule.db.roolback;
raise; ///Todavía no me explico que hace realmente.
end;

mamcx 29-09-2004 21:13:03

Siento la tradanza. El raise despues del except es para que saque el error que causo que el se cancelara la operacion. Es MUY importante porque de lo contrario no sacaria ningun mensaje y quedaria a ciegas el programa...

El codigo como lo tienes esta ok ;)


La franja horaria es GMT +2. Ahora son las 19:29:10.

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