Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-11-2007
Avatar de peccatum
peccatum peccatum is offline
Miembro
 
Registrado: oct 2005
Posts: 89
Poder: 19
peccatum Va por buen camino
Transacción y procedimiento almacenado...

Hola todos...

Mi consulta es la siguiente, yo tengo un procedimiento almacenado que en su ejecución inserta en una tabla y modimica campos en otra.... quiziera que el bloque de instrucciones del stored proc sea "todo o nada" para asegurar consistencia por eso uso una transacción, de la siguiente forma:

Código Delphi [-]
with StoredProc1 do           
 begin           
 Database.DefaultTransaction.StartTransaction;              
   try              
   if prepared = false then   prepare;
             execProc;
             Database.DefaultTransaction.Commit;
             except              showmessage('ups');
             Database.DefaultTransaction.Rollback;
             raise;
    end          
end

Al ejecutar el procedimiento desde Delphi me dá la excepción "transaction active", lo cual será un abrazo mortal...

la duda que tengo es cómo se resuelve ésto, tendré que largar una transacción por cada tabla involucrada desde la aplicación o resolverlo desde la base de datos?

de antemano muchas gracias,

Claudio.-

Última edición por peccatum fecha: 05-11-2007 a las 14:11:30.
Responder Con Cita
  #2  
Antiguo 05-11-2007
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
cuando estás usando procedimientos almacenados, lo mejor es que la transacción la controles en el bloque del procedimiento en cuestion.


Suerte
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #3  
Antiguo 05-11-2007
Avatar de peccatum
peccatum peccatum is offline
Miembro
 
Registrado: oct 2005
Posts: 89
Poder: 19
peccatum Va por buen camino
Hola Poliburro!

ya funciona, al parecer esta mal usar "default transaction" en ese contexto...

lo que hice es crear otra transacción, asignarla a la DB, y ahí hacer los strartransaction, commit y rollback pertinentes...

si alguien opina que debe hacerse de otra forma... bienvenidas las opiniones...

saludos!
Responder Con Cita
  #4  
Antiguo 05-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Código Delphi [-]
if  Database.DefaultTransaction.InTransaction then
 Database.DefaultTransaction.Commit;
with StoredProc1 do           
 begin           
 Database.DefaultTransaction.StartTransaction;              
   try              
   if prepared = false then   prepare;
             execProc;
             Database.DefaultTransaction.Commit;
             except              showmessage('ups');
             Database.DefaultTransaction.Rollback;
             raise;
    end          
end

No es un abrazo mortal, es que mientras estas en una transacción no puedes empezar otra, tienes que terminar la antigua o cancelarla (Commit / Rollback).

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
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
Procedimiento almacenado efelix MS SQL Server 7 21-11-2007 17:53:00
Procedimiento Almacenado egostar Firebird e Interbase 4 15-12-2006 02:04:07
Procedimiento Almacenado pichi Vignola Firebird e Interbase 2 17-08-2006 01:07:38
confirmar transaccion en un procedimiento almacenado karocs SQL 3 09-08-2004 18:49:24
procedimiento almacenado haron Firebird e Interbase 2 29-09-2003 01:09:56


La franja horaria es GMT +2. Ahora son las 04:37: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