|
Hola darkbits,
Ya ha pasado una semana y creo que aún no has solucionado tu problema. Quiero redondear algunas comentarios y sugerencia que ya te han hecho otros foristas y quizás has pasado por alto:
En Firebird todo ocurre siempre dentro de una transacción, aún cuando parezca que tu código no haya iniciado esa transacción. En tu código, cuando vendes un MOUSE y actualizas las cantidades, el registro que se actualiza en la tabla INALMACEN queda "retenido o bloqueado", ningún otro cliente (estación de trabajo) podrá modificar ese registro a menos que lo comprometas. Ahora, si el registro no es comprometido, los demás clientes podrán leer el registro pero en su versión original, no la versión modificada; es por esto que cuando realizas una venta, el PC que hizo la venta muestra en STOCK 9, mientras el resto de PC muestra 10 (la versión original del registro).
Solución: Hay que finalizar la transacción. Al finalizar la transacción el registro o registros insertado/actualizado/borrado queda "visible" (o invisible si fue borrado) para los demás clientes. Para finalizar la transacción debes ejecutar el método commit o commitretaining sobre la transacción, tal cual lo indicó "Casimiro Notevi": _DM.consulta2.Transaction.commitretaining.
En tu caso aconsejo que hagas uso de commitretaining, pues supongo que solo tienes un componente de transacción y cuando es así al ejecutar el método commit no solo se compromete la transacción sino que también se finaliza la conexión a la base de datos, en cambio commitretaining deja la base de datos, la transacción y los dataset abiertos para seguir trabajando sobre ellos.
|