Page 1 of 1

Implementar RollBack para garantizar integridad referencial

Posted: Mon Oct 08, 2007 5:43 pm
by jose_murugosa
Pues....

Me preguntaba si es posible con FWH lograr alguna forma de rollback al almacenar _ en varias tablas, de modo de que si en el proceso algo sucede, revertir la operación y garantizar integridad referencial.

O si no hay otra que usar ADS o cualquier otro cliente/servidor

No pretendo garantizar que siempre se graben los datos, ni que el software se vuelva "magicamente" cliente/servidor, pero que si se produce una colisión o cualquier cosa que impida guardar un dato en parte de un proceso de grabación, se produzca un rollback y se cancele el ingreso, de modo de avisar al operador que la operación no puede ser hecha.

Es preferible que algo no se grabe a que se grabe por la mitad... no?

Quizá mi pregunta sea un disparate, (de hecho soy algo rebuznante en la pregunta) pero... hay funciones de FWH y/o [x]Harbour que combinadas puedan ir en esta dirección?

Se puede implementar algo así en el futuro en FWH?

Apreciaré ser desasnado al respecto.

Posted: Mon Oct 08, 2007 6:00 pm
by MOISES
El grupo eidos editó un libro sobre programación en red con clipper en el que tenía esas funciones. El libro incluía el código fuente en un disco, pero no se dónde lo tengo.

Funcionaba bastante bien: tenía roll back, semáforos, etc. A ver si alguien lo tiene.

Posted: Mon Oct 08, 2007 6:54 pm
by dbzap
Jose...
Yo no pediria re-inventar la rueda...
Los sistemas transaccionales llegaron antes que nosotros a este ruedo...
En SQL y cliente/servidor, todo funcina perfecto con eso.
Nosotros desde que _ a cliente/servidor ( primero con ADS y luego M$SQL-Server ) nunca mas un transaccion quedo a medio camino.
Saludos

Posted: Mon Oct 08, 2007 7:00 pm
by jose_murugosa
dbzap wrote:Jose...
Yo no pediria re-inventar la rueda...
Los sistemas transaccionales llegaron antes que nosotros a este ruedo...
En SQL y cliente/servidor, todo funcina perfecto con eso.
Nosotros desde que _ a cliente/servidor ( primero con ADS y luego M$SQL-Server ) nunca mas un transaccion quedo a medio camino.
Saludos
Comprendo, y de hecho, en enero tendré que implementar para un cliente un sistema que ahora está en arquitectura distribuída, en cliente/servidor con el fin de dar las garantías necesarias a los datos, para lo cual adquirirán ADS.

El tema es que muchos softs pequeños, no son vendibles con ADS o pagando MySQL.

Es para esta clase de software para la que sería bueno poder implementar funciones de rollback y así al menos cuidar la integridad referencial y permitir al usuario reingresar un dato que no pudo grabarse a posteriori, sin necesidad de que el programador tenga que ir a limpiar los datos que se grabaron por la mitad para restaurar la integridad referencial.

Posted: Mon Oct 08, 2007 7:02 pm
by Baxajaun
Jose,

si no recuerdo mal, la TDBF de Manu Expósito soportaba commit y rollback.

Saludos,

Félix

Posted: Mon Oct 08, 2007 9:57 pm
by FiveWiDi
jose_murugosa wrote:
dbzap wrote:Jose...
Yo no pediria re-inventar la rueda...
Los sistemas transaccionales llegaron antes que nosotros a este ruedo...
En SQL y cliente/servidor, todo funcina perfecto con eso.
Nosotros desde que _ a cliente/servidor ( primero con ADS y luego M$SQL-Server ) nunca mas un transaccion quedo a medio camino.
Saludos
Comprendo, y de hecho, en enero tendré que implementar para un cliente un sistema que ahora está en arquitectura distribuída, en cliente/servidor con el fin de dar las garantías necesarias a los datos, para lo cual adquirirán ADS.

El tema es que muchos softs pequeños, no son vendibles con ADS o pagando MySQL.

Es para esta clase de software para la que sería bueno poder implementar funciones de rollback y así al menos cuidar la integridad referencial y permitir al usuario reingresar un dato que no pudo grabarse a posteriori, sin necesidad de que el programador tenga que ir a limpiar los datos que se grabaron por la mitad para restaurar la integridad referencial.
Tal como dice Félix, creo que con la clase TDBF de Manuel Expósito podrías disponer ROLLBACK.

Podría ser algo así:

If oTDBFperson:Save() .and. ;
oTDBFdomicilio:Save() .and. ;
oTDBFfacturas:Save()

MsgAlert("Ea", "Soy el mejor" )
Else

oTDBFperson:RollBack():Save()
oTDBFdomicilio:RollBack():Save()
oTDBFfacturas:RollBack():Save()

