Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-11-2009
zoide zoide is offline
Registrado
 
Registrado: nov 2009
Posts: 9
Poder: 0
zoide Va por buen camino
Exclamation Problema con transacciones, sqlite y componentes ZEOS

Bueno resulta que estoy desarrollando un programa estilo punto de venta codificado en delphi 2007, uso DB sqlite3 y componentes zeos para la conexion, en la parte de registrar las ventas utilizo transacciones con un zquery, todo perfecto, el problema radica en que tengo un boton para que a mitad de venta puedan consultar la lista de productos con codigos, precios y cantidades de los mismos, pero resulta que si estoy a mitad de la venta y ya di de baja algunos productos (conectada con zquerys y extrayendo datos con selects) no me actualiza los datos, al parecer la transacción me bloquea los datos o mas bien bloquea la DB (incluso se genera un temporal de la DB cuando inicio la trancaccion, son geniales las transacciones :P) y no puedo ver actualizadas las cantidades sino hasta que termino la transaccón, pero lo mas extraño del asunto es que en mitad de venta uso una ztable para verificar la cantidad en almacen y no vender productos que no tengo, y ahi sii me manda los datos actualizados, si se vende un producto lo descuenta, he intentado bastantes cosas para refrescar estos datos en la consulta de productos cuando se bloquea por la transacción, pero al parecer nada funciona, no se que hacer, la verdad es muy importante esto para mi porque es mi trabajo para graduarme de la universidad, ojala puedan ayudarme, saludos y gracias.
Responder Con Cita
  #2  
Antiguo 13-11-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
La idea es que si estás en mitad de una transacción, y desde fuera consultas datos de tablas relacionados con la transacción puedes obtener cosas no coherentes; Dependiendo del Isolation Level que estés utilizando obtendrás fantasmas, lecturas sucias o incluso llegarás a bloqueos (como te está pasando).

Prueba a lanzar las consultas utilizando la misma transacción que tienes abierta.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 13-11-2009
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Cita:
Empezado por zoide Ver Mensaje
Bueno resulta que estoy desarrollando un programa estilo punto de venta codificado en delphi 2007, uso DB sqlite3 y componentes zeos para la conexion, en la parte de registrar las ventas utilizo transacciones con un zquery, todo perfecto, el problema radica en que tengo un boton para que a mitad de venta puedan consultar la lista de productos con codigos, precios y cantidades de los mismos, pero resulta que si estoy a mitad de la venta y ya di de baja algunos productos (conectada con zquerys y extrayendo datos con selects) no me actualiza los datos, al parecer la transacción me bloquea los datos o mas bien bloquea la DB (incluso se genera un temporal de la DB cuando inicio la trancaccion, son geniales las transacciones :P) y no puedo ver actualizadas las cantidades sino hasta que termino la transaccón, pero lo mas extraño del asunto es que en mitad de venta uso una ztable para verificar la cantidad en almacen y no vender productos que no tengo, y ahi sii me manda los datos actualizados, si se vende un producto lo descuenta, he intentado bastantes cosas para refrescar estos datos en la consulta de productos cuando se bloquea por la transacción, pero al parecer nada funciona, no se que hacer, la verdad es muy importante esto para mi porque es mi trabajo para graduarme de la universidad, ojala puedan ayudarme, saludos y gracias.
Te aconsejo leer y entender el concepto de lo que es ACID. y Bloqueos
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 13-11-2009 a las 17:59:24.
Responder Con Cita
  #4  
Antiguo 13-11-2009
zoide zoide is offline
Registrado
 
Registrado: nov 2009
Posts: 9
Poder: 0
zoide Va por buen camino
Cita:
Empezado por Neftali Ver Mensaje
La idea es que si estás en mitad de una transacción, y desde fuera consultas datos de tablas relacionados con la transacción puedes obtener cosas no coherentes; Dependiendo del Isolation Level que estés utilizando obtendrás fantasmas, lecturas sucias o incluso llegarás a bloqueos (como te está pasando).

Prueba a lanzar las consultas utilizando la misma transacción que tienes abierta.
Pues es que precisamente aun estoy dentro de la transacción cuando utilizo el zquery con un select para mostrar los datos en el dbgrid y ahí es cuando me salen datos no actualizados, no es que consulte la tabla de fuera.
Responder Con Cita
  #5  
Antiguo 13-11-2009
zoide zoide is offline
Registrado
 
Registrado: nov 2009
Posts: 9
Poder: 0
zoide Va por buen camino
Cita:
Empezado por rgstuamigo Ver Mensaje
Te aconsejo leer y entender el concepto de lo que es ACID. y Bloqueos
Saludos...
Gracias por el interés, claro que comprendo lo que es acid y la exclusion mutua para evitar la concurrencia, solo que me parece extraño que usando componentes ztable accedo a los datos en mitad de una transacción y los maneja actualizados y en cambio con un zquery no ¿?.
Incluso he utilizado un programa externo para el manejo de la DB y con sentencias sql hago transacciones, inserto, elimno y consulto datos y si los maneja actualizados (osea que no es problema de sqlite), seria mas bien "problema con el zquery" por llamarlo de alguna manera.
Responder Con Cita
  #6  
Antiguo 13-11-2009
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Cita:
Empezado por zoide Ver Mensaje
Gracias por el interés, claro que comprendo lo que es acid y la exclusion mutua para evitar la concurrencia, solo que me parece extraño que usando componentes ztable accedo a los datos en mitad de una transacción y los maneja actualizados y en cambio con un zquery no ¿?.
Incluso he utilizado un programa externo para el manejo de la DB y con sentencias sql hago transacciones, inserto, elimno y consulto datos y si los maneja actualizados (osea que no es problema de sqlite), seria mas bien "problema con el zquery" por llamarlo de alguna manera.
De acceder creo que vas a poder, pero como te dice Neftali, no vas a obtener datos coherente por lo cual no es ideal hacerlo hasta que la transaccion sea commiteada(Commit) o cancelada(Roolback).
De todas formas tendrias que informarte como trabaja SQLite en en ese sentido.
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #7  
Antiguo 13-11-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por zoide Ver Mensaje
Pues es que precisamente aun estoy dentro de la transacción cuando utilizo el zquery con un select para mostrar los datos en el dbgrid y ahí es cuando me salen datos no actualizados, no es que consulte la tabla de fuera.
¿Y seguro que esa consulta se hace utilizando esa misma transacción?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #8  
Antiguo 13-11-2009
zoide zoide is offline
Registrado
 
Registrado: nov 2009
Posts: 9
Poder: 0
zoide Va por buen camino
Cita:
Empezado por Neftali Ver Mensaje
¿Y seguro que esa consulta se hace utilizando esa misma transacción?
Pues comienzo en un zquery la transacción, me puedo estar paseando por todo el programa y la transacción continua y hasta que no doy un rollback o un commit se guardan o cancelan cambios, por eso estoy seguro que aun esta dentro de la transacción y si no estuviera en la transaccion, se supone que ya estuviera commiteada o con un rollback y entonces con mayor razón me debería mostrar datos actualizados.
Responder Con Cita
  #9  
Antiguo 13-11-2009
zoide zoide is offline
Registrado
 
Registrado: nov 2009
Posts: 9
Poder: 0
zoide Va por buen camino
Bueno aunque estube pensando, no hago el select con el mismo query que inicio la transacción, osea aun continuo en la transacción pero uso un query diferente, no se si eso tenga algo que ver ¿?, yo me supongo que no, pero puede que me equivoque.
Responder Con Cita
  #10  
Antiguo 13-11-2009
zoide zoide is offline
Registrado
 
Registrado: nov 2009
Posts: 9
Poder: 0
zoide Va por buen camino
Parece que por fin encontré la solución a mi problema, resulta que no se porque diantres coloqué zconections por cada forma que tengo, eso quiere decir que tengo una por punto de venta y otra por busqueda de productos y al realizar la transacción en una zconnection esta bloquea la DB y en la segunda zconnection solo muestra informacion anterior a la transaccion, pero si uso la misma coneccion en la busqueda me muestra datos actuales durante la transaccion .

Gracias a las personas que intentaron ayudarme, aunque no nos entendieramos del todo :P y sobre todo por darme la idea de que tal vez los querys diferentes tenian algo que ver con el bloqueo, eso me llevo a las zconnections diferentes. Saludos.
Responder Con Cita
  #11  
Antiguo 16-11-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por zoide Ver Mensaje
...pero uso un query diferente, no se si eso tenga algo que ver ¿?, yo me supongo que no, pero puede que me equivoque.
Tiene que ver si está por una conexión diferente.

Cita:
Empezado por zoide Ver Mensaje
...eso me llevo a las zconnections diferentes.
Pues a eso es a donde quería llegar.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema... Delphi2009, Zeos y SQLite lookmydoom Varios 4 09-04-2009 00:01:19
Transacción maestro-detalle con Zeos y SQLite peccatum Conexión con bases de datos 3 04-04-2009 06:30:10
transacciones y ZEOS david_uh Varios 0 26-05-2007 20:44:03
Crear DB SQlite con Zeos userlazarus Conexión con bases de datos 3 03-09-2006 10:08:01
SQLite con Zeos Controls bitbow Tablas planas 1 11-08-2006 18:58:39


La franja horaria es GMT +2. Ahora son las 12:17:23.


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
Copyright 1996-2007 Club Delphi