Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Concurrencia?

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Concurrencia? Responder citando

El manejador de base de daotos, sql server, interbse o mysql, se encargan de evitar la concurrencia, o nosotros cuidamos ese factor?

Por ejemplo:

Terminal A ingresa una compra

Terminal B ingresa una salida

Por azares del destino le dan "guardar" al mismo tiempo.

Los calculos de inventarios son correctos o en algun renglon son incorrectos por cuestiones de operacion: Existencia=Existencia+Entrada en una consulta y Existencia=Existencia-Salida en otra consulta de actualizacion.

anterirmente le hubiera puesto un lock a la tabla hast qeu termine con ella,pero en SGBD como implemento eso?


Me explique?
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Holas Segun tengo entendido los administradores de bases de datos SQL (SQL Server, Interbase, mySql , Oracle entre otros) se encargan de hacer que cada operacion que realicemos con los datos sea una transaccion de esta manera se puede evitar los bloqueos que teniamos que hacer cuando trabajamos con administradores de bases de datos orientados a datos (paradox, fox, btrieve entre otros), el ejemplo que indicas es bien explicado en la cara oculta del C++ builder del maestro Ian Marteens en la pagina 396 con el titulo "El gran experimento" agrego la primera parte de ese tema tan interesante

Ian Marteens escribió:
El Gran Experimento
Hasta el momento hemos asumido que solamente nuestra aplicación tiene acceso, desde un solo puesto, a los datos con los que trabaja. Aún sin trabajar con bases de datos SQL en entornos cliente/servidor, esta suposición es irreal, pues casi cualquier escenario de trabajo actual cuenta con varios ordenadores conectados en una red puesto a puesto; a una aplicación para los formatos de datos más sencillos, como Paradox y dBase, se le exigirá que permita el acceso concurrente a éstos. ¿Qué sucede cuando varias aplicaciones intentan modificar simultáneamente el
mismo registro? En vez de especular sobre la respuesta, lo más sensato es realizar un sencillo experimento que nos aclare el desarrollo de los acontecimientos. Aunque el experimento ideal debería involucrar al menos dos ordenadores, podremos arreglárnosla ejecutando dos veces la misma aplicación en la misma máquina. Lo más importante que descubriremos es que sucederán cosas diferentes cuando utilicemos bases de datos de escritorio y servidores SQL. La aplicación en sí será muy sencilla:
una tabla, una fuente de datos (TDataSource), una rejilla de datos (TDBGrid) y una barra de navegación (TDBNavigator), esta última para facilitarnos las operaciones sobre la tabla.
.
.
.
El Gran Experimento: tablas SQL
Repetiremos ahora el experimento, pero cambiando el formato de la tabla sobre la cual trabajamos. Esta vez conecte con una tabla de InterBase, da lo mismo una que otra. Ejecute nuevamente la aplicación dos veces y siga estos pasos:
· En la primera aplicación, modifique el primer registro de la tabla, pero no confirme la grabación, dejando la tabla en modo de inserción.
· En la segunda aplicación, ponga la tabla en modo de edición y modifique el primer registro de la tabla. Esta vez no debe ocurrir error alguno. Grabe los cambios en el disco.
· Regrese a la primera aplicación e intente grabar los cambios efectuados en esta ventana.
En este momento, sí que tenemos un problema. La excepción se presenta con el siguiente mensaje: “No se pudo realizar la edición, porque otro usuario cambió el registro”. Hay que cancelar los cambios realizados, y entonces se releen los datos de la tabla, pues los valores introducidos por la segunda aplicación aparecen en la primera.


Si continuas con la lectura explicara acerca de la control de edición tipo pesimista y tipo optimista.
Américo
C++builder lo mejor de lo mejor
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Gracias por el tip (lo voy a volver a leer) ,

No mantengo en Modo de edicion explicito; en el momento de guardar hago:
Código:

for(int i=1;i<gridRenglones->RowCount;i++)             
               if(gridRenglones->Cells[2][i]!="")           
                       Consulta(qry,"INSERT INTO compras_detalle "
                       " (folio_compra,importe,idinsumo,cantidad,costo,idunidad_principal"
                       ",idunidad_equivalente,almacen,cantidad_unidad_principal,costo_unidad_principal) "
                       " VALUES ("+IntToStr(iFolioCompra)+","+
                       gridRenglones->Cells[7][i]+","+ // Importe
                       "'"+gridRenglones->Cells[4][i]+"',"+ // Codigo
                       gridRenglones->Cells[2][i]+","+ // Cantidad entrada
                       gridRenglones->Cells[6][i]+","+ // Costo entrada
                       "'"+gridRenglones->Cells[9][i]+"',"+ // idunidad_principal
                       "'"+gridRenglones->Cells[3][i]+"',"+ // idunidad_entrada
                       IntToStr(cboAlmacenCompras->ItemIndex)+","+
                       gridRenglones->Cells[8][i]+","+// cantidad_unidad_principal
                       gridRenglones->Cells[10][i]+// Costo unidad principal
                       ")",qryUpdate);


Como indique, el uso de controles enlazados , implicaba que tena que asentar un TTable o un TQuery modificable, com tengo renglones de otras tablas (ya sabes, nombre de producto, unidad de medida, factor) quedaba igual o peor de complicado (y mas y mas TTables)

Todas las validaciones las hago a travez de codigo, mis busquedas son Query tipo con "LIKE"

Decidi haces algunos dias programar al estilo arriba mostrado en modulos criticos ( entradas, salidas, facturacion etc) y manetener controles enlazados a datos en modulos de mantenimiento. ¿ Que opinas?
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Generalmente se puede usar transacciones implicitas o transacciones explicitas, por supuesto, eso también depende del tipo de componentes de conectividad se usen con la BD, los cuales también ofrece gestión a este respecto.

Además tenemos varios niveles de aislamiento, Interbase & Firebird, proporcionan tres niveles de aislamiento, en los manuales hay un capitulo completo dedicado a las transacciones, además Firebird 1.x proporciona una sistema para bloquear el acceso a un registro, aunque se desaconseja su uso, salvo en casos contados.

Ciao.
_________________
OJO!! Ya tenemos subforo de Bases de Datos!!
Gracias a los admins.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.