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 05-04-2004
hibero hibero is offline
Miembro
 
Registrado: nov 2003
Posts: 104
Poder: 21
hibero Va por buen camino
concurrencia en interbase

Estoy usando FB 1.5 accediendo con IBX y programando en Delphi 7.

Si tengo una pantalla en la que van a trabajar varios clientes al mismo tiempo. Si coloco la transaccion en Read-Commited, todo funciona bien. Permite que todos puedan editar, a la hora de actualizar si dos van a actualizar al mismo tiempo, se produce un error que se captura y listos. Con un evento puedo hacer que cuando alguien actualice una tabla los demas refresquen la información.
Pero vamos q imaginar que 2 usuarios esten modificando el mismo registro, de manera que permito editar a los dos la miama pantalla al mismo tiempo, SUpongamos que guardan al mismo tiempo. En ese caso uno guardara y al otro se le producirá un error. El caso es que el error se le produce despues de haber etado modificando un rato. ¿de que manera puedo hace que si alguien este modificando una regostrp eñ resto de los usuarios solo puedan leer un registro?.

salu2 a todos
Responder Con Cita
  #2  
Antiguo 06-04-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola.

Utiliza un campo EN_MODIFICACION como flag. Cuando un usuario empieza a modificar un registro, pón ese campo a 1 (pero sin hacer Commit a la transacción), ahora el registro estará bloqueado para cualquier modificación en otra sesión. Cuando el usuario termine de modificar el registro, pon a 0 el campo EN_MODIFICACION y haz el Commit correspondiente a la transacción.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #3  
Antiguo 06-04-2004
Avatar de Voutarks
Voutarks Voutarks is offline
Miembro
 
Registrado: jul 2003
Ubicación: Islas Canarias
Posts: 118
Poder: 21
Voutarks Va por buen camino
Aunque yo no le utilizado todavía, quizá para este caso funcionaría muy bien esto (tomado de las release notes de Fb 1.5):

Cita:
(1.5) Bloqueos explícitos
Nickolay Samofatov
La introducción de la cláusula opcional WITH LOCK proporciona una limitada capacidad de hacer
bloqueos pesimistas explícitos para uso prudente en las condiciones en las que el conjunto de registros
afectados es a) extremadamente pequeño (mejor si es uno solo) y b) exactamente controlado por el
código del aplicativo.
__________________
Emilio J. Curbelo
Responder Con Cita
  #4  
Antiguo 07-04-2004
AdrianD AdrianD is offline
Miembro
 
Registrado: may 2003
Ubicación: San Juan - Argentina
Posts: 113
Poder: 22
AdrianD Va por buen camino
Si tu necesidad de bloquear el registro pasa solo por evitar el error`puedes usar los IBQuery o IBTables "enganchados" a proveedores con ClientsDatasets, también conocido como datasnap. Hay que configurar el proveedor con la opción UpdateMode = upWhereChanged, además en los IBQuery o IBTables, hay que configurar en los campos de las tablas la propiedad ProviderFlags que por defecto tiene los valores [pfInUpdate,pfInWhere], a los que tendriamos que agregar pfInKey para el o los campos que sean claves. De esta manera el proveedor formará la sentencia SQL de actualización, insercion o borrado solamente con los campos modificados. En la página de borland hay unos ejemplos muy buenos, no recuerdo bien el link, pero estan escritos por Bill Tod. Espero que sirva, yo lo uso con muy buenos resultados
Responder Con Cita
  #5  
Antiguo 13-04-2004
ronimaxh ronimaxh is offline
Miembro
 
Registrado: jun 2003
Ubicación: Rep. Dominicana
Posts: 307
Poder: 21
ronimaxh Va por buen camino
Hola amigos. una pregunta es para hibero, como puedes conectarte con ibx y firebird 1.5 en delphi 7, a ver que forma es la que usas amigo.


Nota: Yo he leido aqui en este foro que no son compatibles, a cualquier compañero que me responda esto les agradezco.
__________________
ronimaxh
Rep. Dominicana
Responder Con Cita
  #6  
Antiguo 14-04-2004
Gydba Gydba is offline
Miembro
 
Registrado: ene 2004
Ubicación: Argentina
Posts: 673
Poder: 21
Gydba Va por buen camino
para ronimaxh

De hecho si es posible "trabajar" con los IBX contra Firebird 1.5, el problema que mencionás de compatibilidad podría considerarse que IBX no podría ejecutar ciertos procesos especificos de Firebird 1.5 (No así con Firebird 1 que es gemelo de Interbase 6) reduciendo las caracteristicas de la BD.
Es bastante recomendable pensar en otros componentes que tengan que ver con las capacidades específicas de Fb para consideraciones futuras.

Por otro lado me interesó eso de Bloqueos explícitos, ¿Alguien probó algo de esto y puede dar un ejemplo sobre el uso?
__________________
Suerte
.: Gydba :.
Responder Con Cita
  #7  
Antiguo 14-04-2004
ronimaxh ronimaxh is offline
Miembro
 
Registrado: jun 2003
Ubicación: Rep. Dominicana
Posts: 307
Poder: 21
ronimaxh Va por buen camino
gracias amigo por tu respuesta.
__________________
ronimaxh
Rep. Dominicana
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


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