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)
-   -   Firebird 1.5.6 y Windows 2008 (https://www.clubdelphi.com/foros/showthread.php?t=67991)

guillotmarc 18-05-2010 20:03:34

Cita:

Empezado por donald shimoda (Mensaje 364520)
Justamente es el caso opuesto, en este caso dejo de funcionar con una versión previa (win98) no con una versión posterior (win 2000 o superior) por tanto si esta usando IPC debería funcionar de igual manera. De ahi mi "asi que"...;)

No hombre, estamos hablando de Windows 2.008 y no de Windows 98.

Eso creo, al menos.

Saludos.

donald shimoda 18-05-2010 20:18:25

Cita:

Empezado por guillotmarc (Mensaje 364521)
No hombre, estamos hablando de Windows 2.008 y no de Windows 98.

Eso creo, al menos.

Saludos.

Tenes toda la razón , se me cruzaron los cables mal. me confundí con otro post de DA! :P

sur-se 19-05-2010 08:29:23

Hola.
No, puede ser el problema el protocolo de red que indicas (IPC vs XNET), pues la cadena de conexión que utilizo es de la forma <nombre del servidor>:<ruta local a la base de datos>. Los equipos que están en red no conectan con la base de datos tampoco. Es decir, ni desde el propio servidor (con localhost o con el nombre de red) ni desde los equipos cliente.
Ahora bien, cambio a 2.1 y si funciona sin cambiar nada en los equipos clientes. Inexplicable.
Un saludo.

guillotmarc 19-05-2010 08:57:49

Hola.

Ya me parecía a mi que el código de error no se correspondía a ese problema, aún así es lo primero que se viene a la cabeza en un Windows con servicios de Terminal.

Googleando ese error, parece ser que en lugar de localhost tienes que usar la dirección IP (supongo que se refiere a eso cuando habla de node address).

http://tech.groups.yahoo.com/group/f.../message/54779

Pruébalo.

sur-se 19-05-2010 09:06:41

Hola. Normalmente el servidor lo suelo dejar dedicado, como es este caso, por lo que no se trabaja en él. La cadena de conexión que utilizo siempre es <nombre del servidor>:<ruta local a la base de datos>.
En el propio servidor también he probado así, es decir, como si fuese una conexión de red.
La cuestión es que no conectan ni los equipos de la red ni desde el propio servidor con esa cadena de conexión. No suelo utilizar lo del localhost salvo excepciones.
Ahora bien, desinstalo 1.5 e instalo el 2.x y ya funciona bien todo. La misma aplicación, con la misma cadena de conexión.
El cortafuegos está abierto por ese puerto (3050) y el remoto (que lo fijo en el firebird.conf). De hecho, si no fuese así tampoco funcionaría el 2.x.
No sé que más mirar.
Un saludo.

guillotmarc 19-05-2010 11:26:12

Ya sé que parece una tontería, pero para descartar lo que dice Helen Borrie en ese hilo, ¿ puedes probar usando la dirección IP en lugar del nombre de servidor ?.

Ejplo.: 10.0.0.125:C:\Datos\CLIENTES.DAT

guillotmarc 19-05-2010 11:36:19

Por cierto, el "Cannot attach to services manager" parece que indica que el Servidor no ha arrancado en absoluto.

¿ Puedes ir al panel de control, herramientas administrativas, Services, y comprovar que el servicio Firebird Server esté arrancado ?, además, como prueba adicional, paralo un momento y a continuación arrancalo manualmente. A ver si arranca bien o da un error (como también parece indicar el "control services error 1061" del Firebird.log).

duilioisola 19-05-2010 17:04:22

Por si sirve de algo...
Acabo de mirar un cliente que recordaba que tiene un servidor Win2008.
Tiene la versión Firebird 1.5.2 funcionando.
Puede hacer backups y restores correctamente.
Puede conectarse con IBExpert
Puede conextarse con su aplicación.

sur-se 19-05-2010 17:11:00

SOLUCIONADO !!!!

..... bueno, pongo la solución, evidentemente. Pero primero que nada gracias a todos por vuestra ayuda.

El problema era una tontería. Yo ya me lo imaginaba .... Si es que por estas cosas yo siempre prefiero servidores linux con CentOS ...

