Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-04-2006
Arturo Arturo is offline
Miembro
 
Registrado: sep 2004
Posts: 91
Poder: 20
Arturo Va por buen camino
como emplear la transacciones

saludos, he comprendido como usar las transaccion con zeos en un bloque try.. except pero no entiendo en donde poner el bendito codigo, es decir escribirlo en los eventos onnewrecord, beforeedit, beforedelete.
cuando ejecuto un tabla.append delphi sabe que hay que agregar un registro es correcto realizarlo de esta manera o en de que modo, he encontrado un codigo en este foro el cual menciona que lo resolvio.
Si alguin sabe como emplearlo o de que manera se los agradeceria, ya que los dbedit estan vinculados a las tablas por tal motivo si yo ejecuto un edit habo mis cambios en mis dbedit's y lugo hago un post me afecta los cambios quisiera saber en donde introdusco las transacciones eso es semejante cuando se trate del maestro/detalle.

Código PHP:
try

      
//Preparamos la transacción
      
DataSet.SQL.Clear;
      
DataSet.SQL.Add('SET AUTOCOMMIT = 0');
      
DataSet.Execute;

      
//Inicializamos la transacción
      
DataSet.SQL.Clear;
      
DataSet.SQL.Add('start transaction');
      
DataSet.Execute;

      
//Seleccionamos el registro a modificar con propiedades correctas
      
DataSet.SQL.Clear;
      
DataSet.SQL.Add('SELECT * FROM tabla LOCK IN SHARE MODE');
      
DataSet.Execute;

      
//Actualizamos los datos del campo correspondiente
      
DataSet.SQL.Clear;
      
DataSet.SQL.Add('UPDATE tabla SET');
      
DataSet.SQL.Add('campoDB=datosAct');
      
DataSet.SQL.Add('WHERE condicion<>0');
      
DataSet.Execute;

      
//Finalizamos la transacción
      
DataSet.SQL.Clear;
      
DataSet.SQL.Add('commit');
      
DataSet.Execute;

      
//Restauramos las propiedades originales
      
DataSet.SQL.Clear;
      
DataSet.SQL.Add('SET AUTOCOMMIT = 1');
      
DataSet.Execute;

    
except

      on E
Exception do begin
        
//Deshacemos los pasos de la transacción
        
DataSet.SQL.Clear;
        
DataSet.SQL.Add('RollBack');
        
DataSet.Execute;

      
end
Responder Con Cita
  #2  
Antiguo 27-04-2006
JCarlosas JCarlosas is offline
Miembro
 
Registrado: abr 2006
Ubicación: Habana. Cuba
Posts: 103
Poder: 19
JCarlosas Va por buen camino
Hola Arturo.
Yo realmente nunca he utilizado las transacciones con ZesLib y MySQL, pero supongo que trabajen igual o muy parecido a como se hace con Interbase.
El objeto TZconnection
Posee los siguientes metodos/propiedades.

TransactIsolationLevel
StartTransaction
Commit
Rollback

Supongo que se deban usar de forma parecida a como se hace con ADO y MS SQL Server con cuando se usa Interbase.

O sea llamas primero a
StartTransaction
realizas los cambios y/o inserciones que necesites en la BD
Si todo fue OK entonces llamas al
Commit
Para que dichos cambies sean efectivos a otros usuarios en la BD
Si algo fue mal y necesitas hechar todo para atras desde el inicio de las transacciones llamas entonces a
RollBack

La propiedad TransactIsolationLevel, debe darte un determinado nivel de aislamiento respecto a las consultas concurrentes con la tuya. Habria que leerse un poco la ayuda pero debe tener algun valor implicito o por omision.
Otra cosa y muy importante.
Las tablas de MySQL tienen que ser del tipo innoDB y nunca MyISAM porque estas ultimas no admiten transacciones.
Bueno cuando lo pruebes, si te funciona me gustaria ver un fragmento de codigo de ejemplo en el foro.

Chao y suerte.
Juan Carlos
Responder Con Cita
  #3  
Antiguo 28-04-2006
Arturo Arturo is offline
Miembro
 
Registrado: sep 2004
Posts: 91
Poder: 20
Arturo Va por buen camino
saludos a todos pero ya hace tiempo que no encaraba como usar las transacciones y desde luego con algunas respuestas del club he elegido usar ado para mysql y odbc con algunos intentos ya puede manejarla y como dices JCarlosas coloque el codigo en el componente datasource iniciando la Transaccion:

if not conex.intransaction then
conex.isolationlevel:='ilReadCommitted'
conex.BeginTrans;
y listo luego lo confirmo desde algun boton

quizas me digan que no es asi en ese componente pero me detueve resolviendo esto
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como codifico las transacciones en delphi, y como jalo una vista desde SQL Server? Felipe Conexión con bases de datos 2 06-01-2008 03:00:04
Emplear Store Procedure La__X Conexión con bases de datos 5 19-01-2006 02:03:13
Como Libero Transacciones Activas El_Perrito Firebird e Interbase 2 08-06-2005 02:08:27
Como usar transacciones gario SQL 3 17-12-2003 20:52:29
Como usar las transacciones que es lo correcto azraelrvg Firebird e Interbase 1 21-10-2003 23:02:37


La franja horaria es GMT +2. Ahora son las 10:45:39.


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
Copyright 1996-2007 Club Delphi