| |||
Problema cuando varios usuarios modifican el mismo registro en base de datos Como puedo hacer para modificar registros en un entorno multiusuario por que si dos usuarios modifican el mismo registro atravez de su primary key se genera un error, que se debe hacer en este caso, acudo a su experiencia |
| ||||
Respuesta: Problema cuando varios usuarios modifican el mismo registro en base de dat Mensaje trasladado a un nuevo tema desde: http://www.forosdelweb.com/f69/aplic...suario-688203/ Saludos.
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |
| ||||
Respuesta: Problema cuando varios usuarios modifican el mismo registro en base de dat Cita: Depende el motor que uses...Pero el tema esta en el "acerrojo" que estas usando para crear el insert... Los tipos de cerradura que tenes son: adLockBatchOptimistic adLockOptimistic adLockPessimistic adLockReadOnly En tu caso usa "adLockOptimistic" para que al momento de utilizar la tabla nadie mas la use, es decir que simultaneamente no van a poder otras conexiones utilizarle ni para lectura ni para escritura hasta que termine de procesar, una vez que termino de procesar ahi libera para la siguiente peticion a esa tabla. Te quedaria algo asi:
Código vb:
Ver original |
| |||
Respuesta: Problema cuando varios usuarios modifican el mismo registro en base de dat Hola, segun tu propuesta seria el mismo tipo cerrojo para actualizar los registros pero en mi caso utilizo rs.AddNew y rs.Update, ademas de cargar los registros en un grid asi: Set rs = New Recordset rs.Open "SELECT campo1,campo2 FROM tabla", cn, adOpenStatic, adLockPessimistic Set Grid1.DataSource = rs Que puedo hacer?, o me recomiendas mudar mi codigo de la forma como lo propones, gracias por la ayuda. Última edición por xDriver; 23/10/2009 a las 21:24 |
| |||
Respuesta: Problema cuando varios usuarios modifican el mismo registro en base de dat Estoy utilizando mysql5. Si utilizo el .addnew y .update me genera un error, pero si aplico las consultas sql directamente mediante el .open el problema no ocurre, asi que tendre que hacerlo de la forma correcta y olvidarme del addnew. |
| |||
Respuesta: Problema cuando varios usuarios modifican el mismo registro en base de dat Otra consulta, como controlar cuando ingreso registros en una tabla pedido cuyos campos pueden ser N_pedido, idProducto, otros_Campos. Si la tabla pedido esta relacionada a la tabla Producto y antes de grabar los registros un usuario en otro punto elimina el idProducto que esta a segundos de ser grabado en la tabla pedido, me daria un error como se hace en esta situiacion? |
| ||||
Respuesta: Problema cuando varios usuarios modifican el mismo registro en base de dat Cita: Eso seria un error de consistencia, mysql con varios tipos de tablas, es decir con formatos diferentes...
Iniciado por xDriver ![]() Otra consulta, como controlar cuando ingreso registros en una tabla pedido cuyos campos pueden ser N_pedido, idProducto, otros_Campos. Si la tabla pedido esta relacionada a la tabla Producto y antes de grabar los registros un usuario en otro punto elimina el idProducto que esta a segundos de ser grabado en la tabla pedido, me daria un error como se hace en esta situiacion? El tipo por default es la MYISAM despues tiene otro tipo llamado INNODB esta ultima es un poco mas lenta que la primera (pero solo cuando hay millones de registros y haces una filtrado exaustivo), en fin la ventaja que tiene INNODB es que podes crear llaves foreanas "FOREIGN KEY" y mantener una integridad referencial entonces de esa manera mientras que existan registros en "PEDIDOS" que llevan hacia algun "PRODUCTO" mysql no va a dejar que exista una modificacion y te devuelve un error... Osea con eso evitas que te borren un registro y se genere un error, en cambio con MYISAM la consistencia de errores tenes que programarla vos directamente en tu aplicacion. Quiero recalcar que una cosa es "PROGRAMAR" y otra cosa es "DISEÑO Y MODELADO DE BASE DE DATOS"... Osea, por que sepas poner un par de codigos en vb que lo buscaste por internet, no significa que vas a dominar el area de base de datos, en especial el lenguaje ANSI SQL... Para hacer bien las cosas hay que estudiar, en la universidad se aprende la base de cada cosa y despues tenes que ampliar tus conocimientos, pero si no conoces un motor no te metas a programar para ese motor por que tiene miles de cosas que no vas a conocer y el resultado final no va a ser muy optimo que digamos |
| |||
Respuesta: Problema cuando varios usuarios modifican el mismo registro en base de dat Hola, bueno de hecho si estudie en la uni y dudo mucho que alguien que no sepa sobre pk, fk integridad referencial pueda llegar a crear un sistema medianamente eficiente, ademas aprendi sql con sqlserver2000 y me parece que ahi no existe esto sobre MyISAM e INNODB sino que viene por defecto el INNODB por decirlo de alguna manera, por otro lado mi gran error fue no averiguar mas sobre mysql. Volviendo a la pregunta asumiento que mi bd esta en INNODB(Para evitar este incoveniete por ahora estoy probando con sqlserver2000 donde si estan presenten las FK) me salta este error al ingresar un pedido cuando el articulo fue borrado seguntos antes por otro usuario del sistema
Código:
Logicamente no me va agregar el pedido debido al error de integridad referencial, como debo tratar el error desde vb6.0, ya que el idProduto todavia no esta grabado en la tabla pedido y es posible borrarlo desde otro punto. Error '-2147467259(80004005)' en tiempo de ejecucion No se puede agregar o cambiar el registro porque se necesita un registro relaciona en la tabla 'Producto' |
| ||||
Respuesta: Problema cuando varios usuarios modifican el mismo registro en base de dat
Código vb:
Ver original Te lo puse asi por que por lo general si mal no recuerdo siempre devuelve el mismo numero de error... Entonces mejor que busque por la descripcion del error. |
| |||
Respuesta: Problema cuando varios usuarios modifican el mismo registro en base de dat Si tienes razon p.e cuando la pk se repite tambien devuelve el mismo numero de error. Entonces sugieres que controle la situacion capturando el error, he visto un par de sistemas en vb6.0 me parece que utilizan DAO y el control data y lo que hacen es impedir que el IdArticulo sea borrado aunque todavia no exista en la tabla pedido, no se como podria hacerlo de esa manera por que si intento capturar los errores tendria que capturar todos los posibles errores. Por ultimo lo hare como mencionas, aunque que pasaria si llevo mi proyecto a una pc con vb6 ingles, tu sabes mas asi que seguire tu metodo. saludos |
| ||||
Respuesta: Problema cuando varios usuarios modifican el mismo registro en base de dat Cita: Mira... Yo te diria que uses las cerraduras para que no se puedan modificar nada cuando tenes que hacer inserciones criticas... Y a la vez antes de hacer la insercion podes usar un select para verificar que exista el idarticulo...
Iniciado por xDriver ![]() Si tienes razon p.e cuando la pk se repite tambien devuelve el mismo numero de error. Entonces sugieres que controle la situacion capturando el error, he visto un par de sistemas en vb6.0 me parece que utilizan DAO y el control data y lo que hacen es impedir que el IdArticulo sea borrado aunque todavia no exista en la tabla pedido, no se como podria hacerlo de esa manera por que si intento capturar los errores tendria que capturar todos los posibles errores. Por ultimo lo hare como mencionas, aunque que pasaria si llevo mi proyecto a una pc con vb6 ingles, tu sabes mas asi que seguire tu metodo. saludos Osea, yo lo plantearia asi mira... Crea un procedimiento almacenado que tenga un select para verificar si existe el idarticulo, si existe mandale el insert que tenes que mandar... Vos desde vb llamas al procedimiento almacenado y verificas la respuesta del mismo (pero al llamarlo fijate que la cerradura sea para que nadie mas pueda acceder) con eso estas mas que seguro que no va a pasar ningun error, por que si no existe el idarticulo te va a devolver false |
| |||
Respuesta: Problema cuando varios usuarios modifican el mismo registro en base de dat Realizar un select antes del insert me parece lo mejor y con sp mejor aun. En anteriores respuestas mencionaste la inconsistencia y leyendo un poco encontre el ACID Compliant y me falta un golpe para poder aplicarlo. Como podria aplicar la atomicidad desde vb. Ejemplo de wikipedia: si intento hacer 2 consultas, restar 10 a B y añadir 10 a A, si ambas consultas se ejecutan esta ok, pero si una de ellas falla entonces biene el problema, por logica la solucion seria intentar ejecutar el sql que falta ó deshacer lo que se hizo. Que hago en esta situacion, como podria capturar el error, digamos q en caso de un corte de energia solo realiza la 1era consulta y en una relacion maestro detalle un fallo asi causaria inconsistencia en la db, que se debe hacer? Como saber si las 2 consultas o si solo 1 se realizo con exito y si se da el caso volver a intentar o deshacer dichas operaciones. |
| |||
Respuesta: Problema cuando varios usuarios modifican el mismo registro en base de dat Encontre que debo utilizar BEGIN TRAN y COMMIT TRAN para ejecutar varias consultas en una sola transaccion y cuando alguna consulta no se ejecute utilizar ROLLBACK TRANSACTION, parece que con eso se soluciona, saludos Última edición por xDriver; 02/11/2009 a las 16:38 |