Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   concurrencia en interbase (https://www.clubdelphi.com/foros/showthread.php?t=8884)

hibero 05-04-2004 10:04:44

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

guillotmarc 06-04-2004 11:23:30

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.

Voutarks 06-04-2004 12:52:52

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.

AdrianD 07-04-2004 00:51:09

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

ronimaxh 13-04-2004 22:33:57

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.

Gydba 14-04-2004 14:00:02

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?

ronimaxh 14-04-2004 15:11:12

gracias amigo por tu respuesta.


La franja horaria es GMT +2. Ahora son las 21:11:50.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi