Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-01-2011
ElGatitoTapatio ElGatitoTapatio is offline
Miembro
 
Registrado: nov 2006
Posts: 38
Poder: 0
ElGatitoTapatio Va por buen camino
Unhappy Ayuda con Firebird, Transacciones, Zeos y Delphi

Mis estimados miembros de este excelente foro despues de leer y leer posts acerca de firebird buscando solucion a mis problemas, me he atrevido a pedirles de su ayuda.

LA verdad es que soy un super novato en Firebird y su utilizacion con Delphi, eso me doy cuenta al leer todo lo que hay en este importante foro, por lo tanto les expongo mis broncas.

Tengo un sistema desarrollado en delphi el cual se utiliza como cliente servidor, uno de los problemas es que cuando hago cambios en un cliente (inserts, updates, deletes) estos cambios no se ven reflejados en algun otro cliente hasta que se cierran y se abren las aplicaciones, esto despues de lo que he leido al parecer es por como estoy utilizando las transacciones o tal vez por la falta de utilizacion de las mismas.

Otra bronca es que al agregar muchos registros despues de un numero determinado el sistema se hace muy lento hasta el punto de bloquearse y se tiene que cerrar la aplicacion, esto tambien parece ser por la bronca de las transacciones, al parecer no las estoy cerrando por lo que he leido, pero por eso quiero confirmarlo con ustedes.

Les comento que utilizo Firebird 2.1.3, DElphi 7 y componentes ZEOS, que estos ultimos son tambien algo por lo que me hace pedir ayuda, ya que al parecer esto es mucho mas sencillo con los componentes IB. Pero pues como tendria que cambiar todo el sistema o por lo menos los componentes pues prefiero preguntar antes para, si se puede ahorrar trabajo.

Les anexo basicamente el codigo que estoy utilizando para los procesos que implican un cambio en la base de datos, tambien les comento que me doy cuenta que en la propiedad de TZConnection.TransactIsolationLEvel tenia tiNone, asi que creo que debo de comenzar por cambiarla por tiReadCommitted, creo yo.

Este es el codigo:


