FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Forma correcta de manejar la concurrencia en SQL
Posts: 203
Joined: Tue Oct 11, 2005 02:17 PM
Forma correcta de manejar la concurrencia en SQL
Posted: Wed Nov 04, 2020 05:33 PM
Un saludo a todos

La question es que me planteo si lo que estoy haciendo es correcto o tendré problemas futuros,

Estoy haciendo pruebas en SQL y tengo programado el proceso de concurrencia como sigue:

1 Muestro en un browse una serie de tareas para realizar
Code (fw): Select all Collapse
SELECT ......

Un usuario selecciona una tarea para consultar.
Code (fw): Select all Collapse
SELECT ... FOR id=xxx

El usuario intenta seleccionar la tarea para realizar (actualizacion). En este momento necesito asegurarme que otro usuario no intente "actualización" modificar esta misma tarea.
Code (fw): Select all Collapse
 START TRANSACTION...
  SELECT .... FOR Id=xxx FOR UPDATE
  Vuelvo a presentar los datos (por si se modificaron desde otro terminal)

5 El usuario finaliza la actualización de la tarea, ya sea grabando, cancelando o por timeout
Code (fw): Select all Collapse
COMMIT


Bien, el proceso se ejecuta correctamente y si otro usario intenta acceder al mismo registro se produce un error que puedo controlar.

¿Es esta la forma correcta de realizarlo o debería plantearme otras alternativas (tablas de bloqueos,...) ?

Un saludo y gracias por vuestra atención
Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: Forma correcta de manejar la concurrencia en SQL
Posted: Wed Nov 04, 2020 07:23 PM
SQL es un estándar y luego hay extensiones que introducen cada gestor de bases de datos. Por lo tanto deberías decir en que gestor vas a trabajar.
Básicamente existen dos tipos de bloqueos en las bases de datos SQL el bloqueo optimista y el pesimista. Deberías consultar a Google o mira esto https://unpocodejava.com/2011/01/10/tecnicas-de-bloqueo-sobre-base-de-datos-bloqueo-pesimista-y-bloqueo-optimista/
Por otro lado realmente en el tema de los UPDATE y DELETE no se producen errores como tales si no exepciones que tu desde tu programa podrás controlar y actuar como desees el comportamiento. Para ello se suele usar las sentencias:
try
// Sentencia de actualizacion o delete
catch
// Control del numero de exepcion y accion a ejecutar
end

Luego también tendrás que usar alguna librería que te permita acceder e interactuar con la base de datos como por ejemplo HDO que puede funcionar con:
- SQLite/SQLCipher
- MySQL/MariaDB
- SQLServer
- ODBC ( Oracle, Postgres, Access, y cualquier otro gestor que tenga un driver ODBC )

Espero haber resuelto alguna duda. :-)
______________________________________________________________________________

Sevilla - Andalucía
Posts: 203
Joined: Tue Oct 11, 2005 02:17 PM
Re: Forma correcta de manejar la concurrencia en SQL
Posted: Wed Nov 04, 2020 08:36 PM

Gracias por responder
Las pruebas las estoy realizando con Tdolphin y MariaDb

Continue the discussion