transacciones con sql server

26/10/2004 - 16:31 por castellon | Informe spam
tengo una vista con buffering 5 en visual foxpro y set multilocks on
si hago tableupdate de 2000 registros y corto la luz se me actualizan,
eliminan o añaden solo 'x' registros y los demas se me quedan igual,
desaparecen , etc.
Con sqlexec se como hacerlo, CON TRANSACTION MANUAL, BEGIN Y END
TRANSACCTION pero quiero ver como controlarlo utilizando vistas porque con
lo anterior no me funciona.

Gracias por vuestra ayuda
Saludos
Miguel

Preguntas similare

Leer las respuestas

#1 Esparta Palma
31/10/2004 - 23:48 | Informe spam
Como ya alguna otra vez lo había comentado, las vistas remotas son
cursores creados bajo la misma técnica que el SPT, sólo que tienen la
característica de almacenarse en una BD y establecer ciertos settings que
son necesarios para hacer actualizable a un cursor de una fuente remota.
Por lo tanto, para manejar transacciones en vistas remotas bastará con
obtener el handle de la vista remota y hacer lo mismo que con SPT. Esto se
puede realizar con el uso de la función CursorGetProp() con el parámetro
de ConnectHandle...

A continuación un ejemplo completo del caso:


*** Creamos una base de datos de prueba, sólo ahí pueden existir las
vistas
CREATE DATABASE Test

*** Nuestra cadena de conexión, se usará para crear una conexión...
lcString = "Driver={Microsoft Visual FoxPro Driver};SourceTypeÛC;"+;
"SourceDB="+HOME(2)+"data\testdata.dbc"+;
";Exclusive=No;NULL=NO;Collate=Machine;"+;
"BACKGROUNDFETCH=NO;DELETED=NO"

*** Creamos una conexión via cadena de conexión
CREATE CONNECTION PF_Test CONNSTRING lcString

*** Nos conectamos temporalmente a la base de datos
lnHandle = SQLCONN(PF_Test)

*** Creamos una tabla de prueba
?SQLEXEC(lnHandle,"CREATE TABLE Dummy (iid int)")

*** Desconectamos todas las posibles conexiones...
?SQLDisconnect(0)

*** Creamos una vista remota apuntando a la tabla de prueba ...
CREATE SQL VIEW lv_dummy REMOTE CONNECTION pf_test ;
AS SELECT iid FROM dummy

*** Establecemos los settings para que los datos se puedan actualizar ...
DBSetProp("lv_dummy","View","SendUpdates",.T.)
DBSetProp("lv_dummy","View","Tables","dummy")
DBSetProp("lv_dummy","View","WhereType",3)

DBSetProp("lv_dummy.iid","Field","DataType","I")
DBSetProp("lv_dummy.iid","Field","UpdateName","dummy.iid")
DBSetProp("lv_dummy.iid","Field","KeyField",.T.)
DBSetProp("lv_dummy.iid","Field","Updatable",.T.)

*** Cerramos todas las tablas...
CLOSE TABLE ALL

**** Usamos la vista Remota
USE lv_dummy IN 0

**** AQUI ES LA PARTE IMPORTANTE *****
**** Obtenemos el Handle de conexión de la vista remota ****
lnViewHandle = CURSORGETPROP("ConnectHandle","lv_dummy")

**** Y le establecemos transacciones manuales
?SqlSetProp(lnViewHandle,"Transactions",2)

**** Establecemos Buffering a la vista, en este caso Optimista en Tablas
?CursorSetProp("Buffering",5,"lv_dummy")

*** Insertamos 100 registros de Prueba ***
RAND(-1)
FOR lnCounter=1 TO 100
INSERT INTO lv_dummy VALUES(RAND()*1000)
ENDFOR

*** Grabamos los datos
IF TableUpdate(1,.T.,"lv_dummy")
Messagebox("100 Registros Actualizados")
ELSE
IF AERROR(laError) > 0
Messagebox("Error al intentar actualizar"+chr(13)+;
"Detalles:"+laError[2])
ENDIF
ENDIF

lcMsg = "Desea guardar definitivamente los registros?"

*** Cerramos o Cancelamos la transacción según se desee ****
IF Messagebox(lcMsg,4+32,"Prueba de Transacciones") = 6
IF SQLCOMMIT(lnViewHandle) = 1
Messagebox("Datos guardados en Definitivo")
ELSE
IF AERROR(laError) > 0
Messagebox("Error al guardar transacción"+chr(13)+;
"Detalles:"+laError[2])
ENDIF
ENDIF
ELSE
IF SQLROLLBACK(lnViewHandle) = 1
Messagebox("Datos cancelados definitivamente")
ELSE
IF AERROR(laError) > 0
Messagebox("Error al Cancelar transacción"+chr(13)+;
"Detalles:"+laError[2])
ENDIF
ENDIF
ENDIF

****
CLOSE TABL ALL

**** Volvemos a abrir la vista ***
USE lv_dummy in 0
BROW


Espero que la información les sea de utilidad.




tengo una vista con buffering 5 en visual foxpro y set multilocks on
si hago tableupdate de 2000 registros y corto la luz se me actualizan,
eliminan o añaden solo 'x' registros y los demas se me quedan igual,
desaparecen , etc.
Con sqlexec se como hacerlo, CON TRANSACTION MANUAL, BEGIN Y END
TRANSACCTION pero quiero ver como controlarlo utilizando vistas porque con
lo anterior no me funciona.

Gracias por vuestra ayuda
Saludos
Miguel



ž,ø€º°`°º€ø,žž,ø€º°`°º€ø,žž,ø€º°`°º€ø,žž,ø€º°`°º
Espartaco Palma Martínez
SysOp PortalFox.com
Acapulco, México
email:mexicoSINSPAM[Arroba]portalfox.com


PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida