transacciones en mysql vfp

1,377 views
Skip to first unread message

Hernan

unread,
May 16, 2011, 6:39:02 PM5/16/11
to Comunidad de Visual Foxpro en Español
Hola a todos.

he leido a varios del foro comentar sobre transacciones. pero... como
se utilizan?

en las bases de datos nativas de vfp se utiliza: BEGIN TRANSACTION,
rollback y end transaction. eso esta claro..

pero en mysql? como se hace?

les agradezco de antemano la iluminacion.

Hernan Pad
Barranquilla - Colombia

Hugo C.

unread,
May 16, 2011, 7:27:29 PM5/16/11
to Comunidad de Visual Foxpro en Español

Douglas Sánchez Guillén

unread,
May 16, 2011, 7:34:06 PM5/16/11
to publice...@googlegroups.com
Aqui te doy algo que ocupo para grabar tal ves te das una idea...

claro antes hay que definir la conexion y el resultado lo manejo yo en especial conectado hasta q salga del form o se caiga la red
en cada proceso al inicari thisform.oconexion.conectarse()  &&& clase conexion.

=SQLExec(Thisform.nhandle,"set autocommit=0")
= SQLExec(Thisform.nhandle,"START TRANSACTION")

Local cad1 As Character,r1 As Integer
Select micursor
If Thisform.lnuevo    &&&&& simplement la propiedad para saber si estas agregando o modificando un new record.
TEXT TO cad1 NOSHOW
  INSERT INTO tblcatingresos
    (grupo, subgrupo, reglon, subreglon, codigo, concepto, clasi, mayor) value
(?vgrupo, ?vsubgrupo, ?vreglon, ?vsubreglon, ?vcodigo, ?vconcepto, ?vclasi, ?vmayor)
ENDTEXT
Else
TEXT TO cad1 NOSHOW
   UPDATE tblcatingresos
    SET grupo= ?vgrupo, subgrupo=?vsubgrupo, reglon= ?vreglon, subreglon= ?vsubreglon, codigo= ?vcodigo,
    concepto= ?vconcepto, clasi= ?vclasi, mayor = ?vmayor where idcatingresos = ?vid
ENDTEXT
Endif
r1    = SQLExec(Thisform.nhandle,cad1)
If r1<=0
= SQLExec(Thisform.nhandle,"ROLLBACK")
=SQLExec(Thisform.nhandle,"set autocommit=1")
=Messagebox("Imposible Grabar los datos, se Revertirán los cambios realizados...",0+64,"Información",800)
Else
= SQLExec(Thisform.nhandle,"COMMIT")
=SQLExec(Thisform.nhandle,"set autocommit=1")
=Messagebox("Ok Datos Guardados...",0+64,"Información",500)
Endif


--
Ing. Douglas Sánchez Guillén
      Consultor Informatico
Movistar: 505 8759 - 5342
Claro: 505 88495476

Hernan Padilla

unread,
May 16, 2011, 10:34:34 PM5/16/11
to publice...@googlegroups.com
Muchas gracias Douglas y Hugo.
lo probare.
ah. pero... , que pasa si utilizo cursores actualizables?
el efecto es el mismo o tengo que hacer algo mas?


Hernan Pad
Barranquilla-Colombia 

Diego Victorino

unread,
Jun 3, 2015, 3:37:07 PM6/3/15
to publice...@googlegroups.com, dougl...@gmail.com
esto no funciona,
en mi transaccion actualizo 1 tabla de folios, inserto en otra tabla una factura, en la tercera consulto un material, aqui en la tercer consulta en donde truena el codigo, segun tengo entendido que en las transacciones si alguna consulta fallo deve de hacer el rollback en las tablas que se afectaronn previamente, en mi caso se tendrian que revertir los cambios en la tabla de folios y en la de facturas, pero solo se revierte el cambio en la de folios y en la segunda tabla se mantiene el registro qhe se inserto.
la verdad es que odio el visualfox por que de repente hace unas mamadas que te sacan de onda, pero bueno, espero y me puedan ayudar.z saludos

Antonio Meza

unread,
Jun 3, 2015, 3:56:27 PM6/3/15
to publice...@googlegroups.com, victori...@gmail.com, dougl...@gmail.com
Estas usando tablas nativas o Mysql? y puedes poner un ejemplo de como inicias la transacción y como la finalizas?

saludos
Antonio Meza

Diego Victorino

unread,
Jun 3, 2015, 5:35:06 PM6/3/15
to publice...@googlegroups.com, solv...@gmail.com, victori...@gmail.com, dougl...@gmail.com
buenas tardes Douglas, son tablas de mysql.

Gracias por responder, validando el codigo vi que antes de hacer el procedimiento que les comente hago una consulta y abro otra conexion a la base de datos y en ningun momento la CIERRO, al momento de iniciaR LA transaccion devio de estar tomando el handle de conexion de la consulta y no el del insert, lo que hice fue abrir la conexion en el load del formulario y cerrarla en el unload del form, de esta manera durante la ejecucion del form siempre usare el mismo handle de conexion.
son mis primeros pasos enprogramacion en escritorio y bueno se me esta dificultando desarrollar en escritorio. les agradesco su pronta respuesta y el interes por ayudar a los demas.

Antonio Meza

unread,
Jun 3, 2015, 7:35:17 PM6/3/15
to publice...@googlegroups.com, victori...@gmail.com, victori...@gmail.com, solv...@gmail.com
Checa la librería FoxyDB


Puedes ver el código fuente y los ejemplos para que te des una idea de como funcionan las transacciones o en su caso usar la librería 

saludos
Antonio Meza

xor...@hotmail.com

unread,
Mar 14, 2020, 1:56:25 PM3/14/20
to Comunidad de Visual Foxpro en Español
Esta correcto mas si son mas de una tabla , cabecera, detalle, folios
como los harias

Oscar Bonet

unread,
Apr 3, 2020, 9:34:16 AM4/3/20
to publice...@googlegroups.com
Buenos días.
esta instrucción es necesaria?  ejecutar antes de la transacción?
=SQLExec(Thisform.nhandle,"set  autocommit  =0") 

Entiendo que autocommit  es automática y se ejecuta cuando es una sola instruccion SQL  
pero cuando son dos o más instrucciones no hace falta ya que cuando se indica un BEGIN TRANSACTION cual prima esta orden sobre la anterior.
Alguien puede aclarar o afirmar esto?  igualmente me quedan dudas.
 

Gracias y en espera de sus comentarios al respecto.

Atentamente:
Oscar G. Bonet O.




Libre de virus. www.avg.com

--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/2e8a64c0-8d1b-40d1-8402-07dd47063bd9%40googlegroups.com.


De conformidad con el decreto 2242 de Noviembre de 2015, nuestra Compañía está implementando la Facturación Electrónica y según comunicado  100202211-410 del 29 de Junio de 2018 emitido por la DIAN, se nos fijó el 1 de diciembre de 2018 para la emisión de la factura electrónica.
En consecuencia, hemos destinado la cuenta de correo electrónico: 
e-fac...@cialta.com      para recepción y emisión de facturas electrónicas.

Habeas Data: La Compañía Internacional de Alimentos Agropecuarios CIALTA S.A.S. cumple con los requerimientos de la Superintendencia de Industria y Comercio de Colombia sobre el manejo de información de datos personales, lo cual implica tener políticas claras de tratamiento de Base de Datos que usted puede consultar: Politicas Habeas Data 

Si desea tener más información sobre el particular, puede escribirnos al correo habea...@cialta.com 

Reply all
Reply to author
Forward
0 new messages