Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema con transacciones (https://www.clubdelphi.com/foros/showthread.php?t=83078)

glopez 09-05-2013 12:56:22

Problema con transacciones
 
Hola estoy desarrollando un ventana de ventas en la que quiero ir dejando en espera tickets que no están finalizados. Es decir tengo una venta activa y comienzo con otra sin finalizar la primera para luego poder finalizarla mas tarde. El problema que tengo es que cuando finalizo una de ellas como todo se encuentra en la misma transacción se me confirman las dos. Os agradecería que me dierais alguna sugerencia para hacer esto.

He estado mirando información sobre savepoint pero creo que con esto no se puede hacer. Utilizo firebird 2.1 y componentes FIBPlus.

Neftali [Germán.Estévez] 09-05-2013 13:55:18

Si necesitas tener varios tickets "Abiertos", tal vez deberías utilizar 2 tablas.
Una temporal para los tickets mientras trabajas y otra "definitiva" para almacenarlos una vez están completados.

De todas formas, son pocos detalles para saber si es correcto lo que te estoy comentando.

Al González 09-05-2013 15:28:08

Puedes usar un conjunto de datos para cada instancia del formulario, es decir, un data set por cada ventana abierta.

Es de suponer que pones, como debe ser, el conjunto de datos de FIBPlus en un DataModule. En caso de que uses Delphi 7 o XE2, te serviría un componente DataSource con capacidades de clonación que anda por ahí.

Espero no resultar "SPAMoso" con estas referencias. :o

Saludos.

Casimiro Notevi 09-05-2013 15:50:33

Cita:

Empezado por Al González (Mensaje 460118)
Espero no resultar "SPAMoso" con estas referencias.

Es libre y gratis, distinto sería que cobraras por ello, aunque ni así, ¡cuántas veces recomendamos productos que son pago!, muchas veces.

glopez 09-05-2013 17:24:47

La solución que se me había ocurrido era crear un array de dataset por cada ticket que tengo abierto. Ya que todo se realiza en el mismo form y con un navigator voy seleccionando el registro maestro(venta) que necesito. Pero lo veía muy demasiado complejo, Y ademas también tendría que poner una transacción para cada registro, para poder confirmar una venta en concreto. Y desde el navigator tengo que poder pasar de una venta a la otra por lo que sería preferible que estuvieran dentro de la misma transacción. De todas formas le echado un vistazo a los componentes que mencionas y parecen muy interesantes. ¿Cuando se clona el dataset también lo hace la transacción?. ¿Podría hacer un commint de un ticket y que los demás no se confirmaran?

Al González 09-05-2013 18:01:31

Cita:

Empezado por glopez (Mensaje 460130)
[...] echado un vistazo a los componentes que mencionas y parecen muy interesantes. ¿Cuando se clona el dataset también lo hace la transacción?. ¿Podría hacer un commint de un ticket y que los demás no se confirmaran?

No conozco lo suficiente los componentes FIBPlus, pero, por lo que mencionas, supongo que usas algún objeto central de tipo conexión, data base o transacción, y que además las ventas pueden ejecutar algún Post antes de ser confirmadas. Para captura con varios conjuntos de datos (maestro-detalle, por ejemplo), mantengo todo en memoria hasta que ya es seguro enviar al servidor (uso ClientDataSets). Para conseguir esto en FIBPlus, me parece que debes poner su propiedad CachedUpdates en True. Así cada Post que hagas se mantendrá en memoria, hasta que llames a los métodos ApplyUpdates (para mandar la información a la base de datos) o CancelUpdates (para cancelar lo que hayas capturado).

Con esa técnica se disipa la necesidad de manejar conexiones o transacciones separadas (aunque si esto fuese menester también, en GHF existe la función ghClone que permite clonar "cualquier" componente).

Saludos. :)

glopez 09-05-2013 18:05:56

ok, muchas gracias, lo probaré y ya os cuento.

newtron 10-05-2013 10:57:05

Hola.

Igual es una barbaridad lo que yo hago pero lo suelto.

Yo lo que hago para esto es tener 3 formularios iguales cargados en memoria y a los que se puede llamar con un botón para traer a pantalla un ticket u otro, cuando hay algún ticket en curso le cambio el color al fondo del botón para que se sepa que hay una venta pendiente en otra pantalla.

[IMG]URL=http://www.casimages.es/i/130510103742611565.jpg.html]


La franja horaria es GMT +2. Ahora son las 06:02:24.

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