Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

bloquear registros

Estas en el tema de bloquear registros en el foro de Mysql en Foros del Web. Hola. Estamos trabajando con JBuilder y tenemos el siguiente problema. Necesitamos bloquear registros para hacer modificaciones. Es decir quien quiere hacer una modifiacion sobre la ...
  #1 (permalink)  
Antiguo 28/03/2006, 10:27
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
Pregunta bloquear registros

Hola. Estamos trabajando con JBuilder y tenemos el siguiente problema. Necesitamos bloquear registros para hacer modificaciones. Es decir quien quiere hacer una modifiacion sobre la base de datos, debe bloquear el registro que le interese. El problema es que como usamos DataExpress y QueryDataSet's las unicas opciones son setear la forma de nivel de aislación de las transacciones. Pero parece ser que no nos funciona! esto se debe a que MySQL 4.0.18 no lo permite o es que los componentes DataExpress necesitan una configuración particular de sus propiedades y objetos dataBase, queryDataSet, queryResolver?

Gracias....
  #2 (permalink)  
Antiguo 31/03/2006, 09:23
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
Buena aunque mas no sea alguien podria darme una pista de como hacer para que esto funcione en un entrono java?
  #3 (permalink)  
Antiguo 31/03/2006, 10:49
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Podrías dar ejemplos de código de lo que estás haciendo?
La API que usas para manejar la BD no implementa algo para manejar las transacciones?
  #4 (permalink)  
Antiguo 03/04/2006, 07:25
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
Lo que queremos hacer es simple. Pero no hemos encontrado la API Java para MySql.
Queremos. iniciar una transacción, acometer la transacción, y hacer rollback de la transacción.
Los metodos disponibles en nuestro j-conector son commit() y rollback(). La gran duda es como iniciar la transacción. Aunque se puede dar cierto nivel de aislación a las transacciones esto no nos esta ayudando. Usamos MySql 5 y tablas InnoDB.
  #5 (permalink)  
Antiguo 03/04/2006, 08:12
Avatar de deadlykyo  
Fecha de Ingreso: noviembre-2005
Ubicación: Cbba - Bolivia
Mensajes: 747
Antigüedad: 18 años, 5 meses
Puntos: 5
Holas, no conozco mucho sobre DataExpress y el uso de transacciones, pero segun lei el api de DataExpress, lo que tienes que hacer es al crear un DataStore tienes que asignarle un TxManager, que llegaria ha ser tu administrador de transacciones, esa instacia de TxManager que crees tiene la opcion de activar o desactivar el uso de transacciones y algunas otras cosas mas que puedes ver en la descripcion de los metodos, y con ayuda del DataStoreConnection defines que tipos de permisos va a tener la conexion si va a ser solo lectura, escritura, commit, rollback, pero eso depende de que tu DataStore tenga un TxManager, aqui te dejo un fragmento de lo que lei en el api de dataExpress:
Cita:
Creating the DataStore file

There are two ways to create a DataStore file, depending on how you are using the DataStore with a StorageDataSet - either as persistent off-line storage or as an embedded database through the DataExpress API. Either way, the name of the DataStore file is controlled by the DataStore object's fileName property, and starts out with the same general steps:

1. Instantiate the DataStore.
2. Set the fileName for the DataStore file.
3. Set any other properties that must be set at create-time, like the blockSize, if desired.
4. To make the DataStore transactional:
1. Instantiate a TxManager
2. Set its properties if desired
3. Assign it to the DataStore's txManager property
4. Assign a name to the DataStore's userName property

When using the DataStore with a StorageDataSet, you continue with these two steps:

1. Assign the DataStore to the StorageDataSet's store property.
2. Assign a name to the StorageDataSet's storeName property. This name will identify the StorageDataSet's data inside the DataStore.

This will create the DataStore when necessary. The alternative is to create the DataStore manually, which is more likely when using the JDBC driver to access the DataStore. There is only one additional step:

1. Call the DataStore's create method.

