Club Delphi  
    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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-11-2007
skaiser skaiser is offline
Miembro
 
Registrado: may 2003
Posts: 13
Poder: 0
skaiser Va por buen camino
Totalizar sobre una base en actualizacion

Estimados Foristas:
El problema que se me presenta es tener que calcular totales sobre tablas con un gran número de registros mientras estos se encuentran en actualización.
Para tratar de aclarar un poco, el problema puede pensarse como que tengo un par de tablas en relacion maestro/detalle con un gran numero de registros y sobre estas debo, primero, realizar cálculos en la tabla maestra y totales sobre la tabla de detalle y presentarlos en una nueva relación maestro/detalle. Si bien la actualización se realiza en un ambiente transaccional, los tiempos involucrados hacen que los resultados de las consultas sean inconsistentes, es decir que la informacion dada en la tabla maestra no se corresponde con lo totalizado en la tabla detalle. Si alguien conoce algun método o técnica para realizar estas presentación, le agradeceria cualquier sugerencia. Muchas gracias.
Responder Con Cita
  #2  
Antiguo 03-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Kinobi hizo en su momento un pdf llamado "transacciones en Interbase y Firebird, ignoro si está en este foro, aunque en www.firebird.com.mx lo puedes encontrar. Te recomiendo su detenida lectura.

Allí se habla del nivel de aislamiento de una transacción (isolation level), creo que en lugar de usar read commited (que será la que usas actualmente) deberías usar snapshot. Esto se indica en los parámetros del objeto Transaction que uses, dicho de otra forma, en la propiedad Transaction.Params

Cita:
SNAPSHOT: conocido también por lectura repetible (repeteable read). Ofrece
un nivel de aislamiento alto, de tal forma que la transacción no puede
ver los cambios provocados por otras transacciones; es decir, mantiene una
foto fija del estado de la base de datos en el momento que se inició la transacción
A groso modo:
- Empezamos una transacción nueva
- hacemos operaciones con la maestra
- operaciones con la detalle
- buscamos los totales de la detalle (como nuestra transacción en snapshot no puede ver las actualizaciones realizadas por otras transacciones, solo verá los cambios realizados antes de que empezó nuestra transacción).
- mostramos todo en pantalla
- cerramos transacción (commit).

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 03-11-2007 a las 18:52:02.
Responder Con Cita
  #3  
Antiguo 04-11-2007
tefots tefots is offline
Miembro
 
Registrado: feb 2005
Posts: 108
Poder: 20
tefots Va por buen camino
yo creo que el problema es que aunque usando la transaccion en modo snapshot , como los calculos tardan en hacerse (por la cntidad de registros) , siempre habrá alguien que modifique algun registro en el detalle , con lo que los calculos quedarian inconsistentes , ya que lo calculado no corresponderia con lo que realmente hay en el detalle al hacer el commit.

la unica manera que veo es meter triggers y proc almacenados y que estos sean los que hagan los calculos y actualicen los totales. y aun así tampoco estoy seguro que funcione correctamente.

saludos
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
Report Manager - Totalizar campos hperez Impresión 0 23-07-2007 20:00:46
Totalizar sin anidar consultas? Miguel Galarza Firebird e Interbase 0 10-11-2006 23:37:46
Problema de actualizacion de base de datos dmagui Varios 1 20-12-2005 21:44:13
Problema con la actualizacion de un base Interbase Sebas77 Firebird e Interbase 1 27-06-2005 16:29:30
Actualización base de datos remota D@byt Conexión con bases de datos 2 16-05-2005 19:18:22


La franja horaria es GMT +2. Ahora son las 21:44:08.


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