[Lazarus-es] AYUDA, una pregunta sobre TSQLTransaction

SOCGER .- socger en hotmail.com
Lun Mayo 18 11:34:36 CEST 2015


Se que a estas alturas puede ser una pregunta tonta, pero he llegado a una DUDA que más abajo detallo y necesitaría saber si es correcta, ¡por favor!
Estoy trabajando con MySQL y los componentes sqldb propios de lazarus.

Tengo los siguientes componentes creados en una procedure :
procedure nombre_procedurevar var_SQLTransaction : TSQLTransaction;       var_SQLConnector   : TSQLConnector;       var_SQLQuery       : TSQLQuery;beginend;
sobre var_SQLQuery hago diferentes trabajos
primero una SELECTsi la select me devuelve que no existe algo creo con un INSERT ese algo inexistente
si se llego a hacer este primer INSERTactualizó con varios UPDATE varias tablas por ejemplo una tabla de STOCK
y si se realizan todos los UPDATE considero que es el momento de actualizarvar_SQLTransaction.Commit;
pero si en el momento de hacer todos los anteriores pasos se produce un error o considero que no se debe de actualizar nada pues tiro marcha atras con var_SQLTransaction.Rollback;

Bueno pues ahora es el momento de presentar la DUDA:
Imaginemos que antes de hacer el commit alguien hace el mismo proceso y me actualiza el mismo registro de la tabla STOCK, es decir que la máquina A está haciendo esta procedure y está actualizando el stock del artículo X y sin hacer el commit la máquina A, una máquina B hace el mismo proceso sobre el mismo artículo X y actualiza el STOCK antes que la máquina A.
Ahora viene la pregunta del millón:¿Una Transacion abierta obliga al servidor a esperar a la máquina B hasta que no termina la transacción de la máquina A?O lo que es lo mismo, como la máquina A tiene una transacción que todavía no ha hecho un COMMIT, tiene prioridad sobre el resto de máquinas y las demás no hacen hada hasta que esta transacción está terminada?
A ver, que lo que necesitaría es saber si trabajando de esta manera voy a tener problemas de concurrencia sobre un mismo registro a la hora de actualizarse.
Hasta ahora he estado trabajando en SQLserver con procedimientos almacenados y funciones. Con ellos no he tenido problemas porque en SQLserver cuando se ejecuta un procedimiento, o una función, se ejecuta hasta el final sin permitir concurrencia.
Pero he decidido por futuras políticas de migración de base de datos no usar procedimientos ni funciones almacenadas en mysql, sino que directamente hacerlo todo desde lazarus. Por este motivo es que tengo esta grave duda a la que os agradecería de corazón una respuesta lo más sencilla y encaminada posible.
De antemano os agradezco de todo corazón vuestra cooperación y ayuda. También sirva estas líneas para agradecer vuestro apoyo a esta lista.
Saludos

 		 	   		  
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20150518/1ed801f3/attachment-0002.html>


More information about the Lazarus-es mailing list