Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   ¿Cómo instalo Firebird de manera muy sencilla? (https://www.clubdelphi.com/foros/showthread.php?t=41295)

axelbb 12-03-2007 16:12:03

¿Cómo instalo Firebird de manera muy sencilla?
 
Saludos a todos.

Supongamos por un momento que distribuyo una aplicación que usa Firebird. Supongamos también que no deseo complicarme mucho con el script de instalación, servicios, etc., etc. (no quiero montar un aparataje en la pc, ponerme a ver si soporta servicios o no, darle opciones extrañas a elegir al usuario del instalador, etc.), y opto por simplemente hacer que mi instalador de la aplicacion COPIE los archivos principales de Firebird en una subcarpeta dentro de la carpeta principal de mi aplicación. Supongamos que no me interesa que el servicio se inice automáticamente, que mi propia aplicación hará un shellecute de algo que inicie el servicio y al cerrar el programa lo detenga. Supongamos que quiero que funcione sin problemas en cualquier versión de Windows desde la 98' en adelante. Supongamos que el programa es monousuario; la aplicación es muy simple, sólo que quiero guardar los datos de esta manera porque los componentes de soporte .dbf que encontré no me convencieron.

Supongamos que hice eso, y traté de ejecutar el fbserver o el fbguardian y no se inició nada... ¿Cómo es que se hace? (Sin instsvc.exe, ya que es para Win con servicios, lógico).

La estructura que quiero obtener de carpetas es:

* x:\...\MiPrograma
*___ MiPrograma.exe
*___ Carpeta Datos
*_______ MiBaseDeDatos.fdb
*___ Carpeta Firebird
*_______ Carpeta Bin
*___________ ArchivosDeFireBird.xxx

Espero haber explicado bien la idea :p

Gracias!

jhonny 12-03-2007 16:25:11

Nunca lo he hecho pero supongo que si descargas un .zip de FireBird con su readme te harás una buena idea de como hacerlo

rastafarey 12-03-2007 16:31:11

Resp
 
Supongamos que no haces las cosas como la debes hacerla si no como tu crees que debes hacerla yo no voy a suponer que tu aplicacion no va a correr yo te lo puedo asegurar.

Solo te puedo decir una cosa.
Si no te interesa lo de le servicio de firebird entonces usalo como aplicacion. Windows ya es problematico y le vas a poner firebird como aplicacion esa es tu eleccion.

Una simple pregunta que se responde con un si o un no.
¿Eres programador?

fidel 12-03-2007 17:00:41

Hola axelbb:

Cuando dices <... programa monousuario..> ¿te refieres a que el programa funciona en un solo ordenador sin estar en red?

Si es asi, puedes poner FireBird embembed.

A mi me funciona colocando dos carpetas y siete ficheros en el directorio de la aplicación.

Un saludo.

axelbb 12-03-2007 18:09:46

Primero, lo primero:

Cita:

Empezado por rastafarey
Una simple pregunta que se responde con un si o un no.
¿Eres programador?

Respuesta: NO. Soy Contador Público Nacional, pero aficionado a Delphi, con el cual desarrollo múltiples aplicaciones sencillas y aún algunas bastante lindas que nos resuelven muchos problemas en nuestro trabajo. Programar NO ES MI OFICIO, es una herramienta, como un Excel o un Word. ¿Ok? :rolleyes:. Algo de lo que tecleaste está de más, no me ayudó mucho. Aún corriéndolo como aplicación, no encontré manera de hacerlo funcionar del modo en que lo explico.

Volvamos al tema:

Cita:

Empezado por fidel
Cuando dices <... programa monousuario..> ¿te refieres a que el programa funciona en un solo ordenador sin estar en red?

Si es asi, puedes poner FireBird embembed.

Exacto, en este caso me sirve monousuario. Probé el embebido, sólo que me conecto con los MDO Mercury Objects, y aún renombrando fbembed.dll a fbclient.dll, no me funciona. Pero sería la mejor opción, si me podés ayudar a hacerla andar, sería óptimo :). ¿Con qué componentes has usado el embebido?

Cita:

Empezado por jhonny
Nunca lo he hecho pero supongo que si descargas un .zip de FireBird con su readme te harás una buena idea de como hacerlo

Veré, quería ahorrarme esa lectura :D.

Gracias a todos, me gustaría poder usar el embebido.

axelbb 12-03-2007 18:46:28

Fidel, probé recién con componentes dbExpress. Si tengo el servidor Firebird funcionando, y en VendorLib le escribo fbembed.dll, se conecta perfectamente (funciona igual que el fbclient.dll). Ahora, si detengo el servicio, ya no se conecta más, me sale el clásico mensaje:

"Unable to complete network request to host "127.0.0.1"
Failed to establish a connection
No se ha podido establecer conexión ya que el equipo de destino ha denegado activamente dicha conexión"

¿Qué estoy haciendo mal? ¿No se trabaja igual que con un superserver pero sin el server? :confused:

fidel 12-03-2007 20:56:14

Hola:

Te explico un poco lo que yo hago, y a mí me funciona.

Tengo en mi ordenador FireBird 1.5 corriendo como servidor cuando compilo la aplicación.

Utilizo IBDatabase, IBTransaction, IBDataSet

Pongo en la misma carpeta:

** La aplicación:

- La aplicación (ejecutable, base de datos)

** FB embebido 1.5 :

- Carpeta intl (con un fichero dentro: fbintl.dll)

- Carpeta udf (con cuatro ficheros dentro: fbudf.dll, fbudf.sql, ib_udf.dll, ib_udf.sql)

- Ficheros aliases.conf, fbclient.dll, fbembed.dll, firebird.conf, firebird.msg, gds32.dll, ib_util.dll

fbclient.dll y gds32.dll es el mismo fichero fbembed.dll copiado y renombrado con estos dos nombres.

Con esto me anda en cualqier máquina, o en el lápiz conectado a cuaquier ordenador, incluso en CD si se pone la base de datos ReadOnly

Un saludo.

axelbb 12-03-2007 21:42:14

Gracias!!
 
Gracias por tu colaboración, Fidel. Si a vos te funciona así, le voy a encontrar la vuelta también.

Saludos!:)

jhonny 12-03-2007 22:08:06

Una pregunta mas, Supongamos que no son muchos los datos que manejas y que además no necesitas manejar muchas de las caracteristicas de una base de datos relacional ¿Porque no usas MyBase?

axelbb 13-03-2007 00:55:32

No conocía MyBase
 
No conozco MyBase ¿Está linda para proyectos sencillos? :)

axelbb 13-03-2007 01:02:33

Experiencia de conexión con Firebird embebido
 
Ok, gracias a Fidel, que me ahorró horas (o dias) de trabajo, pude hacer funcionar sin problemas el Firebird embebido (embedded). Para terminar el tema, y si cualquier otra persona llega a necesitar utilizarlo, dejo aquí los pasos que seguí y con los cuales opero sin ningún problema esta interesante variante de Firebird. Lo hago porque hice búsquedas en los foros, y si bien se trató el tema varias veces, no conseguí implementarlo.

¿Qué es el Firebird embebido?

Firebird normalmente se instala como un servidor residente que escucha peticiones en un puerto, al cual habitualmente accedemos indicando una dirección IP del equipo en que se ha instalado. Para que esto funcione, se requiere que el servidor Firebird esté instalado en esa PC y esté iniciado, como mínimo (sin entrar en detalles como usuario y password).

Asimismo, para acceder desde el equipo en que tenemos la aplicación cliente, necesitamos las librerías cliente fbclient.dll o gds32.dll.

Firebird embebido no requiere nada de esto, siempre que se utilice de manera local exclusivamente (es decir en el mismo equipo tendremos la aplicación y los datos). Simplemente se reemplaza alguna de las librerías cliente por otra que viene en un paquete aparte (Embeded server) y se llama fbembed.dll. Claramente, sólo necesitamos nuestra aplicación, la base de datos y esta librería (más algunos otros archivitos), todo en el mismo equipo. De alguna manera, en nuestra aplicación queda embebido el servidor. Ya veremos cómo.

¿Para qué sirve?

1) Para cualquier utilidad que de seguro no requiera ser empleado en red, es decir sin acceso concurrente, ya que únicamente funciona en modo local, y además hace uso exclusivo de la base de datos, así que ni siquiera puede accederse desde otra instancia de nuestro mismo programa simultáneamente. Esta posibilidad nos ahorra hacerle instalar y configurar el servidor a nuestro
usuario. Así, se hace una alternativa excelente a usar simples ficheros .dbf para aplicaciones menores, con toda la posibilidad de extender luego ese mismo programa a mayores prestaciones con el servidor a pleno.

2) Para hacer por ejemplo un CD con gran cantidad de información, que guardamos como base de datos de Firebird y hacemos read_only, y lleva en ese CD TODO LO NECESARIO para funcionar, sin necesidad que el usuario instale Firebird. Esto es una comodidad enorme.

3) Si queremos enviar un demo de nuestro programa, se hace muy sencillo que el usuario lo instale y elimine aún con conocimientos básicos de informática, ya que hasta podría tenerlo en un pen drive.

¿Cuáles son las limitaciones?

Repetimos: Solamente uso local y exclusivo de la base de datos. Se ignora cualquier instalación que exista de Firebird, así como las entradas de registro. El root directory es el que contiene a la librería fbembed.dll. El uso exclusivo es sobre una base de datos. Si tengo dos aplicaciones en el mismo equipo accediendo a bases de datos distintas, no hay conflicto alguno.

Además, no hace caso de usuarios o claves para conectarse. Cualquier user_name o password le viene bien para conectarse a cualquier base de datos del equipo. Esto no tiene nada que ver con los privilegios otorgados en la base de datos. Es decir, me conecto como usuario "yo", pero si en la base de datos ese usuario no existe, no podrá hacer nada una vez conectado.

