 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Touchsoftwares Master


Registrado: 16 Dic 2002Mensajes: 869Ubicación: MEXICO Playa del Carmen
|
Publicado: Dom 07 Nov, 2004 12:35 am Asunto: Concurrencia? |
|
|
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 |
|
 |
americo_bcb Lt

Registrado: 05 May 2004Mensajes: 84
|
Publicado: Dom 07 Nov, 2004 6:01 pm Asunto: |
|
|
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 |
|
 |
Touchsoftwares Master


Registrado: 16 Dic 2002Mensajes: 869Ubicación: MEXICO Playa del Carmen
|
Publicado: Dom 07 Nov, 2004 8:00 pm Asunto: |
|
|
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 |
|
 |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Dom 07 Nov, 2004 9:15 pm Asunto: |
|
|
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 |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|