Implementar RollBack para garantizar integridad referencial

Implementar RollBack para garantizar integridad referencial

Postby jose_murugosa » Mon Oct 08, 2007 5:43 pm

Pues....

Me preguntaba si es posible con FWH lograr alguna forma de rollback al almacenar los campos 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.
Saludos/Regards,
José Murugosa
"Los errores en programación, siempre están entre la silla y el teclado y la IA!!"
User avatar
jose_murugosa
 
Posts: 1180
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay

Postby MOISES » Mon Oct 08, 2007 6:00 pm

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.
MOISES
 
Posts: 838
Joined: Wed Aug 22, 2007 10:09 am

Postby dbzap » Mon Oct 08, 2007 6:54 pm

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 nos cambiamos a cliente/servidor ( primero con ADS y luego M$SQL-Server ) nunca mas un transaccion quedo a medio camino.
Saludos
Julio Gonzalez V.
RANDOM S.A.
SISTEMICA S.A.
User avatar
dbzap
 
Posts: 189
Joined: Mon Nov 07, 2005 7:36 pm
Location: Chile

Postby jose_murugosa » Mon Oct 08, 2007 7:00 pm

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 nos cambiamos 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.
Saludos/Regards,
José Murugosa
"Los errores en programación, siempre están entre la silla y el teclado y la IA!!"
User avatar
jose_murugosa
 
Posts: 1180
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay

Postby Baxajaun » Mon Oct 08, 2007 7:02 pm

Jose,

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

Saludos,

Félix
User avatar
Baxajaun
 
Posts: 968
Joined: Wed Oct 19, 2005 2:17 pm
Location: Gatika. Bizkaia

Postby FiveWiDi » Mon Oct 08, 2007 9:57 pm

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 nos cambiamos 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.
FiveWiDi
 
Posts: 1190
Joined: Mon Oct 10, 2005 2:38 pm

Postby jose_murugosa » Mon Oct 08, 2007 10:00 pm

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 nos cambiamos 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 .
Saludos/Regards,
José Murugosa
"Los errores en programación, siempre están entre la silla y el teclado y la IA!!"
User avatar
jose_murugosa
 
Posts: 1180
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay

Postby R.F. » Tue Oct 09, 2007 1:44 am

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.
Saludos
R.F.
R.F.
 
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Postby FiveWiDi » Tue Oct 09, 2007 2:20 pm

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.
FiveWiDi
 
Posts: 1190
Joined: Mon Oct 10, 2005 2:38 pm

Postby Marcelo Via Giglio » Tue Oct 09, 2007 3:11 pm

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.
Marcelo Via Giglio
 
Posts: 1065
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 52 guests