Desde ya que el usuario SYSDBA, con cualquier password que le pongamos, se conecta con permiso completo.

Para utilizar la base de datos en un CD, hay que crearla Read Only.

Por lo demás, no habría limitaciones, todo el sistema que antes andaba con servidor, debe operar igualmente con el embebido. Debe aceptar todo el SQL. En rigor, si esto es lo que aseguran desde IBPhoenix, no es 100% así, yo tuve que quitar de la parametrización del componente DataBase la línea:

lc_ctype=ISO8859_1

porque no era reconocida y arrojaba error. Es más, si una BD fue cread con SET NAMES o DEFAULT CHARACTER SET ISO..., seguramente no funcionará, al menos a mí me daba ese error. No sería extraño que hubiera otras limitaciones.

¿Cómo se utiliza?

Primero, conseguiremos la distribución del Firebird Embeded Server, en el mismo sitio de descargas que Firebird Superserver. Viene en un .zip. Lo descomprimimos.

Segundo, se arma una estructura de carpetas como sigue:

Mínimamente:

Carpeta principal=> x:\...\MiPrograma

Dentro de ésta ponemos los siguientes archivos:
.\MiEjecutable.exe y los demás que tenga con él
.\MiBaseDeDatos.fdb (puede ir en otra carpeta siempre que esté en el mismo equipo)
.\firebird.msg
.\fbclient.dll ó gds32.dll (fbembed.dll renombrada a una de éstas)
.\icudt30.dll (Estas tres últimas, se incorporan en caso que usemos Firebird 2
.\icuin30.dll No están en las 1.5.x.)
.\icuuc30.dll


NOTA: Cualquiera(fbclient o gds32) sirve, porque en realidad es la famosa "fbembed.dll" QUE HA SIDO RENOMBRADA a uno de esos nombres, dependiendo de la librería de acceso que hayamos elegido en el componente de conexión:

* Para InterBase Data Access Components: Renombrar a gds32.dll
* Para MDO Mercury Objects: Podemos elegir en la propiedad ClientLib cuál usar, y según ésta es el nombre que le daremos.
* Para dbExpress: En propiedad VendorLib pondremos cualquiera de las dos, y el mismo nombre le daremos a la fbembed.dll. También funciona si no la renombramos, pero en VendorLib ponemos fbembed.dll.

Si nuestro sistema usa UDF's, o decidimos cambiar alguna configuración por defecto de Firebird, agregamos:

.\firebird.conf
.\ib_util.dll
.\intl\fbintl.dll
.\udf\fbudf.dll


Ver el Readme_embedded.txt que viene dentro del .zip para más detalles y variantes, como instalar el embebido en otra carpeta del equipo.

Bien, aquí se me presentaron algunos problemas:
Al tener instalado un servidor Firebird en mi PC de desarrollo, los componentes insistían en encontrar algún otro fbclient.dll en alguna otra parte de la PC, sin llevarme el más mínimo apunte a que en el directorio de la aplicación tenía mi bembed.dll "disfrazado" de fbclient.dll.

Si el servidor estaba operativo, todo funcionaba bien, pero en cuanto detenía el servicio para probar el embebido, daba errores. La única forma que encontré fue hacer una búsqueda en toda la PC y eliminé todo rastro de fbclient.dll y gds32.dll que hubiera. Solamente dejé las de la carpeta bin de firebird, pero renombradas a "_fbclient.dll" y "_gds32.dll" para usarlas cuando me hicieran falta. Aún no sé por qué, pero de esta manera sí comenzó a utilizar el sistema embebido.

Si alguien tiene el mismo problema, pruebe a hacer esto.

Otra cosa muy importante, es que no utilizamos cadenas de conexión al estilo:

192.165.0.212:C:\MiSistema\Database\MiBD.fdb
ó
127.0.0.1:C:\MiSistema\Database\MiBD.fdb

Cuando usamos embebido, solamente pondremos esto:

C:\MiSistema\Database\MiBD.fdb

¡¡Prestar atención a ese punto!!

Aclaremos que si le ponemos una IP, y el servidor en esa IP existe y está funcionando, se comporta como la fbclient.dll original, accediendo a la base de datos indicada en la cadena de conexión.

En resumen, los pasos son:

1) Descargar el paquete del embebido y armar la estructura de carpetas que necesitamos.
2) Detener el servicio Firebird, si es que está instalado y operando.
3) Quitar todas las fbclient.dll que haya en el sistema.
4) Cambiar la cadena de conexión de nuestra aplicación al modo local, sin la IP previa (C:\MiSistema\Database\MiBD.fdb)
5) Poner en la carpeta de la aplicación la "fbembed.dll" pero renombrada a fbclient.dll, por ejemplo.
6) Activar la conexión. Si se hizo todo como está indicado, debería funcionar!!

Cualquier comentario que corrija o complete este post será bien recibido para completar el tema y que quede disponible para futuras consultas.

jhonny 13-03-2007 15:03:40

Muy interesante, gracias axelbb


La franja horaria es GMT +2. Ahora son las 07:05:41.

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