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 Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-12-2003
gario gario is offline
Miembro
 
Registrado: oct 2003
Ubicación: Gijon
Posts: 34
Poder: 0
gario Va por buen camino
Unhappy Las transacciones y yo

Hola a todo el mundo:

No tengo muy claro como implementar una transaccion, os cuento mi problema. Tendo dos tablas una de citas y una de clientes necesito que en deteminado momento se actualice un registro de la tabla citas y el asociado de la tabla clientes. Evidentemente todo seguido para mantener la informacion coherente.

Me gustaria saber como implementar eso en delphi mediante los componente de IBX, lo que no tengo muy claro es como usar el el componente ibtransaction como asociarlo a las acciones que realizo como conseguir que no me de problemas con otras transacciones (me da errores de que estan otras abiertas o algo asi)

Creo que se puede definir la transaccion en la propia base de datos pero tampoco tengo muy claro como implementar... los conceptos los se y la teoria... pero me vendria de perlas un ejemplo en codigo puro y duro

Gracias de antemano!!
Responder Con Cita
  #2  
Antiguo 16-12-2003
Avatar de Voutarks
Voutarks Voutarks is offline
Miembro
 
Registrado: jul 2003
Ubicación: Islas Canarias
Posts: 118
Poder: 21
Voutarks Va por buen camino
En primer lugar y aunque dices que sabes la teoría, ¿te has leido el magnífico manual sobre las transacciones de nuestro amigo kinobi? Es un .pdf que pueden encontrar en este enlace (pinchar aqui)

Sabrás que las transacciones se manejan desde IBX con el componente IbTransaction. No hay que saber demasiado, solo un par de cosas.

Todos los componentes de acceso a datos (query's, sql's, etc) tendrás que asociarlos a una o varias transacciones, las cuales irán asociadas a una o varias bases de datos. Las transacciones, desde un punto de vista lógico, yo las veo como agrupaciones de instrucciones en bloque, asi qee en un programa concreto según como sea y cómo va a funcionar se ve, más o menos, como debe ser esta distribución, si a tal transacción se le asocia este y/o este otro conponente de datos, etc. Como regla general mía te puedo decir que el número de transacciones que hay en la aplicación suele coincidir con el número de operaciones concurrentes de datos que se pueden llegar a relizar en la aplicación, así que en general cualquier aplicación tendrá como mínimo dos, una de lectura y otra de escritura-modificación-borrado.

Pudes dejar que las transacciones se abran solas (es la opción por defecto) o que se cierren solas (no es la opción por defecto y no es nada recomendable, opino yo). Yo personalmente abro explícitamente todas las transacciones, asi que pongo la propiedad AllowAutoStart de la transaccion a false, pero si se deja que se abran solas tampoco supone practicamente ningun riesgo.

Tambien debes saber cuando tienes que confirmar o rechazar los cambios: para confirmar está el método commit y para rechazar el rollback, ambos métodos cierran la transacción, es decir, la terminan. También están el commitretaining y rollbackretaining, que confirman o rechazan pero manteniendo el "contexto" de la transacción, es decir que la transacción sique abierta y los recursos del servidor siguen ocupados por ella. A mi personalmente no me gusta este enfoque y no procuro no hacer nunca ..retaining.

Con eso para empezar está bien. Te recomiendo leer el manual de kinobi una vez más.
__________________
Emilio J. Curbelo
Responder Con Cita
  #3  
Antiguo 16-12-2003
gario gario is offline
Miembro
 
Registrado: oct 2003
Ubicación: Gijon
Posts: 34
Poder: 0
gario Va por buen camino
Lo primero agradecerte la respuesta....

He oido hablar mucho muchisimo de ese manual y me he leido muchos post de Kinobi en estos dos dias... pero no se por que gracia no puedo acceder a terra con lo que no puedo bajarme ese manual... esperare a poder entrar desde algun sitio para leeme el documento porqeu estoy muy torpe y no soy capaz de explicarme bien y cada dia me lio mas.

Muchas gracias de nuevo.
__________________

Un trozo de chocolate te da la energia necesaria para ir a por otro trozo de chocolate (by ELENA)
Responder Con Cita
  #4  
Antiguo 17-12-2003
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Gario, he bajado el archivo sin problemas, lo tienes en tu correo hotmail

SAludos
Responder Con Cita
  #5  
Antiguo 18-12-2003
gario gario is offline
Miembro
 
Registrado: oct 2003
Ubicación: Gijon
Posts: 34
Poder: 0
gario Va por buen camino
Muchas gracias Lepe. Procedo a estudiarmelo.
__________________

Un trozo de chocolate te da la energia necesaria para ir a por otro trozo de chocolate (by ELENA)
Responder Con Cita
  #6  
Antiguo 16-03-2009
Avatar de peccatum
peccatum peccatum is offline
Miembro
 
Registrado: oct 2005
Posts: 89
Poder: 19
peccatum Va por buen camino
hola

yo lo que tengo que resolver es algo parecido a lo del amigo, estoy con componentes MDO....

Cual sería la forma más apropiada para configurar los componentes? ya que tengo dos datasets (Típico Documentos - Detalle_Documentos), y claro, tengo una función llamada Cargar_lineas_documento la cual hace varios posteos a la DB, y si en algún punto falla necesito que no se cargue nadita nada de nada. Es lo que no estoy logrando ='(

Teniendo en cuenta el enfoque de una transacción global para escritura, esta debería ser usada por todos los Datasets pertenecientes a una misma DB?

Pongámosle TR_ESCRITURA, a esta transacción, y teniendo la propiedad transaction de los datasets apuntando a esa transacción debería funcionar de la siguiente forma?

Código Delphi [-]
try
               TR_ESCRITURA.StartTransaction;
                Enc_Documentos.Post();
                Cargar_lineas_Documentos (ID_DOCUMENTO);
                TR_ESCRITURA.Commit;
            except
               TR_ESCRITURA.Rollback;
               raise;
            end;

lo he encarado de esta forma y no me viene funcionando.... :S O hay que hacer un begin transaction por cada dataset?

Saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 08:03:29.


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