MsgAlert("Ea", "No pude grabar" )

EndIf

Saludos
Carlos G.

Posted: Mon Oct 08, 2007 10:00 pm
by jose_murugosa
FiveWiDi wrote:
jose_murugosa wrote:
dbzap wrote:Jose...
Yo no pediria re-inventar la rueda...
Los sistemas transaccionales llegaron antes que nosotros a este ruedo...
En SQL y cliente/servidor, todo funcina perfecto con eso.
Nosotros desde que _ a cliente/servidor ( primero con ADS y luego M$SQL-Server ) nunca mas un transaccion quedo a medio camino.
Saludos
Comprendo, y de hecho, en enero tendré que implementar para un cliente un sistema que ahora está en arquitectura distribuída, en cliente/servidor con el fin de dar las garantías necesarias a los datos, para lo cual adquirirán ADS.

El tema es que muchos softs pequeños, no son vendibles con ADS o pagando MySQL.

Es para esta clase de software para la que sería bueno poder implementar funciones de rollback y así al menos cuidar la integridad referencial y permitir al usuario reingresar un dato que no pudo grabarse a posteriori, sin necesidad de que el programador tenga que ir a limpiar los datos que se grabaron por la mitad para restaurar la integridad referencial.
Tal como dice Félix, creo que con la clase TDBF de Manuel Expósito podrías disponer ROLLBACK.

Podría ser algo así:

If oTDBFperson:Save() .and. ;
oTDBFdomicilio:Save() .and. ;
oTDBFfacturas:Save()

MsgAlert("Ea", "Soy el mejor" )
Else

oTDBFperson:RollBack():Save()
oTDBFdomicilio:RollBack():Save()
oTDBFfacturas:RollBack():Save()

MsgAlert("Ea", "No pude grabar" )

EndIf

Saludos
Carlos G.
Felix y Carlos, Gracias por la información, procuraré obtener la clase y probarla, gracias desde ya :D .

Posted: Tue Oct 09, 2007 1:44 am
by R.F.
Como yo siempre he dicho.... donde este un buen ADS que se quite todo lo demas:

AdsBeginTransaction()
....
....

Append.....
Replaces......
commites.....
......
.....
AdsCommitTransaction()

Si el programa se "rompe" entre un ADSBeginTransaction() y un ADSCommitTransaction() el Rollback se hace automaticamente.

Tambien es posible llamar directamente a AdsRollBackTransaction()

Nos vemos en Santiago de Chile el dia 13 de Octubre
Buenos Aires del 3 al 5 de Noviembre.

Posted: Tue Oct 09, 2007 2:20 pm
by FiveWiDi
RF wrote:Como yo siempre he dicho.... donde este un buen ADS que se quite todo lo demas:

AdsBeginTransaction()
....
....

Append.....
Replaces......
commites.....
......
.....
AdsCommitTransaction()

Si el programa se "rompe" entre un ADSBeginTransaction() y un ADSCommitTransaction() el Rollback se hace automaticamente.

Tambien es posible llamar directamente a AdsRollBackTransaction()

Nos vemos en Santiago de Chile el dia 13 de Octubre
Buenos Aires del 3 al 5 de Noviembre.
Rene,

Buscando integridad, SQL (aunque yo de eso sólo se escribir su nombre).

Hay que tener en cuenta lo que dice Jose:
"El tema es que muchos softs pequeños, no son vendibles con ADS o pagando MySQL. "

Para estos soft pequeños que solución les darías?

Saludos
Carlos G.

Posted: Tue Oct 09, 2007 3:11 pm
by Marcelo Via Giglio
Hola

una solucion podria ser SQLite, mira productos cono RealSQL (REALBASIC) han desarrollado sobre SQLite, pongo SQLlite por que es peque~no, ahora si quieres algo robusto de verdad (comparado con Oracle) ademas de gratis lo tienes a Postgres

solo una opinion personal

saludos

Marcelo
FiveWiDi wrote:
RF wrote:Como yo siempre he dicho.... donde este un buen ADS que se quite todo lo demas:

AdsBeginTransaction()
....
....

Append.....
Replaces......
commites.....
......
.....
AdsCommitTransaction()

Si el programa se "rompe" entre un ADSBeginTransaction() y un ADSCommitTransaction() el Rollback se hace automaticamente.

Tambien es posible llamar directamente a AdsRollBackTransaction()

Nos vemos en Santiago de Chile el dia 13 de Octubre
Buenos Aires del 3 al 5 de Noviembre.
Rene,

Buscando integridad, SQL (aunque yo de eso sólo se escribir su nombre).

Hay que tener en cuenta lo que dice Jose:
"El tema es que muchos softs pequeños, no son vendibles con ADS o pagando MySQL. "

Para estos soft pequeños que solución les darías?

Saludos
Carlos G.