Pregunta: | 30638 - UTILIZAR LOS COMANDOS COMMIT Y ROLLBACK CON MYSQL |
Autor: | Laura Núñez |
Estoy haciendo un sistema en VFox que accesa una base de datos MYSQL, y necesito utilizar los comandos Commit y Rollback, pero como MySQL no es transaccional me graba cada cambio que hago.
Si alguien sabe como hacer para trabajar con estos comando le agradecería mucho la ayuda, traté con sqlsetprop() pero no me funciona. |
Respuesta: | Pedro Camargo |
Te mando un ejemplo de como genero un nuevo registro o actualizo un registro, utilizando transacciones.
Espero se de tu ayuda. If Empty( ThisForm.txt_nompa.Value ) MessageBox( 'Faltan Datos en Pantalla', 0+16, 'Aviso ...' ) ThisForm.txt_codpa.Setfocus Return Endif nx = Sqlconnect( 'dns_misdatab' ) IF nx <= 0 MessageBox( 'Error de Conexión SQL.', 16, 'MAGNO Plus.' ) Return Endif nx1 = Sqlexec( nx, 'Select * From filepaga Where codem_f = ?cCodEmp And codpa_f = ?ThisForm.txt_codpa.Value', 'crssql' ) If nx1 < 0 MessageBox( 'Error en Sentencia SQL.', 16, 'MAGNO Plus.' ) Sqldisconn(1) Return Endif If Reccount() = 0 nx1= Sqlexec( nx, 'Begin' ) nx1= Sqlexec( nx, 'Insert Into filepaga (codem_f,codpa_f,nompa_f,dirpa_f,telpa_f,ciupa_f,caspa_f,cdepa_f,tippa_f,'+; 'fpapa_f,fafpa_f,embpa_f) Values (?cCodEmp,?ThisForm.txt_codpa.Value,?ThisForm.txt_nompa.Value,'+; '?ThisForm.txt_dirpa.Value,?ThisForm.txt_telpa.Value,?ThisForm.txt_ciupa.Value,?ThisForm.txt_caspa.Value,'+; '?ThisForm.cmb_cdepa.Value,?ThisForm.cmb_tippa.Value,?ThisForm.cmb_fpapa.Value,?ThisForm.txt_fafpa.Value,'+; '?ThisForm.chk_embpa.Value)' ) If nx1 < 0 MessageBox( 'Error en Sentencia SQL al Insertar en [FILEPAGA]', 16, 'MAGNO Plus.' ) nx1 = Sqlexec( nx, 'Rollback' ) Sqldisconnect(1) Return Endif nx1= Sqlexec( nx, 'Commit' ) Else nx1 = Sqlexec( nx, 'Begin' ) nx1 = Sqlexec( nx, 'Update filepaga Set nompa_f=?ThisForm.txt_nompa.Value,dirpa_f=?ThisForm.txt_dirpa.Value,'+; 'telpa_f=?ThisForm.txt_telpa.Value,ciupa_f=?ThisForm.txt_ciupa.Value,caspa_f=?ThisForm.txt_caspa.Value,'+; 'cdepa_f=?ThisForm.cmb_cdepa.Value,tippa_f=?ThisForm.cmb_tippa.Value,fpapa_f=?ThisForm.cmb_fpapa.Value,'+; 'fafpa_f=?ThisForm.txt_fafpa.Value,embpa_f=?ThisForm.chk_embpa.Value '+; 'Where codem_f = ?cCodEmp And codpa_f = ?ThisForm.txt_codpa.Value' ) If nx1 < 0 MessageBox( 'Error en Sentencia SQL al Actualizar en [FILEPAGA]', 16, 'MAGNO Plus.' ) nx1 = Sqlexec( nx, 'Rollback' ) Sqldisconnect(1) Return Endif nx1 = Sqlexec( nx, 'Commit' ) Endif Sqldisconnect(1) MessageBox( 'AVISO.'+Chr(13)+'Registro Grabado OK.', 0+64, 'MAGNO Plus.' ) |
Respuesta: | Raul Villaverde villaverde |
Hola que tal ?
la version de Mysql 3.24.46a (o algo parecido, ultima disponible) ya soporta transacciones y la version 4.1 soportara procedimientos almacenados de hecho las ayudas disponibles que tienes, al instalar Mysql ya figuran las instrucciones BEGIN/COMMIT/ROLLBACK, hasta aqui las buenas noticias ahora un poco de las otras. Tengo el mismo problema con VFP-Mysql hace un mes que estoy tratando de solucionarlo y no lo consigo, me acepta como validos el BEGIN Y COMMIT pero me rechaza el ROLLBAK y no consigo que deshaga los cambios hechos sobre los registros. He puesto preguntas en cuanto foro he encontrado pero nadie me responde sobre el tema, sinceramente estoy a punto de descartar la conbinacion de trabajo VFP-Mysql y utilizar tablas de fox, te pido por favor si tenes alguna noticia sobre el tema, pudieras si no es mucha molestia ponerme al tanto. Desde ya muchas gracias y lamento no haberte podido ayudar. Raul Villaverde [email protected] |