<!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>