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 25-08-2007
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Question Consultar conexión del Servidor

Hola...

Quiero agregar una sentencia a mi programa (pero aún no se como hacerlo)...

de partida informo que es con Interbase.... y que la base de dato esta remota y tambien local

Lo que necesito hacer es que cuando se inicie el programa consulte si la base de datos esta ok.. de lo contrario (si no se puede conectar), me diga que no se pudo conectar (y que no se caiga el sistema) y mande a un form de configuración de base de dato (que lo tengo listo), para examinar la base y poder conectarla...

Mi otra duda es, cuando tomo el nombre de la base de datos.. me aparece en él la ruta completa.. (ruta_servidor+directorio+base)...

como obtengo si la conexión es remota.. o local ???

bueno..eso seria por el momento
__________________
BlueSteel
Responder Con Cita
  #2  
Antiguo 25-08-2007
Hugo Hugo is offline
Miembro
 
Registrado: may 2003
Ubicación: Córdoba (España)
Posts: 38
Poder: 0
Hugo Va por buen camino
Para conectar una base de datos local usa:
'C:\Datos\Basededatos.gdb'
Para conectar en un servidor:
'Servidor:C:\Datos\Basededatos.gdb'

Para comprobar que la base de datos está en su sitio sin que el programa de errores, debes asegurarte de comprobar su existencia antes de abrirla, por ejemplo en el evento BeforeOpen de la base de datos.

Espero que te sirva de ayuda.
Saludos.
Responder Con Cita
  #3  
Antiguo 25-08-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Hola BlueSteel


Código Delphi [-]
With IbDataBase1 DO
    Begin
        Close;
        DataBaseName := PATH_DATABASE;
        Params.Values['user_name'] := USER_PARAM;
        Params.Values['password'] := PASSWORD_PARAM;
        Open;
        Aviso('CONEXION SATISFACTORIA');
    End;

El procedimiento sería algo parecido a lo anterior.
Antes de conectar, puedes tomar esos datos bien suministrador por el usuario o guardados en un INI.

Evidentemente si la conexión falla se poducirá una exception que tú deberías controlar tomando los pasos adecuados, por ejemplo, que el usuario introduzca nuevamente los datos o aquella que consideres mas adecuada.

En cuanto a la conexión remota, yo habitualmente utilizo la IP del servidor mas la ruta de la Base de datos.

198.119.0.1:c:\programa\xxxxx
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #4  
Antiguo 28-08-2007
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Bueno... retomando este tema para configurar el lugar de la base de datos, me decidí a realizar la creación de archivos .ini y allí almacenar la configuración, para eso realice los sgtes procesos


1. al Iniciar el Sistema (Menu), ejecuto en el evento onCreate el sgte código
Código Delphi [-]
procedure TMenu.FormCreate(Sender: TObject);
Var
   Parametro:Tinifile;
begin
   If not DirectoryExists('D:\Sistemas\Propint') Then
      Begin
          {$I-}
           MkDir('D:\Sistemas\Propint');
      End;
     if FileExists('D:\Sistemas\Propint\config.ini') Then
        Begin
             Parametro := TiniFile.Create('D:\Sistemas\Propint\config.ini');
             Datos.IBD_Compras.Connected := False;
             Datos.IBD_Compras.DatabaseName                := Parametro.ReadString('BaseDato','Servidor',' ');
             Datos.IBD_Compras.Params.Values ['user_name'] := Parametro.ReadString('BaseDato','Usuario',' ');
             Datos.IBD_Compras.Params.Values ['password']  := Parametro.ReadString('BaseDato','Clave',' ');
             Datos.IBD_Compras.Connected := True;
             Parametro.Free;
        End
     Else
        Begin
             ShowMessage('Debe Seleccionar Base de Datos para continuar');
             Man_Datos := TMan_Datos.Create(Self);
             Try
                Man_Datos.ShowModal;
             Finally
                Man_Datos.Free;
             End;
        End;
End;

2.- Si no existe el archivo config.ini, llama al formulario Man_Datos, en en cual, en el evento onActive, ejecuto lo sgte

