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 15-07-2005
Leonardo Leonardo is offline
Miembro
 
Registrado: ago 2004
Posts: 37
Poder: 0
Leonardo Va por buen camino
Bloqueo Optimista

Que tal estoy tabajando con Delphi7 y FireBird 1.5, lei acerca de que este los RDBMS manejanban los bloqueos optimista por si solo (O tal vez estoy mal),

La cosa es que he he probado con una aplicacion sencilla para probar esto, solo un Grid y un datanavigator, corro 2 aplicaciones de estas y empiezo a editar un registro en mi primera aplicacion, en la segunda empiezo a editar el mismo registro que la primera aplicacion, Grabo los cambios en la primera aplicacion y despues pruebo grabar en la segunda aplicacion y se graban se supone que en esta parte deberia haber un mensaje de que los cambios no pueden ser grabados debido a que en registro ya ha sido modificado.

Quisiera saber como poder lograr el bloqueo optimista realmente es algo de mis configuraciones de mis controles pork he probado con los IBObjects y con FIBPlus y no he logrado conseguuirlo,

Me gustaria mucho que me pudieran orientar en como poder lograr esto Gracias.
Responder Con Cita
  #2  
Antiguo 15-07-2005
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
en el libro de Ian Marteens tienes una explicación bastante clara, creo que te puede venir bien el leer esa parte Ian Marteens
Responder Con Cita
  #3  
Antiguo 19-07-2005
Leonardo Leonardo is offline
Miembro
 
Registrado: ago 2004
Posts: 37
Poder: 0
Leonardo Va por buen camino
oK casimiro lei esa parte de los blokeos del libro la cara oculta de delphi 4, y si menciona que Interbase hace por si solo el blokeo optimista a traves de su arquitectura , no creo que tenga que ver que yo utilizo Firebird 1.5 ya que firerbird viene de Interbase. Hice una prueba iinstalando un driver ODBC para Firebird y utilize los componentes ADO los cuales tienen una proiedad "Lock Tpe" y ahi es don de yo selecciono la optimista y pruebo el programita que hice y si funciona, pero obviamente no seria lo optimo trabajar con a traves de ODBC es por eso que tengo esa duda sobre si hay que configurar algo en los FIBPLUS o en los IBOBJECTS ya que corro el programa utilizando estos componentes y no ocurre ninguna excepcion..

De cualquier modo tratare de hacer la prueba utilizando Interbase en vez de Firebird.
Responder Con Cita
  #4  
Antiguo 19-07-2005
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No entiendo bien qué quiéres decir, ¿usas ADO, IBObjcets, FIBplus?, no entiendo.
Responder Con Cita
  #5  
Antiguo 20-07-2005
Leonardo Leonardo is offline
Miembro
 
Registrado: ago 2004
Posts: 37
Poder: 0
Leonardo Va por buen camino
Si mira hice las pruebas utilizando independientemente cada uno de estos componentes con el los unicos que logre k ocurriera se diera la excepcion de que existia el blokeo optimista fue con los ADO atraves de un driver ODBC que instale para poder utilizar los ADO
Responder Con Cita
  #6  
Antiguo 20-07-2005
Avatar de Rufus
Rufus Rufus is offline
Miembro
 
Registrado: may 2004
Ubicación: Canarias
Posts: 193
Poder: 20
Rufus Va por buen camino
Cita:
Empezado por Leonardo
La cosa es que he he probado con una aplicacion sencilla para probar esto, solo un Grid y un datanavigator, corro 2 aplicaciones de estas y empiezo a editar un registro en mi primera aplicacion, en la segunda empiezo a editar el mismo registro que la primera aplicacion, Grabo los cambios en la primera aplicacion y despues pruebo grabar en la segunda aplicacion y se graban
Correcto, así es justo como tiene que comportarse con IBX o FIBPlus si dejas las transacciones con los parámetros por defecto.

Creo que no tienes claro qué significa bloqueo optimista.
  • Bloqueo optimista: cuando una transacción está modificando los datos de un registro no bloquea a las otras transacciones que quieren leer ese registro, las cuales pueden seguir viendo la versión de antes de que empezara la modificación. RESUMIENDO: los escritores no bloquean a los lectores.
  • Bloqueo pesimista: cuando una transacción está modificando los datos de un registro, bloquea a las otras transacciones que quieren leer ese registro, las cuales obtienen una excepción. En algunos sistemas el bloqueo puede llegar al nivel de la tabla entera. RESUMIENDO: los escritores bloquean a los lectores.
Ahora bien, tu planteas el caso de dos transacciones que quieren escribir (modificar) el mismo registro al mismo tiempo. ....Aaaaaamigo, eso es otra cosa, digamos que es algo que va más allá de que el bloqueo sea optimista, y el comportamiento a segir, pues depende, como verás ahora.

Primero, aqui tienes el manual de kinobi sobre transacciones en firebird: http://www.terra.es/personal2/jrodri...ones-0.2.6.pdf

Y ahora te paso lo que pone el manual de los FIBPlus 5.3 sobre los parámetros de las transacciones:
--------------------------------------------------------------------------
Using the transaction parameter buffer

The transaction parameter buffer (TPB) is an optional byte vector, passed to InterBase by StartTransaction procedure, that sets up a transaction’ attributes, its operating characteristics, such as whether the transaction has read and write access to tables, or read-only access, and whether or not other simultaneously active transactions can share table access with the transaction.

The following table lists some available
TPB constants:



isc_tpb_version3 InterBase version 3 transaction.

isc_tpb_consistency Table-locking transaction model. This model is serializable.

isc_tpb_concurrency High throughput, high concurrency transaction with repeatable read consistency. This mode takes full advantage of the InterBase multigenerational transaction model [Default].

isc_tpb_shared Concurrent, shared access of a specified table among all transactions; use in conjunction with isc_tpb_lock_read and isc_tpb_lock_write to establish the lock option [Default].

isc_tpb_protected Concurrent, restricted access of a specified table; use in conjunction with isc_tpb_lock_read and isc_tpb_lock_write to establish the lock option.

isc_tpb_wait Specifies that the transaction is to wait until the conflicting resource is released before retrying an operation [Default].

isc_tpb_nowait Specifies that the transaction is not to wait for the resource to be released, but instead, an update conflict error should be returned immediately.

isc_tpb_read Read-only access mode that allows a transaction only to select data from tables.

isc_tpb_write Read-write access mode of that allows a transaction to select, insert, update, and delete table data [Default].isc_tpb_lock_read Read-only access of a specified table. Use in conjunction with isc_tpb_shared, isc_tpb_protected, and isc_tpb_exclusive to establish the lock option.

isc_tpb_lock_write Read-write access of a specified table. Use in conjunction with isc_tpb_shared,

isc_tpb_protected, and isc_tpb_exclusive to establish the lock option [Default].

isc_tpb_read_committed High throughput, high concurrency transaction that can read changes committed by other concurrent transactions. Transactions in this mode do not provide repeatable read.

isc_tpb_rec_version Enables an isc_tpb_read_committed transaction to read the most recently committed version of a record even if other, uncommitted versions are pending.

isc_tpb_no_rec_version Enables an isc_tpb_read_committed transaction to read only the latest committed version of a record. If an uncommitted version of a record is pending and isc_tpb_wait is also specified, then the transaction waits for the pending record to be committed or rolled back before proceeding. Otherwise, a lock conflict error is reported at once.

You can access the transaction parameter buffer by TPB property.
--------------------------------------------------------------------------

Ahora, un ejemplo (probado):

- Abro dos ventanas de terminal y me conecto a una BD con isql.
- En las dos ventanas tecleo lo siguiente: set transaction read write no wait isolation level read committed no record_version;
- En la primera ventana tecleo: update clientes set id=2 where id=2; resultado: nada, así que no hay problema.
- Ahora, en la segunda ventana tecleo lo mismo: update clientes set id=2 where id=2; resultado:
Statement failed, SQLCODE = -901

lock conflict on no wait transaction
-deadlock

¿Es esto lo que buscas?... ya sabes, cámbia los parámetros de las transacciones. ¿Como? Tenías un programita con grid y navigator ¿no?. Entonces para IBX:

- Haz doble click sobre el componente TIBTransaction que tendrás por ahí.
- Aparece una ventana "Transaction editor", en el lado de la izquierda pica sobre "Read Committed".
- En el lado de la derecha aparece "read_commited", "rec_version" y "nowait". Sustituye a mano "rec_version" por "no_rec_version", dale a OK.
- Prueba ahora. Ejecuta dos veces tu programita.

PD: El libro de Marteens descargable de internet (la cara oculta de delphi 4) estuvo muy bien en su época (yo lo compré en su día y aún lo tengo)pero ahora, al igual que el BDE, se ha quedado atrás.
__________________
Milo

Última edición por Rufus fecha: 20-07-2005 a las 11:44:41.
Responder Con Cita
  #7  
Antiguo 20-07-2005
Leonardo Leonardo is offline
Miembro
 
Registrado: ago 2004
Posts: 37
Poder: 0
Leonardo Va por buen camino
Tenias mucha razon amigo asi me funciono ya, pero al principio no me funcionaba y es que me di cuenta de que yo tenia Mi Dataset (FibDataset) con la propiedad Autocommit=True despues de que la modifique a False y si me funciono.

Mi pregunta es ahora, no hay manera de poder trabajar con la propiedad Autocommit=True y que el comportamiento de los bloqueos sean como anteriormente me dijiste tu,

Gracias Rufus el link de Trassacciones es muy bueno y viene muy bien esplicado, aunk aun sigo un poco confundido tendre k darle mas leidas y hacer mas pruebas
Responder Con Cita
  #8  
Antiguo 20-07-2005
Leonardo Leonardo is offline
Miembro
 
Registrado: ago 2004
Posts: 37
Poder: 0
Leonardo Va por buen camino
Tenias razon amigo si funciono como me decias, solo que al principio no me funcionaba solo hasta que cambie la propiedad de mi dataset (FIBPlus) de Autocomit=true a False.

Solo que no habra la posibilidad de trabajar con la propiedad Autocomit=True ya que cuando esta en True los cambios se guardan sin que ourra ninguna exepcion y se graban los cambios del ultimo post.
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 13:13:48.


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