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.freepascal.org/pipermail/lazarus-es/attachments/20150518/1ed801f3/attachment.html>
