Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-11-2014
Avatar de TiammatMX
TiammatMX TiammatMX is offline
Miembro
 
Registrado: jun 2006
Ubicación: Universo Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Puebla\Heróica Puebla de Zaragoza\Jardines de San Manuel\Home
Posts: 746
Poder: 18
TiammatMX Va camino a la fama
Duda de primaria..., ¿es posible y válida una estructura así?

¡Hola!

De repente me surgió una duda de niño de 7 años..., ¿es posible y válida para Delphi una estructura de control como ésta?

Código Delphi [-]
try
   .
   .
   .
   for i := 0 to 'n' do
   begin
      .
      .
      .
      Insert TADOQuery;
   end;
   Commit;

except
   Rollback;
end;

El punto es que requiero añadir a una tabla una serie de datos tomados de una matriz en memoria, PERO EN CASO DE FALLA que todos los datos ingresados en la tabla SE REVIERTAN y la tabla quede como estaba antes de entrar a éste proceso...
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively...

"Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum.

Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco
Responder Con Cita
  #2  
Antiguo 05-11-2014
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Solo tienes que explícitamente iniciar y finalizar la transacción.

Código Delphi [-]
procedure TDMMain.InsrtaElementos;
var
   Q: TSQLQuery;
   T: TDBXTransaction;
begin
   Q := TSQLQuery.Create(nil);
   with Q do
   begin
      try
         try
            T := BaseDeDatos.BeginTransaction;
            SQLConnection := BaseDeDatos;
            SQL.Text := 'INSERT INTO TABLA (???) VALUES (???)';
            for i := 0 To n do
            begin
               ParamByName('???').AsInteger := ???;
               ExecSQL;
            end;
            BaseDeDatos.CommitFreeAndNil(T);
         except
            BaseDeDatos.RollbackFreeAndNil(T);
         end;
      finally
         Free;
      end;
   end;
end;
Responder Con Cita
  #3  
Antiguo 05-11-2014
Avatar de TiammatMX
TiammatMX TiammatMX is offline
Miembro
 
Registrado: jun 2006
Ubicación: Universo Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Puebla\Heróica Puebla de Zaragoza\Jardines de San Manuel\Home
Posts: 746
Poder: 18
TiammatMX Va camino a la fama
Cita:
Empezado por duilioisola Ver Mensaje
Solo tienes que explícitamente iniciar y finalizar la transacción...
Por descontado que sí..., me interesaba mucho éste punto de "try...except" y el "for... to..." interno para generar mi inserción en la tabla de MS SQLServer 2008 R2.
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively...

"Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum.

Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco

Última edición por TiammatMX fecha: 05-11-2014 a las 20:37:21. Razón: Faltó una palabra importante.
Responder Con Cita
  #4  
Antiguo 06-11-2014
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.272
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por tiammat Ver Mensaje
¡Hola!

De repente me surgió una duda de niño de 7 años..., ¿es posible y válida para Delphi una estructura de control como ésta?
Yo no le veo ningún problema.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 11-11-2014
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
No sólo no debería haber problemas, como dice Neftali: Es que debería hacerse siempre así. Si no recuerdo mal, así se explica en "La Cara Oculta de Delphi", o quizá fue en otro libro.

La cuestión es que, si hay un error, entonces se debería "rollbackear" la transacción para evitar problemas ulteriores (corrupción de datos, actualizaciones incompletas, etc). El uso de "TRY .. EXCEPT .. END;" es, entonces, de uso obligado.

Otro tema es decidir dónde poner el bloque "TRY .. EXCEPT", si dentro o fuera del bucle. Supongo que depende de dónde haces el Committeo.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #6  
Antiguo 11-11-2014
Avatar de pacopenin
pacopenin pacopenin is offline
Miembro
 
Registrado: sep 2010
Ubicación: Asturias
Posts: 382
Poder: 14
pacopenin Va por buen camino
Cita:
Empezado por Ñuño Martínez Ver Mensaje
No sólo no debería haber problemas, como dice Neftali: Es que debería hacerse siempre así. Si no recuerdo mal, así se explica en "La Cara Oculta de Delphi", o quizá fue en otro libro.
Committeo.
Totalmente de acuerdo.
__________________
http://www.gestionportable.com
Responder Con Cita
  #7  
Antiguo 11-11-2014
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Seria interesante saber porque te surgió la duda.
__________________
El malabarista.
Responder Con Cita
  #8  
Antiguo 11-11-2014
Avatar de TiammatMX
TiammatMX TiammatMX is offline
Miembro
 
Registrado: jun 2006
Ubicación: Universo Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Puebla\Heróica Puebla de Zaragoza\Jardines de San Manuel\Home
Posts: 746
Poder: 18
TiammatMX Va camino a la fama
Cita:
Empezado por mamcx Ver Mensaje
Seria interesante saber porque te surgió la duda.
Por que tengo una función que es llamada en caso de agregarse un nuevo registro, y dentro de ésta función se añaden registros a otra tabla, una especie de bitácora.

Y de ahí, si todo es correcto, se le hace un "commit" a todos los registros recientemente añadidos, o en caso contrario, se revierte el proceso. Mi duda en concreto se centraba en que si la transacción TAMBIÉN abarcaba a los registros añadidos vía la función y los considera dentro del proceso del commit/rollback, y después de un tiempo corriendo para probarla, puedo decir que sí, los considera y los procesa como si estuviesen dentro del try mismo.

Gracias a todos por sus esclarecedoras respuestas.
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively...

"Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum.

Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco
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
Base de datos NO valida Choclito Firebird e Interbase 11 21-11-2011 00:18:35
Es posible trabajar con un fichero de estructura variable? xaguilars Varios 10 31-07-2007 05:09:03
Mi criaturita es valida!!! papulo HTML, Javascript y otros 6 05-04-2006 09:16:25
Es posible para solo la estructura de la base de datos de ib expert a Access Nelly Varios 3 10-02-2006 08:37:59
duda clave primaria en Paradox mak8888 Tablas planas 1 26-06-2005 21:48:57


La franja horaria es GMT +2. Ahora son las 15:56:54.


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