Because the DataStore is a subclass of DataStoreConnection, the create method (if successful) results in an open connection to the newly-created DataStore through the DataStore object. You can then use methods in the datastore package (the DataStore API) and a local JDBC driver simultaneously to access the contents of the DataStore.
ahh tambien te dejo la direccion de la pagina del api:
API DataExpress

cya
__________________
"El Conocimiento es de todos, no solo de algunos"
  #6 (permalink)  
Antiguo 03/04/2006, 08:31
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
Ok! El tema es que DataStore se debe pagar. Nosotros estamos usando MySql5 y el acceso a datos lo hacemos usando las facilidades que da DataExpress, esto nos permite usar campos que se ligan a campos de una base de datos por el medio del seteo de dos propiedades de dicho campo. Bien el tema es que lo que necesitamos saber es como hace mysql para bloquear por medio de una consulta los registros que nos interesan.
y como es posible saber usando siempre el conector provisto por mysql para java que un registro esta bloqueado cuando quiero entrar en modo edición?

Gracias
  #7 (permalink)  
Antiguo 03/04/2006, 08:50
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
En mysql puedes iniciar, deshacer, o finalizar una transaccion haciendo un query simple hacia la bd, asi:

begin
rollback
commit
  #8 (permalink)  
Antiguo 03/04/2006, 09:05
Avatar de deadlykyo  
Fecha de Ingreso: noviembre-2005
Ubicación: Cbba - Bolivia
Mensajes: 747
Antigüedad: 18 años, 5 meses
Puntos: 5
Como bloquea mysql las tablas, primero que tus tablas deben ser de tipo InnoDB o BDB, segundo debes ver que el usuario con el que te conectas tenga permisos sobre LOCK TABLES y START TRANSACTION, aqui hay un pequeno ejemplo de la pagina de mysql:
Código PHP:
//
START TRANSACTION;
LOCK TABLES trans READcustomer WRITE;
SELECT SUM(valueFROM trans WHERE customer_id=some_id;
UPDATE customer
  SET total_value
=sum_from_previous_statement
  WHERE customer_id
=some_id;
UNLOCK TABLES
ahora para empezar una transaccion solo pones START TRANSACTION (o BEGIN WORK para versiones antiguas de mysql) al Principio y cuando se termina pones COMMIT o ROLLBACK, ahora tambien existen sentencias en MySQL que hacen commit implicito como el UNLOCK TABLES, todo eso esta mejor explicado en la documentacion de mysql, solo te doy un vistazo general, espero que te ayude, cya
__________________
"El Conocimiento es de todos, no solo de algunos"

Última edición por deadlykyo; 03/04/2006 a las 09:11
  #9 (permalink)  
Antiguo 03/04/2006, 09:21
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
Ok! muchas gracias.
  #10 (permalink)  
Antiguo 03/04/2006, 09:43
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
Suponte en java que quiero hacer una actualizacion, esto esta bien?

PreparedStatement sp = new conexion.PreparedStatement("SELECT * FROM clientes WHERE id_cliente=10 FOR UPDATE");
sp.execute;

//y el registro permanece bloqueado hasta que haga...

conexion.executeUpdate("COMMIT")
  #11 (permalink)  
Antiguo 03/04/2006, 09:50
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
Ok! muchas gracias, lei tu mensaje despues de enviarte el ejemplo. ahora si.

saludos pyanqn
  #12 (permalink)  
Antiguo 03/04/2006, 09:58
Avatar de deadlykyo  
Fecha de Ingreso: noviembre-2005
Ubicación: Cbba - Bolivia
Mensajes: 747
Antigüedad: 18 años, 5 meses
Puntos: 5
Ok, no problem, suerte
cya
__________________
"El Conocimiento es de todos, no solo de algunos"
  #13 (permalink)  
Antiguo 03/04/2006, 10:33
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
ahora como detecto que hay un bloqueo?
Ya que mi aplicaciòn se queda esperando y no me permite continuar?
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:48.