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 Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-10-2006
ErnestoCarrera ErnestoCarrera is offline
Miembro
 
Registrado: abr 2006
Posts: 11
Poder: 0
ErnestoCarrera Va por buen camino
¿Como detectar si el servidor de bases de datos está lanzado?

Hola buenas,

Les cuento mi problema: resulta que tengo una aplicación desarrollada con Delphi6 y que necesita conectarse al arrancar con una base de datos. El servidor de base de datos es el firebird 1.5.2.4731. La susodicha aplicación se lanza al inicio de windows y hay veces (no muchas, la verdad), que al arrancar el PC me da un mensaje de error del estilo : "unavailable database".

Sospecho que es porque el programa se lanza antes de que el servicio de Firebird esté lanzado, así que me gustaría saber cómo se puede detectar si el servicio está o no lanzado para que mi programa espere por él.

He usado la opción buscar pero la verdad es que no he encontrado nada que me solucione la vida, así que si algún alma caritativa se apiada de mí y me ayuda le estaré eternamente agradecido
Responder Con Cita
  #2  
Antiguo 03-10-2006
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.271
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
Supongo que ese error te da al intentar activar la conexión con la Base de Datos (al abrir tablas o ejecutar consultas); Puedes probar a activar la conexión al principio y capturar (try..except) los errores que te de.
En ese punto deberías poder hacer varios reintentos con un breve lapso de tiempo entre medio, para "esperar" a que el servidor se arranque.


Otra cosa que puedes hacer es, al principio preguntar si el Servicio del servidor de FireBird está activo, sino es así esperar y volver a preguntar (repetir esto unas cuantas veces) antes de generar el error.
__________________
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 03-10-2006
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Yo sugiero que tu aplicación la generes como un servicio y le asignes en la propiedad Dependencies el servicio de Firebird, con eso tu programa no va a iniciar hasta que el servicio Firebird este iniciado.

Saludos.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #4  
Antiguo 03-10-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Solo añadir un poco de codigo:

Código Delphi [-]
uses WinSvc;

// Para comprobar si un servicio esta corriendo
function isRunning(Nombre: String): Boolean;
var
 ServiceControlManager: SC_HANDLE;
 Service: SC_HANDLE;
 ServiceStatus: SERVICE_STATUS;
begin
  Result:= FALSE;
  ServiceControlManager:= OpenSCManager(nil, nil, SC_MANAGER_CONNECT);
  if ServiceControlManager <> 0 then
  begin
    Service:= OpenService(ServiceControlManager,PChar(Nombre),GENERIC_READ);
    if Service <> 0 then
    begin
      if QueryServiceStatus(Service, ServiceStatus) then
        Result:= ServiceStatus.dwCurrentState = SERVICE_RUNNING;
      CloseServiceHandle(Service);
    end;
    CloseServiceHandle(ServiceControlManager);
  end;
end;


function Esperar(Nombre: String; TimeOut: Cardinal): Boolean;
var
  Ticks: Cardinal;
begin
  Result:= TRUE;
  Ticks:= GetTickCount;
  while not isRunning(Nombre) do
  begin
    Sleep(10);
    if GetTickCount - Ticks > TimeOut then
    begin
      Result:= FALSE;
      Exit;
    end;
  end;
end;

La primera función nos dice si un servicio esta iniciado, y la segunda espera hasta que el servicio se inicia o se cumple el tiempo de espera. Si el servicio no esta iniciado cuando se cumple el tiempo de espera la función devuelve FALSE. Un ejemplo de como usar lo anterior:

Código Delphi [-]
// Le damos 15 segundos de margen
if Esperar('NombreDelServicio',15000) then
begin
  // El servicio esta iniciado
end else
begin
  // Pasaron los 15 segundos y el servicio sigue inactivo
end;
Responder Con Cita
  #5  
Antiguo 04-10-2006
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.271
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
Thumbs up

¡¡Qué grande Seoane!!!

Uno pide...
Cita:
Empezado por Neftali
...Otra cosa que puedes hacer es, al principio preguntar si el Servicio del servidor de FireBird está activo, sino es así esperar y volver a preguntar (repetir esto unas cuantas veces) antes de generar el error.
Y tú contestas...
Cita:
Empezado por seoane
La primera función nos dice si un servicio esta iniciado, y la segunda espera hasta que el servicio se inicia o se cumple el tiempo de espera.
P.D: Se podría añadir como truco.
__________________
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
  #6  
Antiguo 04-10-2006
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
seoane, y en los ratos libres, ¿qué haces?

Muy bueno ese código.
Responder Con Cita
  #7  
Antiguo 04-10-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por Casimiro Notevi
seoane, y en los ratos libres, ¿qué haces?
En mis ratos libres busco trabajo e intento estudiar una oposición, pero es mas divertido estar por aquí todo el día, que pena que no me paguen por eso

Cita:
Empezado por Neftali
P.D: Se podría añadir como truco.
PD: Ahora mismo lo coloco en la seccion de trucos, aunque ya es muy similar a otro que puse sobre iniciar y detener servicios.
Responder Con Cita
  #8  
Antiguo 04-10-2006
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por seoane
En mis ratos libres busco trabajo e intento estudiar una oposición, pero es mas divertido estar por aquí todo el día, que pena que no me paguen por eso

PD: Ahora mismo lo coloco en la seccion de trucos, aunque ya es muy similar a otro que puse sobre iniciar y detener servicios.
Pensando en esa frase, ¿os habéis dado cuenta la cantidad tan enorme de trabajo, tiempo y dinero que le estamos ahorrando a muchas empresas cuyos programadores acuden a clubdelphi?

Me incluyo, también, porque más de una vez me habéis ayudado y al final, la beneficiada ha sido la empresa donde trabajo.
Responder Con Cita
  #9  
Antiguo 04-10-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por Neftalí
¡¡Qué grande Seoane!!!
Cita:
Empezado por Casimiro
seoane, y en los ratos libres, ¿qué haces?
Na... todo el mundo sabe que Seoane copia y pega el código de por ahí...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #10  
Antiguo 04-10-2006
Avatar de Bicho
[Bicho] Bicho is offline
Miembro Premium
 
Registrado: jul 2003
Ubicación: Inca - Mallorca
Posts: 1.776
Poder: 22
Bicho Va por buen camino
Cita:
Empezado por seoane
En mis ratos libres busco trabajo e intento estudiar una oposición, pero es mas divertido estar por aquí todo el día, que pena que no me paguen por eso

PD: Ahora mismo lo coloco en la seccion de trucos, aunque ya es muy similar a otro que puse sobre iniciar y detener servicios.
Por eso no te van a contratar,
Si te tienen aquí en el Club donde les solucionas sus problemas y sin pagarte un duro

Además tanto tiempo aquí no puede ser bueno, ya ves que cada vez que hay algún problema con el servidor, hay pánico y aburrimiento entre los foristas. Pero sin llegar al suicidio colectivo eh? Y tampoco estudiarás mucho tanto tiempo aquí.

Bueno, todo esto es broma, no se lo tomen a mal.

Le pediria a Seoane para que plaza está estudiando sólo por curiosidad eh?, no me voy a presentar tranquilo A coruña me pilla en la otra punta de España. De todos modos suerte

Saludos.
Responder Con Cita
  #11  
Antiguo 04-10-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por Bicho
Le pediria a Seoane para que plaza está estudiando sólo por curiosidad eh?, no me voy a presentar tranquilo A coruña me pilla en la otra punta de España. De todos modos suerte
Estudiar lo que se dice estudiar, estudio mas bien poco, así me va. Me presente por acompañar a un amigo a la de "TÉCNICO ESPECIALISTA DE INFORMÁTICA" de la Universidad de A Coruña, y aunque pase la nota de corte quede muy lejos de los puestos de cabeza y por lo tanto de conseguir el puesto (aunque si se mueren unos 20 fulanos entro fijo ). Ahora estoy con las de la universidad de Santiago, pase el primer examen pero sigo estando lejos de los primeros puestos, así que voy a tener que ponerme las pilas en el siguiente examen. Como ya dije estudiar, estudio poco .... Pero la verdad la vida de funcionario / personal laboral, es maravillosa. Yo probé un poco, estuve trabajando un año para la universidad de encargado de un aula de informática y nunca estuve tan relajado, vale que el puesto no suponía ningún reto, no me aportaba nada y me pagaban poco pero me pasaba el día sentado delante de un ordenador viendo pasar universitarias, sin nada mas que hacer, lo echo de menos
Responder Con Cita
  #12  