Pues bien, en windows 2008 cuando se instala el firebird lo hace en c:\Archivos de programa\Firebird\Firebird_1_5 (en la versión en Español).
Por el nuevo sistema de rutas para los programas, realmente es c:\Program Files.
Esto parece una tontería, pero resulta que la versión 1.5.6 no es capaz de gestionar bien esto nuevo y no consigue acceder a la base de datos security.fdb.
El resultado es que no entra nadie porque no se puede acceder a la base de datos de usuarios. He editado el fichero firebird.conf para cambiar el rootdirectory y ponerlo fijo a c:\Program Files\Firebird\Firebird_1_5 y ahora si funciona.
He podido crear los usuarios de la base de datos y ya todo funciona bien.
Una tontería, ya lo sé, pero tenía que funcionar...
Ahora puedo ir tranquilamente adaptando la aplicación al 2.x (bueno corrigiendo los errores de los alias) y demás.
Un saludo

maeyanes 19-05-2010 17:13:25

Hola...

¿Ya probaste usando la IP del servidor en la cadena de conexión? Si funciona podría ser que necesitas hacer que a tu servidor lo puedan ver las otras PC's de la red, esto es, en el "Centro de redes y recursos compartidos" de W2K8 hay una opción que indica si las otras PC's de la red pueden ver a tu servidor.

Yo tenía un problema similar, no podía conectarme a un servidor vía su nombre pero si por su IP, activé esa opción y poblema solucionado...



Saludos...

maeyanes 19-05-2010 17:14:30

Vaya... por no refrescar la página antes de contestar mi sugerencia llegó demasiado tarde xDDD

Casimiro Notevi 19-05-2010 18:10:59

Cita:

Empezado por sur-se (Mensaje 364612)
Pues bien, en windows 2008 cuando se instala el firebird lo hace en c:\Archivos de programa\Firebird\Firebird_1_5 (en la versión en Español).
Por el nuevo sistema de rutas para los programas, realmente es c:\Program Files.
Esto parece una tontería, pero resulta que la versión 1.5.6 no es capaz de gestionar bien esto nuevo y no consigue acceder a la base de datos security.fdb.

No lo entiendo, en español es "Archivos de programa" y en inglés es "Program Files", pero eso nunca ha sido un problema para firebird :confused:

sur-se 19-05-2010 18:20:19

Hola. No en XP y anteriores. En Windows 7 y en WS2008, realmente es c:\Program Files y para cada idioma se mapea a c:\Archivos de programa o el que sea en otros idiomas. Más o menos eso me parece, no soy ningún experto en Windows.

Realmente el sistema operativo entiende c:\Program Files, porque de hecho cuando se instala la aplicación te pone c:\Program Files\Firebird\Firebird_1_5 y no C:\Archivos de Programa\Firebird\Firebird_1_5 como ocurría en XP o anteriores.

Quizás algún experto en WS2K8 pueda ilustrarnos sobre ello, pero lo que si te aseguro que ha sido cambiar eso y ya funcionaba el 1.5.6.

por otra parte, estoy preparando un ejemplo de lo del drop table para ver si tiene solución, ya que salió en el hilo.

Un saludo.

guillotmarc 19-05-2010 18:27:19

Cita:

Empezado por Casimiro Notevi (Mensaje 364625)
No lo entiendo, en español es "Archivos de programa" y en inglés es "Program Files", pero eso nunca ha sido un problema para firebird :confused:

Yo he tenido problemas con esto con Firebird 2 (que es la que uso por defecto) en Windows Vista (imagino que con Win 7, 2008, etc. ... ocurre lo mismo).

Si sobre el servidor accedo en local como C:\Program Files\Prog\Datos.dat, entonces los clientes no pueden conectar como servidor:C:\Archivos de Programa\Prog\Datos.dat.

Todas las máquinas tienen que conectar usando Program Files, o bien Archivos de Programa (que es un symlink a Program Files), pero no se pueden mezclar.

¿ Seguro que te preguntas porqué hago una cosa tan estúpida ?.

Es una herencia del proceso de instalación que creé cuando solo existía "Archivos de Programa". La instalación en los clientes me deja la cadena de conexión en "C:\Archivos de Programa" que es el valor que usaba por defecto en Windows 95/98/ME/XP/... (si uso otra carpeta del servidor, tengo que modificar el ini manualmente). En cambio en el Servidor, como el instalador sabe perfectamente la carpeta donde se realiza la instalación, modifica la cadena de conexión (y la deja en Program Files).

En definitiva, que para evitar estos problemas (y no hacer chapuzas en la instalación de que si el S.O. es uno utilizo una cadena por defecto, y otro, otra cadena), lo que he terminado haciendo es no utilizando para nada la carpeta "Archivos de Programa", y a partir de ahora colgar directamente mis programas de una subcarpeta en la raíz (con lo que también me ahorro muchos problemas de restricciones por seguridad que Vista/7 añaden a lo que se encuentra en Archivos de Programa).

Casimiro Notevi 19-05-2010 18:30:59

Esas cosas no me pasan porque siempre uso servidores linux :)

sur-se 19-05-2010 18:37:20

je je .. uno de mi opinión ... a mi me pasa igual .. siempre que puedo servidor linux ...

pero hay clientes que se "encasquetan" con el güindous.

sur-se 19-05-2010 18:49:14

Bueno, el tema del borrado de la tabla. No sé si debería ir en otro hilo, pero bueno, como salió aquí, pues a ver si Donald puede ayudarme, o algún otro compañero. Es un ejemplo sencillo sin controles de errores ni similar. Es para que lo veáis.

Coloco en la pantalla 5 botones:
button1 --> conectar con la Bd
button5 --> desconectar de la bd
button3 --> crear un tabla y commit
button2 --> ejecutar proceso de inserts y commit
button4 --> borrar la tabla creada commit

Un label1 para poner un texto.

En pantalla los componentes fibplus:
FIBdatabase para conectar con la BD
una pareja fibtransaction1/fibquery1
otra pareja fibtransaction2/fibquery2

Código:

procedure TForm1.Button1Click(Sender: TObject);
begin
    pFIBDatabase1.Connected:=true;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
    pFIBDatabase1.Connected:=false;
end;

procedure TForm1.pFIBDatabase1AfterConnect(Sender: TObject);
begin
    label1.caption:='Conectada';
end;

procedure TForm1.pFIBDatabase1AfterDisconnect(Sender: TObject);
begin
    label1.caption:='Desconectado';
end;

procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
    pFIBTransaction2.StartTransaction;
    with pFIBQuery2 do
    begin
          close;
          sql.clear;
          sql.add('INSERT INTO TMPPRUEBA( C1, C2) VALUES (:c1, :c2)');
          Prepare;
          for i:=1 to 100 do
          begin
              ParamByName('c1').value:=i;
              ParamByName('c2').value:=i;
              ExecQuery;
          end;
          close;

    end;
    pFIBTransaction2.Commit;
    showmessage('Terminado');
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
    pFIBTransaction1.StartTransaction;
    with pFIBQuery1 do
    begin
          close;
          sql.clear;
          sql.Add('CREATE TABLE TMPPRUEBA ( C1 INTEGER, C2 INTEGER )');
          ExecQuery;
    end;
    pFIBTransaction1.Commit;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
    pFIBTransaction1.StartTransaction;
    with pFIBQuery1 do
    begin
          close;
          sql.clear;
          sql.Add('DROP TABLE TMPPRUEBA ');
          ExecQuery;
    end;
    pFIBTransaction1.Commit;
end;

Se conecta con la Bd, se crea la tabla, se ejectua el proceso, se borra la tabla.
Si el servidor es 1.5, funciona bien. Si es 2.x al borrar la tabla da un error de "object metadata in use".
Todo tiene sus commits correspondientes.
En 2.x, después de crear y ejectuar, si desconecto de la bd y vuelvo a conectar ya puedo borrarla.
Un saludo.

guillotmarc 19-05-2010 19:01:18

¿ Utilizas la última versión disponible de Firebird 2.1 (2.1.3) ?. Parece claro que la tabla queda bloqueada más allá del tiempo durante el que realizas la transacción (y solo se desbloquea al desconectar la base de datos).

Normalmente estos problemas los suelen solventar en las actualizaciones de cada nueva versión de Firebird.

guillotmarc 19-05-2010 19:05:49

Cita:

Empezado por Casimiro Notevi (Mensaje 364631)
Esas cosas no me pasan porque siempre uso servidores linux :)

Yo no puedo hacerlo, mi programa lo pongo en tiendas, y lo normal es que haya dos, tres ordenadores de promedio.

Utilizan uno de los ordenadores como servidor y cliente a la vez.

No puedo decirles que añadan un servidor Linux dedicado, así que me toca lidiar con Windows y sus tonterías.

:(

maeyanes 19-05-2010 19:26:47

Hola...

Sobre el detalle de las rutas especiales en Windows, el mismo S.O. ofrece funciones para saber cuales son esas rutas.

La mayoría de los generadores de instaladores son capaces de obtener esas rutas no importa que versión de Windows es y desde tus aplicaciones de delphi solo necesitas usar las funciones del API. Busquen información sobre la función: SHGetSpecialFolderPath, a mi me ha evitado muchos dolores de cabeza...


Saludos...


La franja horaria es GMT +2. Ahora son las 03:47:21.

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