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 10-07-2010
Avatar de JUGUE
JUGUE JUGUE is offline
Miembro
 
Registrado: may 2003
Ubicación: Montería - Colombia
Posts: 18
Poder: 0
JUGUE Va por buen camino
Wink Reconección a BD

Hola amigos...

Tengo una aplicacion (Delphi 7) la cual funciona en varios equipos conectados por medio de una red inalámbrica a un Servidor donde está la base de datos (Firebird 2.0).
El problema es que durante el dia esta conexión se cae en ocasiones y se restablece al instante, pero la aplicación se cuelga de una y me manda este mensaje (Unable to complete network request to host "Servidor"). y me toca cerrar la aplicación a la brava y volver a ejecutarla.
No se como hacer para evitar este error, hay alguna forma de volver a conectarse dentro de la aplicacion o de estar desconectado siempre y solo hacer conexión con la Bd cuando se requiera verificando previamente si se puede establecer dicha conexión.

Su ayuda me será muy útil, trabajo con los componentes IBDatabase e IBTransaction.

De antemano muchas gracias.
__________________
Quien sabe y no lo aplica ... no sabe nada
Responder Con Cita
  #2  
Antiguo 10-07-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Me imagino que la conexion la haces en un datamodule?.
Una forma seria colocar un timer que verifique cada cierto tiempo la conexion, conectando si esta desconectada.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 11-07-2010
Gallosuarez Gallosuarez is offline
Miembro
 
Registrado: feb 2007
Posts: 92
Poder: 18
Gallosuarez Va por buen camino
Analisis...

Jugue:

En tu caso, yo empezaría de la siguiente manera. Asegúrate que la versión de tu base de datos instalada, sea la última disponible (en tu caso la última versión disponible es la 2.0.6.132266_0), esto es de suma importancia, acuerdate que los "subrelease" corrigen sobre todo errores en el motor de la base de datos. Despues asegúrate que las instalaciones físicas estén operando correctamente (cuantos equipos en forma inalámbrica accesan a tu base de datos [revisa que no se caigan las conexiones de la red inalámbrica). Por último revisa tu sistema de posibles errores (revisar si al hacer algún proceso especifico es cuando ocurre el error o si es totalmente aletorio). Tu mejor que nadie, debes de hacer este análisis.

Saludos,

Gerardo Suárez Trejo

P.D. Espero que de algo te sirvan estos "tips", y no dejes de platicarnos como te fué.
Responder Con Cita
  #4  
Antiguo 11-07-2010
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
primero que todo, una conexión a la base de datos solo de abrirse cuando se necesita y cerrarse inmediatamente después de tomar lo que buscas.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #5  
Antiguo 12-07-2010
Avatar de JUGUE
JUGUE JUGUE is offline
Miembro
 
Registrado: may 2003
Ubicación: Montería - Colombia
Posts: 18
Poder: 0
JUGUE Va por buen camino
Thumbs up Ok

mightydragonlor, estoy de acuerdo con lo que dices pero podrias hacerme un favor... Enseñame como lo hago. Te Agradeceria.
__________________
Quien sabe y no lo aplica ... no sabe nada
Responder Con Cita
  #6  
Antiguo 13-07-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Yo no creo que sea una sana opcion.
Abrir la conexion, hacer lo que se necesite y cerrarla me parece muy tosco, por decirlo de alguna manera.
Lo que si es logico es abrir y cerrar las tablas, no la conexion con la BD, son cosas diferentes.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #7  
Antiguo 13-07-2010
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
bueno, la opción correcta("a mi parecer") sería usar procedimientos almacenados y vaciar los datos en un TClientDataSet, así de ser necesario capturas los cambios y los envías uno a uno a la base de datos, también usando procedimientos almacenados, hace un buen rato no trabajo con delphi, ahora estoy mas en el lado de lazarus, pero hay un componente de "TIBConnection", este trae una propiedad "KeepConnection := False" por defecto, esto hace que una vez se deje de usar la conexión la cierra, podrias ver si los componentes que usas para conectar a la base de datos trae algo parecido.

Cita:
Abrir la conexion, hacer lo que se necesite y cerrarla me parece muy tosco, por decirlo de alguna manera.
Ahora bien, la verdad es que dejar una conexión abierta es un "GRAVE ERROR", a mi parecer esto se hace en un juego online o en clientes de mensajería por la actividad, y eso que con lo de la mensajería es cuestionable, la razón de esto es que por cada conexión que haya en la base de datos el servidor gasta valiosos recursos en algo que no necesita, para que tener 100 conexiones abiertas que no necesitas si puedes tener muchos mas usuarios en un servidor administrandolas bien?. de hecho trabajar directamente en las tablas es algo obsoleto, ya que el manejador de base de datos hace planes de ejecución para los procedimientos almacenados y eleva enormemente la velocidad y eficiencia, ademas que para eso es que tenemos nuestra base de datos, saludos.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #8  
Antiguo 13-07-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Cita:
Empezado por JUGUE Ver Mensaje
mightydragonlor, estoy de acuerdo con lo que dices pero podrias hacerme un favor... Enseñame como lo hago. Te Agradeceria.
Supongamos que tu conexión se llama Cn.

Pues cuando quieras abrir la conexión llamas a Cn.Open, entonces haces lo que debes hacer y cuando hayas terminado cierras la conexión con Cn.Close.

Ejemplo :

Cn.Open.
qryFacturarAlbaranes.ExecQuery;
Cn.Close;

Ahora bien, te vas a encontrar con varios problemas. Los componentes que utilizas necesitan la conexión abierta y la transacción abierta para tener abierto un Dataset (y poder mostrar datos en una Grid, pro ejemplo).

Así que tienes que hacer lo que dice mightydragonlor, es decir, trabajar con ClientDatasets. De forma que tu Dataset estará almacenado en un ClientDataset (en memoria local de la maquina cliente) de manera que puedes cerrar perfectamente la conexión con la base de datos, y no necesitarás volver a conectarla hasta que no quieras trasladar con un ApplyUpdates los cambios (altas, bajas, modificaciones, ...) que se hayan hecho en el ClientDataset.

Cn.Open;
ClientdatasetClientes.Open;
Cn.Close;

...
...
... Luego cuando quieras guardar cambios :

Cn.Open;
ClientdatasetClientes.ApplyUpdates(0);
Cn.Close;


NOTA: Trabajar así es laborioso, pero si tu red inalámbrica se cae tanto como dices, entonces parece que no tienes otro remedio. Busca como dice mightydragonlor, a ver si tu componente de conexión tiene un propiedad KeepConnection, Timeout, ... que cierre automáticamente la conexión si no se utiliza (aunque naturalmente, para ello debes asegurarte de no mantener Datasets abiertos, y para ello los tienes que pasar todos a ClientDatasets).
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
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


La franja horaria es GMT +2. Ahora son las 18:20:11.


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