Código Delphi [-]
           with dm_databases.ZConnection_LAXP do
            Try
              frm_main.GuardaCursor;
              ExecuteDirect('Delete from HISTORICO_TRANSACCIONES '+
                            'where FOLIO = '+ed_folio.Text);
              for i := 1 to grid_pesadas.RowCount do
                ExecuteDirect('Insert into HISTORICO_TRANSACCIONES(FOLIO,ID_TIPO,TOT_EJES,NO_EJE,ID_CAMION,ID_CHOFER,'+
                              'ID_EMPRESA,ID_PRODUCTO,PESO_INICIAL,PESO_CIERRE,FECHA_INICIAL,FECHA_CIERRE,'+
                              'STATUS,PLACA) Values('+ed_folio.Text+','+IntToStr(TipoBascula)+','+IntToStr(ed_ejes.Value)+
                              ','+grid_pesadas.Cells[0,i-1]+','+LIdCamiones[cb_camion.itemindex]+','+LIdChoferes[cb_chofer.itemindex]+
                              ','+LIdEmpresas[cb_empresa.itemindex]+','+LIdProductos[cb_producto.itemindex]+','+
                              grid_pesadas.Cells[1,i-1]+','+grid_pesadas.Cells[2,i-1]+','''+ed_fecha_inicial.text+' '+
                              ed_time_inicial.text+''','''+ed_fecha_cierre.text+' '+ed_time_cierre.text+''','+IntToStr(status)+
                              ','''+ed_placa_camion.text+''')');
              frm_main.RestauraCursor;
              HistorialTransacciones;
              NuevaTransaccion;
              MessageBox(0, 'Se ha guardado la transacción correctamente.', 'Transacción almacenada', MB_ICONINFORMATION or MB_OK or MB_TASKMODAL);
            except
                frm_main.RestauraCursor;
                MessageBox(0, 'Ocurrió algún error al guardar la transacción.', 'Error', MB_ICONERROR or MB_OK or MB_TASKMODAL);
            end

Debo de aclarar que cuando menciono transaccion en el codigo no me refiero a transacciones de bases de datos, sino al proceso que se realiza, ya que asi se le llama en el sistema en cuestion.

La verdad es que me da pena poner el codigo porque se que soy novatazo pero no me queda de otra.

De antemano les agradezco enormemente la ayuda que me puedan dar .

Saludos!!

Última edición por Casimiro Notevi fecha: 27-01-2011 a las 13:14:46. Razón: Arreglar las etiquetas
Responder Con Cita
  #2  
Antiguo 27-01-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Zeos es perfectamente válido, no veo necesario el que lo cambies, salvo que necesitaras más velocidad.
Mira este hilo, es un pequeño tutorial de Caral, en él crea un sistema básico con firebird y también indica los parámetros para el componente de transacciones.
Básicamente pones un componente Basedato y otro Transaction, cuando haces alguna grabación, o sea '.post' (al insertar, borrar y editar) debes confirmar la transacción, normalmente en el evento AfterPost del Dataset, algo así como: dataset.transaction.commit (o commitreaining).
Algunos componentes tienen una propiedad para que lo haga automáticamente, el commit, algo así como: autocommit=yes/no y se encargaría él de hacer el commit tras cualquier post.
Échale un vistazo al hilo que te he indicado y aquí estamos por si tienes alguna duda más.
Responder Con Cita
  #3  
Antiguo 27-01-2011
ElGatitoTapatio ElGatitoTapatio is offline
Miembro
 
Registrado: nov 2006
Posts: 38
Poder: 0
ElGatitoTapatio Va por buen camino
Gracias por tu pronta respuesta Casimiro.

Fijate que si lei el tutorial de Caral antes de preguntar, es por esto que les comento que talvez lo mejor seria cambiar a componentes IB ya que en ese tutorial se encuentra muy bien explicado su uso. Lamentablemente yo tengo los componentes Zeos en el sistema y no he encontrado un tutorial igual para estos.

Deja reviso los parametros que me comentas y hago algunas pruebas con Zeos para ver si lo puedo solucionar y los mantengo al tanto.

Gracias.
Responder Con Cita
  #4  
Antiguo 28-01-2011
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Estimado ElGatitoTapatio

Tenía un problema similar al tuyo cuando me inicie con Firebird, com odice nuestro compañero Casimiro, yo lo solucione con la propiedad autocommit=true.

Intenta ver este parametros u otro del componente database y despues nos cuentas.

Saludos -.
__________________
No todo es como parece ser...
Responder Con Cita
  #5  
Antiguo 28-01-2011
ElGatitoTapatio ElGatitoTapatio is offline
Miembro
 
Registrado: nov 2006
Posts: 38
Poder: 0
ElGatitoTapatio Va por buen camino
Mis estimados!!

Al parecer, salvo lo que diga el cliente, ya solucione el problema como lo sospeche desde un principio creo que el problema fue la propiedad TZConnection.TransactIsolationLEvel donde tenia tiNone, la cambie por tiReadCommitted y parece ser que ya se actualizan al momento los datos. Ahora solo falta verificar lo de la lentitud del sistema al pasar mucho tiempo trabajando con el mismo. La verdad es que creo que esto tambien se va a solucionar, ya que creo que las transacciones se quedaban abiertas y llegaba un momento en que se saturaba la base de datos, esto salvo los mejores comentarios que me puedan dar ustedes.

Pero bueno, esperemos a que lo pruebe el cliente y veremos que resulta.

De nuevo les agradesco su ayuda.

Saludos y los mantendré informados.

Última edición por ElGatitoTapatio fecha: 28-01-2011 a las 16:29:27.
Responder Con Cita
Respuesta



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
Firebird + Zeos + Delphi ¡¡ayuda!!... Jheysson13 Conexión con bases de datos 19 17-12-2008 12:52:31
Comitar transacciones con DBExpress, Delphi 6 y Firebird cesar_picazo Conexión con bases de datos 1 26-05-2006 22:39:51
Problemas con las Transacciones en Firebird 1.5 y Delphi 2005 Jesús Pena Firebird e Interbase 3 08-04-2006 21:10:15
Transacciones FireBird con Zeos vichovi Conexión con bases de datos 3 13-07-2005 08:49:29
Como Realizar transacciones con Zeos o en Delphi Dayvis MySQL 1 22-10-2004 03:00:47


La franja horaria es GMT +2. Ahora son las 21:42:50.


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