Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Como usar el IBTransaction (https://www.clubdelphi.com/foros/showthread.php?t=57868)

sierraja 30-06-2008 21:38:06

Como usar el IBTransaction
 
EL escenario es el siguiente: Tengo mi base de datos en FireBird 1.5 y mi aplicacion esta hecha en delphi 7. Mi base de datos esta ubicada en un servidor linux ubuntu, es decir, y la aplicacion deberia estar configurada para que trabaje de modo cliente servidor. He realizado pruebas desde una estacion de trabajo windows xp hacia el server y funciona perfectamente. Pero cuando ejecuto mi aplicacion desde otra estacion de trabajo en windows xp, es decir, dos estaciones con la misma configuracion ejecutando la misma aplicacion, entonces me genera un error que mas o menos dice dead locked update. He leido en varios articulos que se deberia configurar el ibtransacion de modo read_commited o snapshot. El caso es que no quiero que aparezca el error mencioando, y quiero que se trabaje con la misma base de datos al mismo tiempo y desde cualquier estacion de trabajo, es decir, varios usuarios a la vez. Quisera saber si se tiene que abrir y cerrar las tablas antes de trabajar con ellas o abrir y cerrar la base de datos antes de trabajar con ella, es decir en el momento que se necesite se abre. Esa es la gran duda. Gracias por su valiosa atencion.....

lbuelvas 02-07-2008 01:40:13

Hola foro.

Bueno el IBTransaction en mis aplicaciones lo tengo en la forma que se muestre mas abajo, tengo varios usuarios simultaneos sin ningun problema.

Active False
AllowAutoStart True
AutoStopActon saNone
DefaultAction TACommit
IdleTimer 0
Name IBTransaction1
Params read_committed
rec_version
nowait
Tag 0


Al darle boton derecho al objeto y seleccionar Transaction Editor selecciona la opcion Read Commited.

El error "dead locked" o "abrazo mortal" significa que dos usuarios estan tratando simultaneamente de modificar un registro y se queda cada uno esperando infinitamente a que el otro suelte el recurso.

Comentanos que objetos estas utilizando para acceder a las tablas, en lo perosnal prefiero los TIBDataset, casi nunca utilizo los TIBTable.

sierraja 02-07-2008 03:52:39

ok, de alguna manera gracias especiales por tratar este tema. En mi aplicacion utilizo los componentes TIBDataSet y un DataSource (este para poder asociarlo a una agrilla). El error se genera en el momento que ejecuto un store procedure que contiene lo siguiente:


Código SQL [-]
delete from temporal_cuadre;
insert into temporal_cuadre (fecha_pago_factura, numero_factura_impresa, 
codigo_suscriptor, fecha, rif, nombre, alicuota_iva, 
monto_iva, cloaca, consumo_agua, monto_facturado,
forma_pago, numero_cheque, nombre_banco, 
tipo_tarjeta_credito, nombre_banco_tarjeta, tipo_factura)
select f.fecha_pago_factura, f.numero_factura_impresa, f.codigo_suscriptor, 
f.fecha, s.id as rif, s.nombre_fiscal as nombre, f.alicuota_iva, f.monto_iva, 
f.cloaca, f.consumo_agua, f.monto_facturado, f.forma_pago, f.numero_cheque, 
f.nombre_banco, f.tipo_tarjeta_credito, f.nombre_banco_tarjeta, f.tipo_factura
from facturacion f
left join direccion_operacional d on d.codigo_do=f.codigo_suscriptor
left join suscriptores s on s.id=d.id_suscriptor
where (f.status_factura='Facturado') and (f.fecha_pago_factura=:x_fecha_pago_factura);


Realmente no se porque se genera dicho error.

sierraja 02-07-2008 03:55:18

Otra cosa la configuracion del componente TIBDataSet tambien esta igual que la configuracion que se muestra en el post anterior.

lbuelvas 06-07-2008 08:51:58

Puedes describir el error un poco mejor, mejor si nos indicas el mensaje que te envia el motor de bases de datos.


La franja horaria es GMT +2. Ahora son las 06:21:43.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi