FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Conectar con Firebird indicando la ruta relativa al fichero, no absoluta
Hola.
Tengo una duda, aunque lo mismo es una tontería, y no me doy cuenta que hago mal. Intento conectar con Delphi/FIBPlus a una base de datos de Firebird, pero me gustaría hacerlo indicando una ruta relativa, no absoluta. Esta apliación que estoy haciendo debe correr en cualquier máquina, y durante la instalación, cada usuario usará una carpeta de instalación distinta. Me gustaría saber si es posible indicar en el DataBase la ruta de manera relativa. Muchas gracias anticipadas.
__________________
IncestoCanibal.com |
#2
|
||||
|
||||
Si es posible, pero tiene que ser una ruta relativa a la carpeta "actual" del servidor de intarbase.
Creo que será mas fácil, en tiempo de ejecución, averiguar la carpeta en la que está corriendo tu aplicación, y luego construir la ruta de la base de datos, no te parece? Algo como: Código:
RutaBD := ExtractFilePath(ExpandFileName(ParamStr(0))) + 'datos\basededatos.fdb'; // te devolverá 'c:\archivos de programa\tuprograma\datos\basededatos.fdb' // por ejemplo.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#3
|
|||
|
|||
Buenas de nuevo.
Muchas gracias por solucionarme el problema . El fallo que yo tenía es que pensaba que la de la ruta base de datos la tenía que especificar obligatoriamente en tiempo de diseño, y no es asi. En mi componente DataBase he eliminado todo lo referente al user/pass y la ruta, y en el FormShow de la ventana principal de mi aplicación he añadido esto: Código:
//Compruebo que existe la BD if vModuloDatos.BaseDatos.Connected then vModuloDatos.BaseDatos.Connected:=False; if fileexists(ExtractFilePath(ExpandFileName(ParamStr(0)))+'bdatos\bdatos.gdb') then begin vModuloDatos.BaseDatos.DBName:=ExtractFilePath(ExpandFileName(ParamStr(0)))+'bdatos\bdatos.gdb'; vModuloDatos.BaseDatos.ConnectParams.UserName:='xxx'; vModuloDatos.BaseDatos.ConnectParams.Password:='xxx'; vModuloDatos.BaseDatos.Connected:=True; end;
__________________
IncestoCanibal.com |
#4
|
|||
|
|||
No entiendo... Y si el PC Cliente no tiene acceso físico al fichero de la base de datos (se supone que no es necesario)?
|
#5
|
||||
|
||||
claro que no es necesario. Creo que no has entendido bien la propuesta del hilo, que nada tiene que ver con esto. Te recomiendo su re-lectura. Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#6
|
|||
|
|||
Jachguate, seguí tu consejo y releí el hilo varias veces, pero sigo confundido. Veamos si logro plantear mi duda:
verm83 escribió la siguiente línea de código: Código:
if fileexists(ExtractFilePath(ExpandFileName(ParamStr(0)))+'bdatos\bdatos.gdb') then El código tambien asume que tanto el servidor de base de datos FireBird como el aplicativo se encuentran en la misma máquina. De llegar a estar en máquinas diferente el código no funcionaría. Es Así o estoy errado? Si en ambos casos me equivoco por favor corregidme y asi aprendemos todos . Muchas gracias. |
#7
|
||||
|
||||
Cita:
Todas tus suposiciones son ciertas. Lo dicho sobre la seguridad del sistema seria muy cierto en el caso de un sistema que requiera de un entorno seguro... pero hay muchos desarrollos orientados al escritorio. Date cuenta que muchos desarrollos se hacen para aplicaciones monousuario, y dado que la pregunta no indica que sea un caso diferente, simplemente lo he asumido asi. De hecho, para una aplicación cliente, donde la base de datos está corriendo en otro servidor, la formula proporcionada no serviria de nada, pues el cliente de interbase no puede acceder a la base de datos con la dirección unc del archivo que la contiene. La cadena de conexión, en estos casos, depende del protocolo usado. En tcp-ip, sería algo como: En el caso de windows, usando el nombre del servidor: servidor:c:\ruta\base.fdb usando ip: 192.168.0.42:c:\ruta\base.fdb En el caso de linux... servidor:/usr/firebird/bases/base.gdb o bien 192.168.0.42:/usr/firebird/bases/base.gdb Cita:
Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#8
|
|||
|
|||
Buenas, que respondo.
Todo correcto lo que comentáis. La aplicación que estoy programando es mi proyecto de fin de estudios, la cual acompañaré con un instalador de Firebird, y todo detallado, con lo que, en caso de no existir éste en el pc cliente, se instalaría junto con la aplicación. Igualmente, la base de datos estará en la carpeta de instalación, por lo que he obviado la ip / puerto. He de decir que llevo programando en Delphi apenas un par de meses, y hay muchas cosas que las tengo en desconocimiento, poco a poco cogeré práctica. Saludos y gracias por los consejos.
__________________
IncestoCanibal.com |
#9
|
|||
|
|||
Gracias Jachguate y verm83. Muy claras y logicas sus explicaciones. Ahora si entendi. Hasta luego.
|
|
|
|