Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Transacciones con MySQL (https://www.clubdelphi.com/foros/showthread.php?t=17284)

vichovi 03-01-2005 11:54:29

Transacciones con MySQL
 
Hola a tod@s, he estado haciendo pruebas con los componentes ZEOS utilizando transacciones (las tablas son MyISAM) pero no consigo que me funcione.

Agradeceria mucho un pequeño ejemplo.

Gracias.

roman 03-01-2005 15:49:23

Cita:

Empezado por vichovi
con los componentes ZEOS utilizando transacciones (las tablas son MyISAM) [pero] no consigo que me funcione.

Las tablas MyIsam no soportan transacciones, necesitas usar tablas InnoDb.

// Saludos

vichovi 04-01-2005 08:31:24

Gracias Roman, entonces lo que tendria que hacer es cambiar las tablas de MyISAM a INNODB, pero luego como lo hago??

Un saludo y gracias.

roman 04-01-2005 09:43:55

Cita:

Empezado por vichovi
pero luego como lo hago??

¿Cómo haces qué? ¿Cambiar el tipo de tabla?

Código SQL [-]
alter table `tu_tabla` type = INNODB

// Saludos

vichovi 21-01-2005 11:30:33

Locura transaccional
 
Hola a todos y perdón Roman por la tardanza, cambie las tablas a InnoDB para que me soporte el tema de las transacciones y en este tiempo (cada vez que tengo algo de tiempo y me acuerdo :-)) he intentando realizar transacciones sin exito (la ayuda de los zeos es bastante escueta).

Alguien podria decirme que estoy haciendo mal:

Código:

procedure TForm1.BitBtn1Click(Sender: TObject);
begin

  msqConsulta.Close;
  msqConsulta.Sql.Clear;
  msqConsulta.Sql.Add('select * from bb');
  msqConsulta.Open;
  mstTransaccion.StartTransaction;
  msqConsulta.Append;
  msqConsulta['bb1']:=5;
  try
    msqConsulta.Post;
  except
    mstTransaccion.Rollback;
    showmessage('Error');
    exit;
  end;

  msqConsulta.Close;
  msqConsulta.Sql.Clear;
  msqConsulta.Sql.Add('select * from cc where cc1=5');
  msqConsulta.open;
  try
    msqConsulta.Delete;
    mstTransaccion.Commit;
  except
    mstTransaccion.Rollback;
    showmessage('Error 2');
    exit;
  end;

  showmessage('OK');
end;

Es un poco tonto el ejemplo pero ni aun asi va...

Si algun alma caritativa me dijera que falla, o un ejemplo, o una página con información, o lo que sea....

Un saludo y gracias a todos por vuestro tiempo.

Tony_G 21-01-2005 16:55:07

Hola.

Yo utilizo el componente ZSQLProcessor de ZEOS y hago lo siguiente:

zsqlprocessor.script.clear;
zsqlprocessor.script.add('START TRANSACTION;');
zsqlprocessor.script.add('consulta;');
..
..
..

try
zsqlprocessor.script.add('COMMIT;');
zsqlprocessor.execute;
except
zsqlprocessor.script.clear;
zsqlprocessor.script.add('ROLLBACK;');
zsqlprocessor.execute;
end;

También puedes utilizar SAVEPOINT punto1; y luego ROLLBACK TO SAVEPOINT punto1; de esta forma deshaces los cambios hasta punto1.

Ojo con los ';' al final de cada sentencia SQL.

Espero que te sirva.

Saludos, Antonio.

vichovi 25-01-2005 10:43:09

Gracias por todo TonyG, probare tu remedio :-)


La franja horaria es GMT +2. Ahora son las 10:36:57.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi