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)
-   -   Conexión en red a FB (https://www.clubdelphi.com/foros/showthread.php?t=92089)

Angel.Matilla 21-07-2017 10:31:52

Conexión en red a FB
 
Hace unos meses planteaba una duda que me había surgido al conectar en red una base de datos FB (Conectar Firebird en red). Aquel problema quedó resuelto sin ningún problema.

Sin embargo ahora, que he tenido que instalar la misma aplicación en otra red distinta no soy capaz de hacer que los puestos se conecten al motor en el servidor. Seguro que las preguntas son una estupidez pero llevo diez días dando vueltas y no soy capaz de ver que pasa.
  1. Lógicamente el motor ¿sólo tiene que instalarse en el servidor?
  2. En los puestos ¿sólo hay que copiar la libreria fbcliente.dll o hace falta algo más?
  3. ¿Puede el problema venir porque el servidor pida usuario y clave para poder acceder a él desde la red? Si es así ¿cómo se indico desde la aplicación esto valores del servidor?
Os agardezco de antemano las respuestas que me podáis dar.

duilioisola 21-07-2017 11:59:26

1.
El servidor tiene que estar instalado en el ordenador que haga de servidor.
Este ordenador tendrá una IP asignada
El puerto TCP/3050 debe estar abierto para permitir conexiones desde la red.
La base estará en una carpeta
La base de datos tendrá un nombre y una extensión .FDB
El servidor de base de datos, tiene un nombre de usuario y contraseña por defecto (SYSDBA - masterkey) que pueden cambiarse y dependiendo de la instalación quizás sea una contraseña generada al azar y que estará un un fichero en la misma carpeta donde se ha instalado (Linux normalmente)
El fichero de configuracion de Firebird tiene un item donde dice desde qué IPs externas se puede conectar. (En una instalación en Ubuntu he tenido que tocarlo).
Con esto debes conectar desde otros ordenadores con
IP:Path/Nombre.FDB
Windows: 192.168.1.1:C:\Datos\Base.FDB
Linxu: 192.168.1.1:/datos/base.fdb

2.
En los clientes hago la instalación mínima. Esto pone cada cosa en su lugar.

3.
Todo depende del mensaje de error...
Si te dice algo como '#10060', es normalmente un problemda de red.
Si te dice algo como 'username or password incorrecto', es nombre de usuario y contraseña.
si te dice algo como 'file not found' puede ser que la base no esté donde la buscar o que no coinciden mayúsculas y minúsculas (linux).

Envía el mensaje de error sin tocar ni traducir para que podamos ayudarte un poco mas...

Casimiro Notevi 21-07-2017 12:20:56

Cita:

Empezado por duilioisola (Mensaje 519536)
Envía el mensaje de error sin tocar ni traducir para que podamos ayudarte un poco mas...

^\||/^\||/^\||/

Angel.Matilla 21-07-2017 12:41:27

Gracias por la respuesta. Vamos allá.
  • El servidor tiene que estar instalado en el ordenador que haga de servidor. OK
  • Este ordenador tendrá una IP asignada ??
  • El puerto TCP/3050 debe estar abierto para permitir conexiones desde la red. OK
  • La base estará en una carpeta OK
  • La base de datos tendrá un nombre y una extensión .FDB OK
  • El servidor de base de datos, tiene un nombre de usuario y contraseña por defecto (SYSDBA - masterkey) que pueden cambiarse y dependiendo de la instalación quizás sea una contraseña generada al azar y que estará un un fichero en la misma carpeta donde se ha instalado (Linux normalmente) OK (pero la instalación es en Windows)
  • El fichero de configuracion de Firebird tiene un item donde dice desde qué IPs externas se puede conectar. (En una instalación en Ubuntu he tenido que tocarlo). ??
Con esto debes conectar desde otros ordenadores con

Windows: 192.168.1.1:C:\Datos\Base.FDB >> Estoy tratando de acceder con Servidor/3050:D:\DatAfi30\Tablas\Afiliados.fdb

Cita:

Empezado por duilioisola
En los clientes hago la instalación mínima. Esto pone cada cosa en su lugar.

En la otra instalación que tengo hecha de esta aplicación creo recordar pero no estoy 100% seguro que en el puesto no se puso nada más que la librería

Cita:

Empezado por duilioisola
Todo depende del mensaje de error...
Si te dice algo como '#10060', es normalmente un problemda de red.
Si te dice algo como 'username or password incorrecto', es nombre de usuario y contraseña.
si te dice algo como 'file not found' puede ser que la base no esté donde la buscar o que no coinciden mayúsculas y minúsculas (linux).

Envía el mensaje de error sin tocar ni traducir para que podamos ayudarte un poco mas...

Esto último va a ser más complicado porque en la instalación tengo montada una minigestión de errores y genero yo los mensajes que me interesan. El mensaje que se muestra al arrancar me avisa que el servicio FB no está activo; es casi lo primero que hago al lanzar la aplicación: validar que FB está arrancado. Sí he comprobado que en el servidor la aplicación se lanza bien y sin problemas. La validación la hago con esto:
Código:

try
{
    if (!isFirebirdRunning())
          throw Exception("El servicio Firebird no está activo.\nRevise su estado en:\n\n· Panel de control\n· Herramientas administrativas\n· Servicios\n· Firebird Server");

    Application->Initialize();
    Application->Title = cVersion;
    Application->CreateForm(__classid(TfPersona), &fPersona);
    Application->Run();
}
catch (Exception &exception)
{
    Application->ShowException(&exception);
}

Y la función llamada es esta:
Código:

#pragma hdrstop

#include "checkFirebird.h"
#include "WinSvc.hpp"

#pragma package(smart_init)
//---------------------------------------------------------------------------

DWORD ServiceStatus(const char* &sMachine, const char* &sService)
{
    SC_HANDLE schm, schs;
    TServiceStatus ss;
    DWORD dwStat = 0;

    schm = OpenSCManager(sMachine, NULL, SC_MANAGER_CONNECT);

    if (schm > 0)
    {
          schs = OpenService(schm, sService, SERVICE_QUERY_STATUS);

          if (schs > 0)
          {
              if (QueryServiceStatus(schs, &ss))
                    dwStat = ss.dwCurrentState;
              CloseServiceHandle(schs);
          }
          CloseServiceHandle ( schm );
    }
    return dwStat;
}
//---------------------------------------------------------------------------

bool isFirebirdRunning(void)
{
    return ServiceStatus("", "FirebirdServerDefaultInstance") == SERVICE_RUNNING;
}
//---------------------------------------------------------------------------

Creo recordar que la saqué de este foro.

Casimiro Notevi 21-07-2017 13:37:35

Cita:

Empezado por Angel.Matilla (Mensaje 519538)
Windows: 192.168.1.1:C:\Datos\Base.FDB >> Estoy tratando de acceder con Servidor/3050: D:\DatAfi30\Tablas\Afiliados.fdb

Haz caso de lo que dice duilioisola.
Además, si la unidad D: no es un disco físico del servidor (sino una unidad de red), tampoco funcionará,

Angel.Matilla 21-07-2017 13:49:47

Cita:

Empezado por Casimiro Notevi (Mensaje 519539)
Haz caso de lo que dice duilioisola.
Además, si la unidad D: no es un disco físico del servidor (sino una unidad de red), tampoco funcionará,

Probaré. D es un disco físico del servidor.

engranaje 21-07-2017 14:04:27

Por aportar algo que puede ser de ayuda, en la carpeta en la que se instaló firebird encontraras un fichero ALIASES.CONF
Puedes editar ese archivo escribiendo el nombre del alias que tu decidas, seguido de igual y de la ruta física del fichero con la BD. Por ejemplo
TIENDA = C:\DATOS\TIENDA.FDB
ALMACEN = D:\BBDD\ALMACEN.FDB

Si en tu caso estás intentando accede a:
Servidor/3050: D:\DatAfi30\Tablas\Afiliados.fdb
y d: es una unidad del servidor, podrías configurar el ALISASES.CONF asi:
AFILIADOS = D:\DatAfi30\tablas\Afiliados.fdb
y concectarte de esta forma
Servidor/3050: AFILIADOS

duilioisola 21-07-2017 14:53:40

Prueba a hacer un ping a Servidor desde el cliente, para ver si resuelve correctamente la dirección:

Código:

C:\> ping Servidor
Haciendo ping a Servidor [fexx::3dxx:19xx:c5xx:d4xx%3] con 32 bytes de datos:
Respuesta desde feexx::3dxx:19xx:c5xx:d4xx%3: tiempo<1m
Respuesta desde feexx::3dxx:19xx:c5xx:d4xx%3: tiempo<1m
Respuesta desde feexx::3dxx:19xx:c5xx:d4xx%3: tiempo<1m
Respuesta desde feexx::3dxx:19xx:c5xx:d4xx%3: tiempo<1m

Estadísticas de ping para feexx::3dxx:19xx:c5xx:d4xx%3:
    Paquetes: enviados = 4, recibidos = 4, perdidos = 0
    (0% perdidos),
Tiempos aproximados de ida y vuelta en milisegundos:
    Mínimo = 0ms, Máximo = 0ms, Media = 0ms

C:\>

De todos modos, en el servidor puedes obtener la dirección IP mediante el comando ipconfig:

Código:

C:\>ipconfig

Configuración IP de Windows

Adaptador de Ethernet Ethernet:

  Sufijo DNS específico para la conexión. . :
  Vínculo: dirección IPv6 local. . . : fexx::c4xx:edxx:61:13xx%7
  Dirección IPv4. . . . . . . . . . . . . . : 10.10.9.42
  Máscara de subred . . . . . . . . . . . . : 255.255.255.0
  Puerta de enlace predeterminada . . . . . : 10.10.9.254
...


maeyanes 21-07-2017 18:33:37

Hola....

Algo me dice que estás tratando de verificar si el servicio de FB está funcionando en las PC's cliente, algo que siempre te va a dar error ya que el servicio solo está activo en el equipo servidor...

Verifica si es eso lo que estás haciendo, o al menos indica que valores le pasas a los parámetros de la función ServiceStatus....



Saludos...

Angel.Matilla 21-07-2017 18:53:59

Cita:

Empezado por duilioisola (Mensaje 519542)
Prueba a hacer un ping a Servidor desde el cliente, para ver si resuelve correctamente la dirección:

Pues no se me había ocurrido :(

Cita:

Empezado por maeyanes (Mensaje 519546)
Algo me dice que estás tratando de verificar si el servicio de FB está funcionando en las PC's cliente, algo que siempre te va a dar error ya que el servicio solo está activo en el equipo servidor...

Verifica si es eso lo que estás haciendo, o al menos indica que valores le pasas a los parámetros de la función ServiceStatus...

Creo que tienes razón. La función que uso es tal cual la he puesto antes, así que efectivamente estoy comprobando si funciona donde se lanza el programa. Sin embargo, tal cual está escrito está funcionando en otra red sin ningún probelam y por eso no la he tocado; pero tienes razón en esa puntualización porque ahora mismo no recuerdo cómo está montada esa otra red y no tengo acceso directo a ella. Está a más de 120 Km. de mi residencia y no podemos montar un escritorio remoto como TeamViewer porque les han capado TODOS los puertos de acceso externos.

Casimiro Notevi 21-07-2017 22:39:06

Cita:

Empezado por Angel.Matilla (Mensaje 519547)
... no podemos montar un escritorio remoto como TeamViewer porque les han capado TODOS los puertos de acceso externos.

Solamente hace falta que tenga internet para poder navegar. Todos estos programas no necesitan otros puertos.

Angel.Matilla 24-07-2017 10:19:43

Cita:

Empezado por Casimiro Notevi (Mensaje 519552)
Solamente hace falta que tenga internet para poder navegar. Todos estos programas no necesitan otros puertos.

Internet si tienen pero les han limitado tanto los accesos que ni siquiera puedo enviar un enlace a Google Drive a la dirección oficial del sitio y tenemos que andar con las cuentas de correo particulares. Para el escritorio estoy usando una web de Cisco (https://meetings.webex.com/collabs/auth) que aunque no me deja interactuar sí me deja ver la pantalla remota; no es mucho pero menos es nada.

Casimiro Notevi 24-07-2017 10:43:45

Cita:

Empezado por Angel.Matilla (Mensaje 519603)
Internet si tienen

Si pueden navegar por internet, entonces funcionará casi cualquier programa de ese tipo.

Angel.Matilla 24-07-2017 12:13:12

Cita:

Empezado por Casimiro Notevi (Mensaje 519607)
Si pueden navegar por internet, entonces funcionará casi cualquier programa de ese tipo.

Pues te juro que es imposible, o no sé cómo hacerlo funcionar. Antes de que empezaran a meter cortafuegos y trabas no había problema pero ahora no hay forma de usar el TeamViewer.

Casimiro Notevi 24-07-2017 14:07:30

Pues que lo detengan un rato, a ver si eso mismo es el culpable de que no funcione firebird.

bitbow 25-07-2017 22:50:38

Creo que el tema principal es que los administradores de la REd te den las facilidades, si tienen buenos conocimientos entenderan rapidamente tu problematica y la solucionaran y tambien es bueno que siempre se tenga claro como trabaja con un servidor de base de datos standar (direccion ip o nombre de la PC, puerto, instancia, credenciales).

La manera simple de probar el acceso al equipo servidor es con ul telnet a la ip y puerto o con un cliente dedicado(navicat, heidi, sql admin, etc). En estos caso seimpre que conecto un cliente le instalo este multicliente y con el pruebo >> http://dbeaver.jkiss.org/download/.

Saludos.

Angel.Matilla 26-07-2017 10:44:09

Cita:

Empezado por Casimiro Notevi (Mensaje 519617)
Pues que lo detengan un rato, a ver si eso mismo es el culpable de que no funcione firebird.

Mira, lo he intentado todo salvo una cosa (que acabo de dar cuenta): decirle al cortafuegos que permita usar esa aplicación. Fallo mío. :o
Cita:

Empezado por bitbow (Mensaje 519707)
Creo que el tema principal es que los administradores de la REd te den las facilidades, si tienen buenos conocimientos...

Ese es el probelma: Que no tienen ni idea no ya de redes, ni siquiera de mantenimiento básico de un PC. Y no es culpa suya; ellos sólo tiene que saber usar las herramientas que les dan no como se mantienen. Para eso estamos los demás, programadores y técnicos. Seguiremos luchando. Lo más gracioso es que tengo menos problemas con los equipos instalados en Ciudad Real que con los de Toledo que es donde vivo.


La franja horaria es GMT +2. Ahora son las 08:56:23.

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