<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<STYLE>.hmmessage P {
PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px
}
BODY.hmmessage {
FONT-SIZE: 12pt; FONT-FAMILY: Calibri
}
</STYLE>
<META content="MSHTML 6.00.2900.5512" name=GENERATOR></HEAD>
<BODY class=hmmessage bgColor=#ffffff>
<DIV><FONT face=Arial size=2>Para mi entender estas tirando el trabajo del motor
de datos por la borda. Precisamente estás haciendo todo lo contrario a lo que
debe ser y por tanto tienes que estar dispuesto a pagar las
consecuencias.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Yo no te recomiendo que hagas nada de eso en
Lazarus, para eso están los gestores de datos. La manipulación de los datos debe
realizarla si o si el servidor de datos, a no ser que sea una aplicación
monousuario que en ese caso si la puede hacer el cliente, y aun así no lo
recomiendo porque si vas a pasar la aplicación a cliente servidor tendrías que
hacer todo de nuevo.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Para mi no te queda más que definir bien la base de
datos a usar o caso contrario usar un Framework lo cual te evitaría separar las
capas lo cual te evitaría estar pensando que motor de datos vas a
utilizar.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Saludos</FONT></DIV>
<DIV>========<BR>| ISMAEL |<BR>========<BR>Only for the small landowners and
Cubans companies<BR>Website: <A
href="http://www.sisconge.byethost15.com">www.sisconge.byethost15.com</A><BR>
<A href="http://www.sisconge.hol.es">www.sisconge.hol.es</A></DIV>
<BLOCKQUOTE
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV style="FONT: 10pt arial">----- Original Message ----- </DIV>
<DIV
style="BACKGROUND: #e4e4e4; FONT: 10pt arial; font-color: black"><B>From:</B>
<A title=socger@hotmail.com href="mailto:socger@hotmail.com">SOCGER .-</A>
</DIV>
<DIV style="FONT: 10pt arial"><B>To:</B> <A
title=lazarus-es@lists.lazarus.freepascal.org
href="mailto:lazarus-es@lists.lazarus.freepascal.org">lazarus-es@lists.lazarus.freepascal.org</A>
</DIV>
<DIV style="FONT: 10pt arial"><B>Sent:</B> Monday, May 18, 2015 5:34 AM</DIV>
<DIV style="FONT: 10pt arial"><B>Subject:</B> [***SPAM*** Score/Req: 5.4/5.0]
[Lazarus-es] AYUDA, una pregunta sobre TSQLTransaction</DIV>
<DIV><BR></DIV>
<DIV dir=ltr>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!
<DIV><BR></DIV>
<DIV>Estoy trabajando con MySQL y los componentes sqldb propios de
lazarus.<BR>
<DIV><BR></DIV>
<DIV>Tengo los siguientes componentes creados en una procedure :</DIV>
<DIV><BR></DIV>
<DIV>
<DIV>procedure nombre_procedure</DIV>
<DIV>var var_SQLTransaction : TSQLTransaction;</DIV>
<DIV> var_SQLConnector : TSQLConnector;</DIV>
<DIV> var_SQLQuery :
TSQLQuery;</DIV></DIV>
<DIV>begin</DIV>
<DIV>end;</DIV>
<DIV><BR></DIV>
<DIV>sobre var_SQLQuery hago diferentes trabajos</DIV>
<DIV><BR></DIV>
<DIV>primero una SELECT</DIV>
<DIV>si la select me devuelve que no existe algo creo con un INSERT ese algo
inexistente</DIV>
<DIV><BR></DIV>
<DIV>si se llego a hacer este primer INSERT</DIV>
<DIV>actualizó con varios UPDATE varias tablas por ejemplo una tabla de
STOCK</DIV>
<DIV><BR></DIV>
<DIV>y si se realizan todos los UPDATE considero que es el momento de
actualizar</DIV>
<DIV>
<DIV>var_SQLTransaction.Commit;</DIV></DIV>
<DIV><BR></DIV>
<DIV>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 </DIV>
<DIV>
<DIV>var_SQLTransaction.Rollback;</DIV></DIV>
<DIV><BR></DIV>
<DIV><BR></DIV>
<DIV>Bueno pues ahora es el momento de presentar la DUDA:</DIV>
<DIV><BR></DIV>
<DIV>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.</DIV>
<DIV><BR></DIV>
<DIV>Ahora viene la pregunta del millón:</DIV>
<DIV>¿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?</DIV>
<DIV>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?</DIV>
<DIV><BR></DIV>
<DIV>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.</DIV>
<DIV><BR></DIV>
<DIV>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.</DIV>
<DIV><BR></DIV>
<DIV>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.</DIV>
<DIV><BR></DIV>
<DIV>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.</DIV>
<DIV><BR></DIV>
<DIV>Saludos</DIV>
<DIV><BR></DIV>
<DIV><BR></DIV></DIV></DIV>
<P>
<HR>
<P></P>_______________________________________________<BR>Lazarus-es mailing
list<BR>Lazarus-es@lists.lazarus.freepascal.org<BR>http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es<BR></BLOCKQUOTE></BODY></HTML>