![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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 |
#2
|
||||
|
||||
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). |
#3
|
||||
|
||||
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:
__________________
Emilio J. Curbelo |
#4
|
|||
|
|||
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
|
#5
|
|||
|
|||
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 |
#6
|
|||
|
|||
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 :. |
#7
|
|||
|
|||
gracias amigo por tu respuesta.
__________________
ronimaxh Rep. Dominicana |
![]() |
|
|
![]() |
|