Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

 
 
Herramientas Buscar en Tema Desplegado
  #12  
Antiguo 07-10-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 26
maeyanes Va por buen camino
Lo que sucede es que en realidad tengo creado un tipo de framework para trabajar con objetos en lugar de registros...

Entonces, en lugar de hacer DataSet.Post, en realidad hago algo como Objeto.Store, entonces, internamente el método mencionado hace el manejo de las transacciones...

Ahora, cuando quiero manejar inserciones masivas, vamos a decirle así, por ejemplo tipo master-detail, lo que hago es iniciar una transacción, realizar el ciclo de inserciones (Objeto.Store) y al final el Commit o Rollback dependiendo de si todo estuvo bien u ocurrió un error.

Mi código es más o menos ásí:

Código Delphi [-]
var
  Objeto: TObjetoFrameWork;

begin
  Connection.StartTransaction;
  try
    for I := 0 to ListaObjetos.Count - 1 do // ListaObjetos es un TList
    begin
      Objeto := TObjetoFrameWork(ListaObjetos[i]);
      repeat
        Stored := True;
        try
          Objeto.Store
        except
          on E: EIBInterBaseError do
          begin
            // Si existe DeadLock, cambio a False Stored para repetir la inserción...
            Stored := not E.SQLCode = -901; 
            if Stored then // Si Stored sigue siendo verdadero, la excepción fue otra y la relanzo...
              raise
          end
        end
      until
        Stored
    end;
    Connection.CommitTransaction
  except
    Connection.RollbackTransaction
  end
end;

Espero que con esto te aclare mejor las cosas...



Saludos...
Responder Con Cita
 



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 darle información a mi base de Datos servicomp Firebird e Interbase 3 01-08-2006 18:56:22
como darle nuevos aspectos a un trackbar de delphi rls Varios 2 16-11-2005 21:26:31
Como darle color a un TListColumn? abracadabra OOP 4 15-07-2005 17:01:40
Tips: Como darle velocidad al IDE en D8 mamcx .NET 0 30-09-2004 18:09:45
Darle Vida a una IbQuery Rabata Conexión con bases de datos 6 16-09-2003 18:48:23


La franja horaria es GMT +2. Ahora son las 17:11:03.


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