Bloqueo de registros usando TWebDataSource
Publicado: Sab May 24, 2014 10:22 pm
Saludos a todos y cada uno.
La conexion en ambos modos funciona perfectamente bien.
Con TWebDataSource ya esta el archivo php en el hosting (servidor web)
Estoy intentando trabajar con conexion a mysql usando TWebDataSource a un
hosting, y me he encontrado con el detalle que no puedo hacer que un cierto
registro sea bloqueado por un usuario.
Sin embargo si uso TMariaDBDataSource, los bloqueos funcionan perfectamente
bien.
Pongo un ejemplo de como lo hago con TMariaDBDataSource.
METHOD VALIDA_CODIGO()
Local cCodigo_producto,cantidad_total
::cProductos:oDatasource=AppData:Base
cantidad_total=1
AppData:Base:Execute("SET AUTOCOMMIT=0")
AppData:base:BeginTrans()
::cProductos:cSelect="Select id,codigo,descripcion,existencia_actual from
productos where codigo='"+cCodigo_producto+"' FOR UPDATE " /// AQUI HAGO
LA CONSULTA PARA OBTENER LAS EXISTENCIAS ACTUALES DEL PRODUCTO, AL HACER
ESTO NO DEJA QUE OTRO USUARIO
CONSULTE O EDITE LA TABLA PRODUCTOS
::cProductos:lOpen=.t.
/// AQUI EDITO LA TABLA PRODUCTOS Y ACTUALIZO LAS EXISTENCIAS ACTUALES DEL
PRODUCTO
::cProductos:EDit()
::cProductos:Salidas=::cProductos:Salidas+cantidad_total
::cProductos:existencia_actual=::cProductos:existencia_actua l-cantidad_total
::cProductos:Update()
/// AQUI CIERRO LA TRANSACCION Y SE DESBLOQUEA EL REGISTRO
AppData:Base:CommitTrans()
AppData:Base:Execute("SET AUTOCOMMIT=1")
RETURN Nil
ESTE PROCEDIMIENTO FUNCIONA MUY BIEN, ME BLOQUEA LOS REGISTROS SIN NINGUN
PROBLEMA
PONGO UN EJEMPLO DE COMO LO ESTOY USANDO CON TWebDataSource
METHOD VALIDA_CODIGO()
Local cCodigo_producto,cantidad_total
::cProductos:oDatasource=AppData:Base
cantidad_total=1
AppData:Base:Execute("SET AUTOCOMMIT=0")
AppData:base:Execute("Begin")
::cProductos:cSelect="Select id,codigo,descripcion,existencia_actual from
productos where codigo='"+cCodigo_producto+"' FOR UPDATE " /// AQUI HAGO
LA CONSULTA PARA OBTENER LAS EXISTENCIAS ACTUALES DEL PRODUCTO, AL HACER
ESTO NO DEJA QUE OTRO USUARIO
CONSULTE O EDITE LA TABLA PRODUCTOS
::cProductos:lOpen=.t.
/// AQUI EDITO LA TABLA PRODUCTOS Y ACTUALIZO LAS EXISTENCIAS ACTUALES DEL
PRODUCTO
::cProductos:EDit()
::cProductos:Salidas=::cProductos:Salidas+cantidad_total
::cProductos:existencia_actual=::cProductos:existencia_actua l-cantidad_total
::cProductos:Update()
/// AQUI CIERRO LA TRANSACCION Y SE DESBLOQUEA EL REGISTRO
AppData:Base:Execute("Commit")
AppData:Base:Execute("SET AUTOCOMMIT=1")
RETURN Nil
CON TWEBDATASOURCE NO FUNCIONA EL BLOQUEO
Por toda ayuda que me proporcionen, gracias.
La conexion en ambos modos funciona perfectamente bien.
Con TWebDataSource ya esta el archivo php en el hosting (servidor web)
Estoy intentando trabajar con conexion a mysql usando TWebDataSource a un
hosting, y me he encontrado con el detalle que no puedo hacer que un cierto
registro sea bloqueado por un usuario.
Sin embargo si uso TMariaDBDataSource, los bloqueos funcionan perfectamente
bien.
Pongo un ejemplo de como lo hago con TMariaDBDataSource.
METHOD VALIDA_CODIGO()
Local cCodigo_producto,cantidad_total
::cProductos:oDatasource=AppData:Base
cantidad_total=1
AppData:Base:Execute("SET AUTOCOMMIT=0")
AppData:base:BeginTrans()
::cProductos:cSelect="Select id,codigo,descripcion,existencia_actual from
productos where codigo='"+cCodigo_producto+"' FOR UPDATE " /// AQUI HAGO
LA CONSULTA PARA OBTENER LAS EXISTENCIAS ACTUALES DEL PRODUCTO, AL HACER
ESTO NO DEJA QUE OTRO USUARIO
CONSULTE O EDITE LA TABLA PRODUCTOS
::cProductos:lOpen=.t.
/// AQUI EDITO LA TABLA PRODUCTOS Y ACTUALIZO LAS EXISTENCIAS ACTUALES DEL
PRODUCTO
::cProductos:EDit()
::cProductos:Salidas=::cProductos:Salidas+cantidad_total
::cProductos:existencia_actual=::cProductos:existencia_actua l-cantidad_total
::cProductos:Update()
/// AQUI CIERRO LA TRANSACCION Y SE DESBLOQUEA EL REGISTRO
AppData:Base:CommitTrans()
AppData:Base:Execute("SET AUTOCOMMIT=1")
RETURN Nil
ESTE PROCEDIMIENTO FUNCIONA MUY BIEN, ME BLOQUEA LOS REGISTROS SIN NINGUN
PROBLEMA
PONGO UN EJEMPLO DE COMO LO ESTOY USANDO CON TWebDataSource
METHOD VALIDA_CODIGO()
Local cCodigo_producto,cantidad_total
::cProductos:oDatasource=AppData:Base
cantidad_total=1
AppData:Base:Execute("SET AUTOCOMMIT=0")
AppData:base:Execute("Begin")
::cProductos:cSelect="Select id,codigo,descripcion,existencia_actual from
productos where codigo='"+cCodigo_producto+"' FOR UPDATE " /// AQUI HAGO
LA CONSULTA PARA OBTENER LAS EXISTENCIAS ACTUALES DEL PRODUCTO, AL HACER
ESTO NO DEJA QUE OTRO USUARIO
CONSULTE O EDITE LA TABLA PRODUCTOS
::cProductos:lOpen=.t.
/// AQUI EDITO LA TABLA PRODUCTOS Y ACTUALIZO LAS EXISTENCIAS ACTUALES DEL
PRODUCTO
::cProductos:EDit()
::cProductos:Salidas=::cProductos:Salidas+cantidad_total
::cProductos:existencia_actual=::cProductos:existencia_actua l-cantidad_total
::cProductos:Update()
/// AQUI CIERRO LA TRANSACCION Y SE DESBLOQUEA EL REGISTRO
AppData:Base:Execute("Commit")
AppData:Base:Execute("SET AUTOCOMMIT=1")
RETURN Nil
CON TWEBDATASOURCE NO FUNCIONA EL BLOQUEO
Por toda ayuda que me proporcionen, gracias.