Antiguo 04-10-2006
ErnestoCarrera ErnestoCarrera is offline
Miembro
 
Registrado: abr 2006
Posts: 11
Poder: 0
ErnestoCarrera Va por buen camino
Joder, sois unas fieras

Muchas gracias por la atención, en especial a Seoane por ese código que tan buena pinta tiene. Lo probaré en cuanto llegue a casa, que aunque en este caso no le ahorrais dinero a una empresa, ya me habeis zafado de alguna en el curro.

Nunca me cansare de alabar lo bueno que es el foro. Seguid así.
Responder Con Cita
  #13  
Antiguo 26-04-2007
ZRR ZRR is offline
Miembro
 
Registrado: jun 2005
Posts: 39
Poder: 0
ZRR Va por buen camino
Question Alguien sabe...

como se llama el nombre del servicio que tiene Firebird?

He intentado con "fbserver" y "fbguard" pero no lo encuentra con ninguno de los dos nombres. En el administrador de tareas estan esos dos.

Saludos
Responder Con Cita
  #14  
Antiguo 26-04-2007
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
FirebirdGuardianDefaultInstance
FirebirdServerDefaultInstance
Responder Con Cita
  #15  
Antiguo 27-04-2007
ZRR ZRR is offline
Miembro
 
Registrado: jun 2005
Posts: 39
Poder: 0
ZRR Va por buen camino
Question Se puede hacer con Mutex?

Tengo una validación para que no se ejecuten dos instancias de mi aplicación y funciona correctamente. Pero al validar lo mismo pero con el guardian Firebird no lo valida e intenta correrlo de nuevo, lo que genera un mensaje de error.

Mi código es el siguiente:


Código Delphi [-]
  MiMutex:= CreateMutex(nil,true,'fbguard');
  if MiMutex=0 then
  begin
   MessageDlg('Error al verificar monitor de Base de Datos.', mtError, [mbOk], 0);
  end;
  if GetLastError<>ERROR_ALREADY_EXISTS then //no esta ejecutandose
  begin
   WinExec(Pchar(rutaFB), SW_SHOW);
  end;





Al parecer no encuentra el programa con el nombre 'fbguard', tambien intente con 'fbserver', FirebirdGuardianDefaultInstance, FirebirdServerDefaultInstance y no funciona.

Alguien conoce el nombre con el que se identifica el programa de guardian de Firebird?

Saludos
Responder Con Cita
  #16  
Antiguo 27-04-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
¿Quien se supone que crea el mutex?
Responder Con Cita
  #17  
Antiguo 27-04-2007
Avatar de xander
xander xander is offline
Miembro
 
Registrado: jul 2006
Posts: 499
Poder: 18
xander Va por buen camino
Definitivamente eres un "escapao" Seoane... peazo e' codigos te avientas...

Vaya que ni la identación te puede uno criticar
__________________
"Hey, nena, debe ser genial ser tú y verme a mí mismo..."
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
instalar servidor de bases de datos haron MS SQL Server 4 12-05-2008 23:28:54
Como Detectar cuando Windows se esta Cerrando???? AGAG4 API de Windows 3 24-05-2005 16:29:18
Como mostrar una lista de bases de datos en un servidor MySQL con Zeos? guillote Conexión con bases de datos 1 30-07-2004 02:25:42
Como puedo mostrar una lista de bases de datos en un servidor MySQL con Zeos? guillote MySQL 0 27-07-2004 03:32:20
¿Siempre hay que poner la ruta completa de la base de datos que está en el servidor? Al González Firebird e Interbase 2 12-05-2004 22:06:25


La franja horaria es GMT +2. Ahora son las 08:33:58.


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