Código Delphi [-]
procedure TMan_Datos.FormActivate(Sender: TObject);
Var
   Parametro:Tinifile;
Begin
     if FileExists('D:\Sistemas\Propint\config.ini') Then
        Begin
             Parametro := TiniFile.Create('D:\Sistemas\Propint_1\config.ini');
             vBas.Text := Parametro.ReadString('BaseDato','Servidor',' ');
             vUsu.Text := Parametro.ReadString('BaseDato','Usuario',' ');
             vPas.Text := Parametro.ReadString('BaseDato','Clave',' ');
             Parametro.Free;
        End
     Else
        ShowMessage('Debe Seleccionar Base de Datos para continuar');
end;
Si no existe el archivo, se deberá ingresar los datos que pide el Formulario para conectar a la base de datos.

los datos a pedir son
vBas.Text -> Ubicación del Servidor + nombre de la base
vUsu.Text -> Usuario
vPas.Text -> clave de usuario

una vez ingresado los datos, los almaceno en un archivo .ini, y conecto a la base de datos de la sgte forma
Código Delphi [-]
procedure TMan_Datos.SpeedButton1Click(Sender: TObject);
var
   Nombre_Base : String;
   Parametro:Tinifile;
begin
     if sLocal.Checked = True Then
        Nombre_Base := vBas.Text
     else
        Nombre_Base := Concat('\\',vSer.Text,'\',vBas.Text);
     Datos.IBD_Compras.Connected := False;
     Datos.IBD_Compras.LoginPrompt := False;
     Datos.IBD_Compras.DatabaseName := Nombre_Base;
     Datos.IBD_Compras.Params.Values ['user_name'] := vUsu.Text;
     Datos.IBD_Compras.Params.Values ['password'] := vPas.Text;

     Parametro := TiniFile.Create('D:\Sistemas\Propint\config.ini');
     Parametro.WriteString('BaseDato','Servidor',Datos.IBD_Compras.DatabaseName);
     Parametro.WriteString('BaseDato','Usuario',Datos.IBD_Compras.Params.Values ['user_name']);
     Parametro.WriteString('BaseDato','Clave',Datos.IBD_Compras.Params.Values ['password']);
     Parametro.Free;
     Datos.IBD_Compras.Connected := True;
end;

bueno, y hasta el momento me funciona bien,,, dentro de la semana lo probaré en donde tengo k instalar el sistema...

solo me queda por agregar que:

Datos -> Formulario de tipo DataModule
IBD_Compras -> DataBase
Man_Datos -> Formulario conexión a base de dato
__________________
BlueSteel

Última edición por BlueSteel fecha: 28-08-2007 a las 21:49:32.
Responder Con Cita
  #5  
Antiguo 28-08-2007
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
revisando este tema... lo único que me falta es realizar un Test de conexión.. y si falla que no almacene nada

alguien sabe como realizarlo??
__________________
BlueSteel
Responder Con Cita
  #6  
Antiguo 28-08-2007
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Prueba con algo como:

Código Delphi [-]
function CanConnect(Database: TIBDatabase): Boolean;
begin
  try
    Database.Connect;
    Result := True;
    Database.Disconnect
  except
    Result := False
  end
end;

No especificas que componentes usas para conectarte, así que puse el ejemplo con los IBX...



Saludos...
Responder Con Cita
  #7  
Antiguo 28-08-2007
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Cita:
Empezado por maeyanes Ver Mensaje
Prueba con algo como:
Código Delphi [-]
function CanConnect(Database: TIBDatabase): Boolean;
begin
try
Database.Connect;
Result := True;
Database.Disconnect
except
Result := False
end
end;
No especificas que componentes usas para conectarte, así que puse el ejemplo con los IBX...


Saludos...
Sorry.. los estoy realizando con los IBX...
tube los sgtes problemas...

peres Database.Connected
perro el Disconnect no funca...

ahora, igual encontre la sgte fucción...

Database.TestConnected

y la realizo de la sgte forma... claro que con mas código...
Código Delphi [-]
     If Datos.IBD_Compras.TestConnected = True Then ShowMessage('Funciona Ok');


maeyanes, igual gracias.. me alumbrastes la ampolleta...
__________________
BlueSteel
Responder Con Cita
  #8  
Antiguo 28-08-2007
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola!

Disculpa, no recordaba que las IBX no tienen los métodos Connect y Disconnect, si no la propiedad Connected.

Y bueno, la forma que usas en realidad es menos código...

Código Delphi [-]
if Datos.IBD_Compras.TestConnected then
  // Guardas los datos

P.D. Por cierto, para comparar los valores de verdad de una variable, método o propiedad Boolean, no es necesario compararlo con el valor, si quieres saber si es verdadero basta con hacerlo como te puse en el ejemplo, para saber si es falso, solo tienes que hacer:

Código Delphi [-]
if not Datos.IBD_Compras.TestConnected then
  ShowMessage('Error conectando a la base de datos');



Saludos...
Responder Con Cita
  #9  
Antiguo 28-08-2007
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
gracias por el concejo....

bueno, ahora tengo la sgte duda...para realizar el test de conección,, deberá estar conectada la base.. por lo pronto lo tengo así..

Código Delphi [-]
     Datos.IBD_Compras.Connected := False;
     Datos.IBD_Compras.LoginPrompt := False;
     Datos.IBD_Compras.DatabaseName := Nombre_Base;
     Datos.IBD_Compras.Params.Values ['user_name'] := vUsu.Text;
     Datos.IBD_Compras.Params.Values ['password'] := vPas.Text;
     Datos.IBD_Compras.Connected := True;
     
     If Datos.IBD_Compras.TestConnected Then
        Begin
             Parametro := TiniFile.Create('D:\Sistemas\Propint\config.ini');
             Parametro.WriteString('BaseDato','Servidor',Datos.IBD_Compras.DatabaseName);
             Parametro.WriteString('BaseDato','Usuario',Datos.IBD_Compras.Params.Values ['user_name']);
             Parametro.WriteString('BaseDato','Clave',Datos.IBD_Compras.Params.Values ['password']);
             Parametro.Free;
        End
     Else
        ShowMessage('Error de conexión, ingrese ruta nuevamente');

ya que me da el sgte error

I/O error for file "ruta..del...archivo"
Error while trying to open file
unknown Win32 error 2


y si pongo
Código Delphi [-]
 Datos.IBD_Compras.Connected := True;
, despues de la consulta del test.. siempre me indica que existe un error de conexión...

mmmm..seguire intentando
__________________
BlueSteel
Responder Con Cita
  #10  
Antiguo 28-08-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Hola BlueSteel.

Vuelvo a insistir. Tal como te lo planteé en el primer mensaje, es muy adecuado para hacer el test. Si salta la exception, ya sabes que falló.

En cuanto al error que se te produce, comprueba la ruta de la BD y que esta no tenga los atributos de solo lectura. (por ejemplo si la copiaste desde un CD).

Saludos
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #11  
Antiguo 28-08-2007
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
mmm... entonces TestConnected no prueba si se puede conectar o no a la base de datos, solo checa si la base de datos ya está conectada... en dado caso prueba así:

Código Delphi [-]
try
  Datos.IBD_Compras.Connected := True;
  // Guardar los datos de conexión en el .ini...
except
  ShowMessage('Ocurrió un error al intentar conectar con la base de datos')
end

El uso que se le podría dar a TestConnected sería:

Código Delphi [-]
// Verificamos que la aplicación esté conectada a la base de datos
if not Database.TestConnected then
  Database.Connected := True;
// Realizo las tareas necesarias



Saludos...
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
Conexion con el Servidor keys Conexión con bases de datos 2 14-02-2007 18:19:54
Conexión a un servidor FTP con SSL activado adebonis Internet 2 02-12-2005 07:21:07
Conexión con Servidor FTP por IdFtp Ivr Internet 3 13-09-2005 17:46:37
Conexion Cliente/Servidor Aser Firebird e Interbase 1 20-04-2005 22:42:28
Consultar tamaño de archivo en servidor jpep Internet 0 09-08-2003 14:20:04


La franja horaria es GMT +2. Ahora son las 20:08:27.


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