¿Sqlrollback( ) funciona en cliente servidor?

Expertos nuevamente dispuestoa dar las merecidas 5 estrellas al que me saque de la duda, resulta que estoy probando una aplicación fox-sql server 2000, y todo parece indicar que al hacer las transdacciones en el modo manual, cuando deshago los cambios con los comandos SQLROLLBACK(conexión), y ROLLBACK, no me hace caso es decir, al primer tableupdate de mi vista, se actualizan los datos del servidor, y no hay manera de revertirlos con los comandos que mencione anterioemnete, ¿es qué acaso no sirven?, o algo estoy haciendo mal

1 respuesta

Respuesta
1
SQLRollBack si funciona, sólo que para complementarlo debes utilizar las transacciones manuales, esto se hace mediante el uso de la función SQLSetProp()...
lnHandle = SQLConnect("MiConexion")
IF lnHandle > 0
IF SQLSETPROP(lnHandle,"Transactions",2) > 0
ldFecha = DATE(2004,04,03)
lcQuery = "DELETE FROM movs WHERE fecha > ?ldFecha"
IF SQLExec(lnHandle,lcQuery) > 0
lcMessage = "Borrado!!,Conformar el comando"
IF MESSAGEBOX(lcMessage,4+32,"Confirmacion") = 6
IF SQLCOMMIT(lnHandle) > 0
MESSAGEBOX("Datos Actualizados ")
ELSE
IF AERROR(laError) > 0
*** Manejar Error
ENDIF
ENDIF
ELSE
IF AERROR(laError) > 0
*** Manejar Error
ENDIF
ENDIF
ELSE
IF AERROR(laError) > 0
*** Manejar Error
ENDIF
ENDIF
ELSE
IF AERROR(laError) > 0
*** Manejar Error
ENDIF
ENDIF
=SQLSetProp(lnHandle,"Transactions",1)
=SQLDISCONNECT(laHandle)
ELSE
IF AERROR(laError) > 0
*** Manejar Error
ENDIF
Endif
El anterior ejemplo no es la forma adecuadad de manejar las transacciones (es decir, no debería haber interface cuando se establece un proceso de transacción), sólo es con fines ilustrativos.
Más información al respecto en los siguientes enlaces:
--- Crear Aplicaciones Cliente-Servidor con Visual FoxPro ---
http://www.portalfox.com/article.php?sid=996
http://www.portalfox.com/modules.php?op=modload&name=News&file=index&catid=&topic=6
Un EXCELENTE tutorial gratuito, lo encontrarás en el siguiente:
http://www.redware.com/downloadresponse.html
Espero te sirva.
P.D. Si se pudiera, nohagas la respuesta privada, para que los demás puedan beneficiarse de la buena documentación que encontrarán en PortalFox y en el tutorial de Redware.com
Por cierto, ya hasta que respondí me di cuenta que utilizas vistas remotas, el caso es igual, sólo que hay que mandarle la instrucción de transacciones manuales a el handle de conexión de tu vista.
lnHandle = CURSORGETPROP("ConnectHandle","TuVista")
IF SQLSetProp(lnHandle,"Transactions",2) > 0
**** Procesar, TableUpdates...
*** Si hay error, llevarse una bandera de error
IF llError
IF SQLRollBack(lnHandle) < 0
IF AERROR(laError) > 0
*** Manejar el Error del Servidor
ENDIF
ENDIF
ELSE
IF SQLCommit(lnHandle) < 0
IF AERROR(laError) > 0
*** Manejar El Error del Server
ENDIF
ENDIF
ENDIF
ENDIF
Encontré otro artículo sobre el tema:
--- Uso de BEGIN TRANSACTION con vistas remotas ---
http://www.portalfox.com/article.php?sid=976
Muy buena respuesta, lamento mucho, que el primer detalle de asignarle la conexión a la vista remota, no aparezca en los ejemplos del manual de FOXPRO, al parecer se les olvido indicar este detalle

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas