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 18-07-2003
raul_sal raul_sal is offline
No confirmado
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 45
Poder: 0
raul_sal Va por buen camino
Bloqueo de Registro en un SP

Que tal amigos del foro tengo una consulta es posible iniciar manualmente una transaccion en un sp y destruirla al terminar la ejecucion del mismo, esto con el fin de bloquear los registros que actualizan los mismos.


Gracias
Responder Con Cita
  #2  
Antiguo 18-07-2003
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

No es recomendable, y de hecho creo que el motor no lo permite, iniciar y terminar una transacción en un Stored Procedure, sin embargo este siempre se ejecutará en el contexto de una transacción, por lo que los registros que modifica quedarán bloqueados hasta que se de un commit.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 18-07-2003
Iván Iván is offline
Miembro
 
Registrado: may 2003
Ubicación: Palma de Mallorca
Posts: 118
Poder: 21
Iván Va por buen camino
InterBase / FireBird no permiten crear una transacción dentro de un SP / Trigger.

Como te dice jachguate, al ejecutar un SP este ya estará dentro de una transacción, y hasta que no confirmes los cambios, nadie más verá las modificaciones sobre el registro.

Un saludo.
__________________
Di amigo, y entra...
Guía de estilos de los foros

Visita www.mundobd.com
Responder Con Cita
  #4  
Antiguo 18-07-2003
raul_sal raul_sal is offline
No confirmado
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 45
Poder: 0
raul_sal Va por buen camino
Bueno el problema que tengo en realidad es que dentro de un SP manejo la actualizacion de un campo X pero resulta que cuando 2 personas actualizan a la vez el registro este no se bloquea y resulta que uno de los dos actualiza la version anterior del mismo.


Que puedo hacer con esto?
Responder Con Cita
  #5  
Antiguo 18-07-2003
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
Hola,

utiliza una edición "en vacío" previa a la edición real, algo parecido a ...

Código:
  UPDATE <tabla> 
    SET <clave> = <valor_actual_clave>
    WHERE <clave> = <valor_actual_clave>
  ...
  ...
  /* resto de procesos */
  ...
  ...
  /* edición real */
con ésto consigues simular (en realidad es un bloqueo real) un bloqueo sobre el registro(s) en cuestión.

Si quieres que al resto de transacciones (usuarios) el servidor les devuelva un error si intentan editar también ese registro, utiliza el parámetro "NO WAIT" para la transacción; si quieres que la transacción espere a que se solucione el bloqueo (bien por un COMMIT o un ROLLBACK) utiliza el parámetro "WAIT".

Saludos.
Responder Con Cita
  #6  
Antiguo 19-07-2003
raul_sal raul_sal is offline
No confirmado
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 45
Poder: 0
raul_sal Va por buen camino
Gracias por contestar Kinobi,

Solo una consulta en donde muevo los parametros WAIT o NO WAIT
Responder Con Cita
  #7  
Antiguo 19-07-2003
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
Hola,

Cita:
Posteado originalmente por raul_sal
Solo una consulta en donde muevo los parametros WAIT o NO WAIT
eso depende del método que estés utilizando para conectarte a tu servidor. Si utilizas SQL embebido será de una manera, si utilizas componentes de acceso (tipo IBX, DBX, ...) en una aplicación Delphi, C++, ..., será de otra y si utilizas directamente el API será otra ... depende.

Por cierto, no estoy ahora mismo seguro al cien por cien, pero creo que el valor predeterminado es: NO WAIT.

¡Ah!, otra cosa, el "bloqueo" del que estamos hablando es un bloqueo de escritura, pero no de lectura.

Saludos.
Responder Con Cita
  #8  
Antiguo 19-07-2003
raul_sal raul_sal is offline
No confirmado
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 45
Poder: 0
raul_sal Va por buen camino
Me conecto por medio de las IBX y en otros casos con BDE, como puedo hacer para controlar las transacciones.
Gracias
Responder Con Cita
  #9  
Antiguo 19-07-2003
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
Hola,

Cita:
Posteado originalmente por raul_sal
como puedo hacer para controlar las transacciones.
En primer lugar conociéndolas. Para ello te recomiendo la lectura de un artículo que escribí hace tiempo sobre el tema; en mi página web podrás descargártelo en varios formatos ...

http://www.clubdelphi.com/users/kinobi/

Al final del documento hay una serie de referencias (algunas a páginas web) que también es interesante seguir.

Como además comentas que utilizas IBX, te recomiendo también la lectura de este trabajo que se centra más en el asunto de las transacciones InterBase desde IBX ...

http://webs.satlink.com/usuarios/c/c...delphi/IBX.zip

no tengo a mano el nombre del autor, pero si alguien tiene la referencia le agradecería que la pusiese para darle su justo y merecido reconocimiento.

Saludos.
Responder Con Cita
  #10  
Antiguo 19-07-2003
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
Hola de nuevo,

Cita:
Posteado originalmente por kinobi
no tengo a mano el nombre del autor, pero si alguien tiene la referencia le agradecería que la pusiese para darle su justo y merecido reconocimiento.
me autocito a mi mismo porque creo que he localizado el nombre del autor, y éste es: Ernesto Cullen.

Pues para Ernesto mi/nuestro agradecimiento.

Por cierto, aunque hace un par de años que parece que no actualiza su web, contiene otros artículos interesantes sobre bases de datos y Delphi. La dirección es ...

http://webs.satlink.com/usuarios/c/c...ajarDelphi.htm

Saludos.
Responder Con Cita
  #11  
Antiguo 21-07-2003
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
En el caso específico del BDE, a través del componente TDatabase.

Digamos

db1.StartTransaction;
db1.Commit;
db1.Rolloback;

Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #12  
Antiguo 21-07-2003
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
Hola,

Cita:
Posteado originalmente por jachguate
db1.StartTransaction;
db1.Commit;
db1.Rolloback;
me da la impresión que raul_sal preguntaba por la forma de modificar los parámetros de la transacción, tanto en IBX como en BDE.

Si es ése el caso, seguramente estos enlaces ayudarán (para BDE):

http://www.delphi32.com/info_facts/faq/faq_873.asp

http://www.mers.com/INTERBASE4096.HTML

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


La franja horaria es GMT +2. Ahora son las 14:35:16.


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