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 Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-06-2015
to_to to_to is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 39
Poder: 0
to_to Va por buen camino
Question Error conexión remota con aliases.conf

Hola foro, tengo un problema al conectarme desde dbexpress delphi 7, utilizo el aliases.conf con la ruta específica de la base. Si la conexión es local se conecta bien, pero si la ruta es de una base remota no abre la base, al abrir la base intenta abrir el nombre del alias de la base en la ruta donde está mi aplicación de desarrollo. Si pongo la ruta completa (tal y como está en el aliases.conf) con la IP directamente en la propiedad DataBase del componente (TSQLConection) en lugar del alias de la base si se conecta correctamente.

Estoy utilizando Firebird 2.1, DbExpress y Delphi 7 y utilizo una vpn con hamachi para acceder remotamente a la base. Tengo Windows 7 de 64bits.

Ya intenté con estas asignaciones en mi aliases.conf y me envía el mismo error.

BaseR = SERVIDOR/3050:C:\MIBASE\BASE.MDB
BaseR = "SERVIDOR/3050:C:\MIBASE\BASE.MDB"
BaseR = x.x.x.x./3050:C:\MIBASE\BASE.MDB

Sin embargo, como lo dije anteriormente si pongo directamente la dirección de la base en el componente dbexpress donde va el parámetro de Base se conecta sin problema, pero si pongo el nombre del alias de la base (BaseR) me envía error al abrir la base. Me envía mensaje de error de I/O Error for file “C:\MI_APLICACION\BaseR” Error while trying to open file.
El sistema no puede encontrar el archivo especificado.

Se que poniendo directamente la ruta de conexión en el componente funcionaría pero quedaría fijo y para cualquier cambio tendría que re-compilar aplicación.

Agradezco algún comentario...
Responder Con Cita
  #2  
Antiguo 16-06-2015
to_to to_to is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 39
Poder: 0
to_to Va por buen camino
Unhappy No toma los parámetros del aliases.conf

Estuve depurando y lo que noté es que el componente no está tomando los datos de las propiedades del archivo aliases.conf, lo que tuve que hacer es meter en el dbxconection.ini la ruta de la base para que tomara correctamente la ruta y nombre del archivo de base de datos. ¿Será un bug del componente o algo me faltará para que la tome correctamente el parámetro de DataBase del TSQLConection?
Responder Con Cita
  #3  
Antiguo 16-06-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 28.957
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Como comprenderás, tú eres nuestros ojos y nuestras manos, no vemos nada de tu código ni tampoco podemos decirte si falta algo o está mal, no tenemos acceso a tu ordenador.
Deberías dar explicaciones mucho más detalladas de cómo tienes montado el sistema, código, parámetros, componentes, enlaces, etc.
De todas formas, te recomiendo lo más simple, echa un vistazo a cualquier ejemplo que encuentres por los foros, tutorial, etc. y síguelo, así podrás comprobar qué está mal en tu proyecto.
Responder Con Cita
  #4  
Antiguo 16-06-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.181
Poder: 31
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola to_to.

Coincido con Casimiro, la información que nos das es un poco escasa. De todos modos te hago una una pregunta que tal vez resulte obvia, pero ¿ Desde donde intentas la conexión ?.

Pregunto, por que el alias debe existir solamente del lado del servidor e incluir la ruta completa a la base de datos: ServerName:Drive:\Path\DatabaseFile.
Código:
# Definición del alias (nombre del servidor: SERVER)
ALIAS = C:\PROGRAMA\DATOS\DATABASE.FDB
Y del lado del cliente, como cadena de conexión, sólo tenes que utilizar \\ServerName\Alias:
Código:
\\SERVER\ALIAS
si estas intentándo la conexión del lado del cliente y de ese modo, olvida mi pregunta.

Nota: Lo anterior aplica para S.O. Windows.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 16-06-2015
to_to to_to is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 39
Poder: 0
to_to Va por buen camino
Antes que nada gracias por tomarse el tiempo... tienen razón.., lo que pasa que se enfrasca uno en el problema y de momento no pensé en poner más detalles.., mira la conexión la estoy haciendo desde el cliente. En el servidor solo está la base montada. Van los detalles y lo que además estoy revisando.

Base de datos FireBird 2.1., aplicación desde Delphi 7 con DBExpress. Mi forma de conectarme es a través del archivo aliases.conf, en el escribo la cadena de conexión como lo comenté utilizando un alias para la ruta física de mi base de datos.


Al momento que me quiero conectar en el código solo abro y cierro la propiedad LoadParamsonConnect, para que actualice los parámetros de la conexión que viene en el archivo dbxconection.ini donde le especifico en el parámetro Database su alias correspondiente ("DataBase = Alias") y donde el "Alias" está definido en el archivos aliases.conf y que supongo lo convertirá a la dirección que tiene asignada.

Archivo dbxconnections.ini

Código:
[MiBase]
DriverName=Interbase
Database = BaseR
RoleName=RoleName
User_Name=sysdba
Password=masterkey
ServerCharSet=
SQLDialect=1
ErrorResourceFile=
LocaleCode=0000
BlobSize=-1
CommitRetain=False
WaitOnLocks=True
Interbase TransIsolation=ReadCommited
Trim Char=False

Archivo aliases.conf

Código:
BaseR = SERVIDOR/3050:C:\MIBASE\BASE.MDB

Así hago la conexión a la base al construir el módulo de datos.

Código Delphi [-]
procedure TDMPrincipal.DataModuleCreate(Sender: TObject);
begin
   try
      ConectaBD(BD, BaseR, MiClave);
   .
   .
   .
   except on E:Exception do Begin
         escribelog('Error al crear DMPrincipal: '+E.Message);
      End;
   end;
end;

Código Delphi [-]
Function TDMPrincipal.ConectaBD(BD: TSQLConnection; MiBase: String; MiClave: String): boolean;
begin
  with BD do
    begin
       Connected:= False;
       ConnectionName := MiBase;
       LoadParamsOnConnect:= True;
       try
          Connected := True;
       except on E:Exception do begin
          Connected := False;
          end;
       end;
       LoadParamsOnConnect := False;
       Params.Values['Password']:= Miclave;
       try
          Connected := True;
          Result:= True;
       except on E:Exception do begin
          Connected := False;
          Result:= False;
          end;
       end;
    end;
End;

Cuando depuro, en la función ConectaBD y reviso, trae bien los parámetros pero yo esperaría que convirtiera el Alias "BaseR" por su valor asignado en el aliases.conf, sin embargo toma el valor de "BaseR" como si fuera el nombre de la base de datos y por consiguiente envía error de que no encuentra el archivo para abrirlo. Si yo pongo la ruta y nombre de la base directamente en el parámetro BaseDatos se conecta sin problema o si cambio en el aliases.conf la ruta de la base por una ruta local de mi equipo cliente se conecta bien; es decir supongo yo hace bien la conversión del "Alias" por su valor asignado.

Espero haberme explicado y nuevamente gracias por su apoyo.

Última edición por to_to fecha: 16-06-2015 a las 20:02:23.
Responder Con Cita
  #6  
Antiguo 16-06-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.181
Poder: 31
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola to_to.

Siguiendo la sintáxis de mi mensaje anterior y no mediando otros problemas, de este modo tiene que funcionar:
Código Delphi [-]
function TDMPrincipal.ConectaBD(BD: TSQLConnection; const BDName, UsrName, Pwd: string): boolean;
begin
  BD.Close;
  BD.Params.Clear;
  BD.Params.Values['Database'] := BDName;
  BD.Params.Values['User_name']:= UsrName;
  BD.Params.Values['Password'] := Pwd;
  BD.LoginPrompt               := False;
  Result := True;
  try
    BD.Open;
  except
    Result := False;
  end;
end;

Ejemplo de uso:
Código Delphi [-]
begin
  if not ConectaBD(SQLConnection1, '\\TU_NOMBRE_SERVIDOR\TU_ALIAS', 'sysdba', 'masterkey' ) then
    ShowMessage('Error en la conexión');
  ...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 16-06-2015
to_to to_to is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 39
Poder: 0
to_to Va por buen camino
Gracias eficsa, así es de esta forma si se conecta. Lo que quería evitar es pasarle directamente la ruta; sino más bien que la tomara del archivo del aliases.conf para no modificar código o meter cosas adicionales, pero bueno es muy válida tu solución.

Me pareció ver una forma de recuperar los aliases que se tienen asignados, haré la prueba de recuperarlos y el valor que traiga el alias de mi base y si no resulta construiré un archivo .ini para guardar ahí la configuración a la base de datos.

Gracias nuevamente, les comento cuando tenga la solución final.
Responder Con Cita
  #8  
Antiguo 16-06-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.181
Poder: 31
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola to_to
Cita:
Empezado por to_to Ver Mensaje
Gracias eficsa, así es de esta forma si se conecta. Lo que quería evitar es pasarle directamente la ruta; sino más bien que la tomara del archivo del aliases.conf para no modificar código o meter cosas adicionales, pero bueno es muy válida tu solución.
Es que está tomando la ruta de liases.conf. Lógicamente hay que indicar el servidor y el alias ya que a los que se puede acceder, son virtualmente incontables.

Como ejemplo, teniendo en en aliases.conf: ALIAS = C:\PROGRAMA\DATOS\DATABASE.FDB, fijate que cuando en el cliente usas: \\SERVIDOR\ALIAS el servidor lo convertirá a: C:\PROGRAMA\DATOS\DATABASE.FDB.

Si mas adelante se te ocurriera cambiar la bd a D:\XXXX\DATABASE.FDB, sólo tendrías que cambiar la ruta en archivo aliases.conf del equipo servidor por: ALIAS = D:\XXXX\DATABASE.FDB.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 17-06-2015 a las 06:19:19.
Responder Con Cita
  #9  
Antiguo 17-06-2015
to_to to_to is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 39
Poder: 0
to_to Va por buen camino
Thumbs up

Muchas gracias por los comentarios y sugerencias, efectivamente lo resolví así dejando el alias como lo comentó eficsa y dejando esa parte del servidor como un parámetro ya que esta conexión puede variar. La idea es que se pueda instalar en cualquier cliente y si por alguna razón cambian de servidor o se instala en otra parte la base se pueda configurar desde archivos .ini y/o .conf los accesos a la base sin tocar el código.

Código Delphi [-]
Function TDMPrincipal.ConectaBD(BD: TSQLConnection; CnxBD: String; PwdBD: String): boolean;
{                Agregué variable para recuperar la ruta completa del servidor.
                 Utilicé un archivo "Param.ini" donde se guardarán los datos de
                 conexión, para efectos de la conexión el Alias del servidor y puerto
                 gSERVIDOR y gPUERTOSERVER son variables globales en el datamodule que se crea al 
                 iniciar la aplicación y se recupera el alias y el puerto, si por alguna razón no están o no se pueden
                recuperar se les asigna valores por defecto}
Var
   aliasbd : String;
begin
    aliasbd := '';
    with BD do
    begin
       Connected:= False;
       ConnectionName := CnxBD;
       LoadParamsOnConnect:= True;
       {Se pasa la ruta del alias y el puerto de salida de la base firebird}
       aliasbd := gSERVIDOR+'/'+gPUERTOSERVER+':'+BD.Params.Values['DataBase'];
       try
          Connected := True;
       except on E:Exception do begin
          Connected := False;
          end;
       end;
       LoadParamsOnConnect := False;
       Params.Values['Database']:= aliasbd;
       Params.Values['Password']:= PwdBD;
       try
          Connected := True;
          Result:= True;
       except on E:Exception do begin
          Connected := False;
          Result:= False;
          end;
       end;
    end;
end;
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
error en conexion remota a bd pamda Firebird e Interbase 1 12-11-2014 23:36:23
Ayuda con error en conexión a MySQL remota LucasBols C++ Builder 8 04-06-2012 20:42:35
Error: conexion remota PostgreSQL ioel PostgreSQL 3 28-07-2010 13:17:52
Error de conexión remota a Firebird JosepGA Conexión con bases de datos 2 16-09-2008 17:23:52
dbxconection.conf, dbxdrivers.conf donde estan??? Alex2000 Lazarus, FreePascal, Kylix, etc. 0 14-02-2004 17:26:41


La franja horaria es GMT +2. Ahora son las 11:26:48.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi