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 14-12-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Y aunque lo creo innecesario, tambien podes:
Código:
IBDatabase1 <--+- IBTransaction1 <-- IBQuery1
               |
               +- IBTransaction2 <-- IBQuery2
               |
               +- IBTransaction3 <-- IBQuery3
               ...
Saludos.
Pues yo diría que esta opción es quizá más sana y segura para evitar conflictos sobre las transacciones. Por ejemplo, como cuando se tiene el error de que ya existe una transacción abierta.
Con esta forma uno puede dejar abierto varias transacciones individualmente en cuanto necesite. No está demás aclarar que tampoco es para dejarlas activas todo el tiempo, pero con esta manera si uno se es ordenado puede controlar mejor cada transacción posible de hacer en el sistema y tomar las acciones para el caso.
Pregunta: ¿Cómo le haces para detectar y discrimar cual de los tantos Datasets ligado a una única transacción es quien está en funciones y acaparando el uso de dicha transacción?

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #2  
Antiguo 14-12-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Delphius Ver Mensaje
Pregunta: ¿Cómo le haces para detectar y discrimar cual de los tantos Datasets ligado a una única transacción es quien está en funciones y acaparando el uso de dicha transacción?
Código SQL [-]
ibquery3.transaction.commit;
Responder Con Cita
  #3  
Antiguo 17-12-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Código SQL [-]
ibquery3.transaction.commit;
Se entiende que mi pregunta es cómo desde una transacción vas a distinguir cual de los datasets conectados a éste está es operación y haciendo uso del contexto. Se aprecia en tu código que estás haciendo lo opuesto, y lo que es peor, traspasando un mensaje por un intermedio y desobedeciendo la Ley de Demeter.
En términos reales y semánticos existen varias transacciones en una base de datos. Por tanto es natural y de esperarse que se requiera de mas de una transacción y no unicamente la de por “defecto“.
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #4  
Antiguo 17-12-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Que exista más de una transacción no tiene nada que ver con el número de 'componentes Transaction'
Responder Con Cita
  #5  
Antiguo 17-12-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Que exista más de una transacción no tiene nada que ver con el número de 'componentes Transaction'
Oh... claro que si. Puesto que el componente no es más que la abstracción de éstas.
El IBTransaction lo que hace es determinar si está activa alguna transacción para operar, y sólo puede atender una a la vez. Por tanto con un único componente tu aplicación sólo puede atender de a una transacción por vez. Que gracias al poder del aislamiento el componente es capaz de escuchar si hay otras transacciones, no quiere decir que no tenga que ver, sino que es necesario de esto para determinar si es una operación válida. Pero he aquí que esta capacidad sale fuera del concepto ya del módulo de datos... sino que se hace al nivel propio de la base de datos.
Que pueda escucharlas, no quiere decir que las administre a todas. Sólo puede trabajar con una y de a una por vez.
Cuando se requiere de más de una transacción activa (y los correspondientes datasets) (que hay casos en los que se requiere) no puedes administrarlas, en tu aplicación y en la capa de datos, con un único componente.

En tu ejemplo, si efectivamente dispones de un único componente para las transacciones entonces tu código puede limpiarse mejor y no hacer esos pasos intermedios de ir desde alguno de los datasets. Basta con hacer simplemente:

Código Delphi [-]
MiTransaccion.Commit;

Como he dicho, ¿Dado un componente IBTransaction, cómo puedes saber que dataset está haciendo uso y solicitando una operación?

Bien dices que si tienes, y sabes, que la operación X pasa por el dataset Y entonces puedes controlar el flujo del programa de la forma:

Código Delphi [-]
MiDataSet.Algo;

Cuando estás en una apreciación inversa, en donde por necesidad hay posiblemente más de una transacción activa (que se puede hacer), ¿Cómo vas a controlar cuál transacción y que dataset en cuestión está actuando?
Velo con un ejemplo: se ha detectado un error y la práctica indica que debe capturarse la debida excepción y actuar en consecuencia. Generalmente, cuando el contexto lo amerita se lanza una nueva excepción con la información adecuada al contexto para la siguiente capa (se lo conoce, por si no lo sabes, como el patrón "Convertir excepciones" o "Abstracción de Excepciones") (1). Puede ser de interés por tanto saber ante un error de operación, (además de dicha operación) que combinación de transacción y conjunto de datos están involucrados. Esto ayuda a aislar el problema y poder encontrar una solución más pronto.

(1) Un ejemplo de ésto sería algo como: EDatabaseError >> EContableOperationException >> ELibroDiarioException. Donde la excepción se va elevando e incorporando información adicional para el contexto... Tal es así que al final una ELibroDiarioExcepcion sabe que una operación contable no pudo efectuarse debido a un error de base datos.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #6  
Antiguo 17-12-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hay una cosa clara: una gestión comercial completa con centenares de tablas, con más de cien conexiones constantes de usuarios, trabajando sin problemas... y con un solo componente TIBTransaction.
Ese es el método de trabajo que he llevado desde hace... muchos años, y nunca he tenido ningún problema, y siguen trabajando de esa forma.
En los distintos sitios que he trabajado, con distintos softwares, siempre se ha usado ese método, y todos siguen funcionando perfectamente.

Así que las "explicaciones de libro" que das... no sé si son alejadas del mundo real o, simplemente, no entiendo qué quieres decir.

Última edición por Casimiro Notevi fecha: 17-12-2012 a las 16:58:58.
Responder Con Cita
  #7  
Antiguo 17-12-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
A lo que voy amigo es que hay situaciones y situaciones. Habrá casos en los que se requiera trabajar con varias transacciones y otros en los que no.
No se puede asegurar y generalizar.

Depende, depende, depende diría un cuate mexicano

Se puede trabajar con ambas maneras. Y no me parece mal el que se disponga de más de un componente TIBTransaction. Yo uso un poco de ambas.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
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
Usar consulta para varios formularios jlrdz Conexión con bases de datos 6 05-02-2011 02:16:51
IBDataBase Timeout pabloc Conexión con bases de datos 0 20-06-2008 08:18:37
¿¿ como usar el tag con varios checkbox ?? gaston260 Varios 7 21-04-2008 06:19:02
usar un procedure en varios formularios adonai Varios 21 30-03-2007 17:42:34
Duda sobre el IBQuery e IBTABle cual usar?? (VIH)Lestat Conexión con bases de datos 17 26-06-2005 03:16:10


La franja horaria es GMT +2. Ahora son las 14:22:03.


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