[Lazarus-es] [***SPAM*** Score/Req: 5.4/5.0] AYUDA, una pregunta sobre TSQLTransaction

Ismael L. Donis Garcia slibre en citricos.co.cu
Lun Mayo 18 16:34:19 CEST 2015


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.

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.

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.

Saludos
========
| ISMAEL |
========
Only for the small landowners and Cubans companies
Website: www.sisconge.byethost15.com
              www.sisconge.hol.es
  ----- Original Message ----- 
  From: SOCGER .- 
  To: lazarus-es en lists.lazarus.freepascal.org 
  Sent: Monday, May 18, 2015 5:34 AM
  Subject: [***SPAM*** Score/Req: 5.4/5.0] [Lazarus-es] AYUDA, una pregunta sobre TSQLTransaction


  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_procedure
  var var_SQLTransaction : TSQLTransaction;
         var_SQLConnector   : TSQLConnector;
         var_SQLQuery       : TSQLQuery;
  begin
  end;


  sobre var_SQLQuery hago diferentes trabajos


  primero una SELECT
  si la select me devuelve que no existe algo creo con un INSERT ese algo inexistente


  si se llego a hacer este primer INSERT
  actualizó con varios UPDATE varias tablas por ejemplo una tabla de STOCK


  y si se realizan todos los UPDATE considero que es el momento de actualizar
  var_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






------------------------------------------------------------------------------


  _______________________________________________
  Lazarus-es mailing list
  Lazarus-es en lists.lazarus.freepascal.org
  http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20150518/34e8406f/attachment-0002.html>


More information about the Lazarus-es mailing list