Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Consultar conexión del Servidor (https://www.clubdelphi.com/foros/showthread.php?t=47356)

BlueSteel 25-08-2007 03:11:24

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:p

Hugo 25-08-2007 12:07:00

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.

ArdiIIa 25-08-2007 13:04:22

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

BlueSteel 28-08-2007 21:46:42

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...:p

solo me queda por agregar que:

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

BlueSteel 28-08-2007 22:06:42

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??

maeyanes 28-08-2007 22:11:18

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...

BlueSteel 28-08-2007 22:20:40

Cita:

Empezado por maeyanes (Mensaje 226629)
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...:D
Código Delphi [-]
     If Datos.IBD_Compras.TestConnected = True Then ShowMessage('Funciona Ok');


maeyanes, igual gracias.. me alumbrastes la ampolleta...

maeyanes 28-08-2007 22:26:15

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...

BlueSteel 28-08-2007 22:44:30

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:p:confused:..seguire intentando

ArdiIIa 28-08-2007 22:51:26

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

maeyanes 28-08-2007 22:52:17

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...


La franja horaria es GMT +2. Ahora son las 02:36:01.

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