2011-11-26 12 views
5

Tengo una pregunta larga para hacer. En primer lugar, sigo siendo muy nuevo en lo que respecta a la programación de Delphi y mi experiencia se basa principalmente en el desarrollo de pequeñas aplicaciones de bases de datos de usuario único utilizando ADO y una base de datos de Access.Aplicación Delphi Cliente-Servidor usando Firebird 2.5 error de conexión incrustada

Necesito tomar la transición ahora a una aplicación de servidor cliente y aquí es donde comienza el problema. Decidí usar Firebird 2.5 Embeded como mi base de datos, ya que es de código abierto, y se puede usar con los componentes de interfase en Delphi y que múltiples clientes pueden acceder a la base de datos de forma simultánea. Así que seguí el tutorial de interbase en Delphi. Logré conectar el cliente al servidor y ver los datos en el ejemplo (mientras ambos se ejecutan en mi pc), pero cuando traté de mover el cliente a otra PC, mantener el servidor en el mío y ejecutarlo para ver si puedo conectarme al servidor me dio el siguiente error.

Excepción EIdSocketError en el módulo clientDemo.exe en 0029DCAC. Socket Error # 10061 Conexión rechazada.

Entiendo que esto podría deberse a que el host se define como localhost en el cliente. Pero aquí está mi primera pregunta. En TSQLConncetion, puede establecer el nombre de host de la matriz en Driver-> Hostname. Lo que quiero saber es cómo hacer esto en tiempo de ejecución, ya que no puedo obtener la propiedad cuando intento crear un cuadro de edición para permitir que el usuario ingrese el valor y luego establecerlo a través de un código como por ejemplo:

SQLConncetion1.Driver.Hostname: = edtHost.text; Esto no se puede hacer de esta manera y la única manera que veo es configurar el nombre de host con el inspector de objetos, pero eso no está disponible en tiempo de ejecución y necesito establecer el nombre de host en el cliente cuando el programa se ejecuta por primera vez, Entonces, ¿cómo se establece el nombre de host/dirección IP en tiempo de ejecución?

Im usando Delphi XE2

Todavía hay muchas preguntas por venir sobre todo cuando se trata de la implementación, pero voy a tomar esta pieza por pieza y agradezco el consejo.

+0

No reinventar la rueda. Usted tiene nuestro ORM Cliente-Servidor de código abierto con Arquitectura orientada a servicios que usa JSON y SQLite3 llamado [mORMot] (http://synopse.info/fossil/wiki?name=SQLite3+Framework). Al menos vale la pena mirar el código o leer la documentación de 700 páginas para obtener algunas ideas de diseño o implementación. –

Respuesta

3

Embedded no puede ser utilizado por varios usuarios al mismo tiempo (incluso si se trata de dos aplicaciones en la misma máquina). Consulte here para obtener información sobre las diferencias entre las tres versiones. También hay información en otro SO question que podría ayudar.

En cuanto a la especificación de un servidor en tiempo de ejecución, esto puede ayudar:

procedure TForm1.Button1Click(Sender: TObject); 
var 
Conn: TSQLConnection; 
begin 
    Conn := TSQLConnection.Create(Self); 
    try 
    Conn.DriverName := 'FirebirdConnection'; 
    Conn.Params.Add('User_Name=SYSDBA'); 
    Conn.Params.Add('Password=masterkey'); 

    // Replace the dbname in the next line with the 
    // value obtained at runtime, as in 
    // Conn.Params.Add('Database=' + YourNewPathAndDBName); 
    Conn.Params.Add('Database=C:\FireBirdData\YourDB.fdb'); 

    Conn.Open; 
    if Conn.Connected then 
     ShowMessage('Connection successfully made to DB'); 
    finally 
    Conn.Free; 
    end; 
end; 
+0

Gracias por el código anterior, pero ¿no tiene que establecer también el nombre de host para que el cliente sepa dónde buscar el servidor? ¿O debe nombrar el nombre de host localhost? – Japster

+1

Para incrustado, no hay necesidad de nombre de host, ya que solo se puede acceder por una aplicación/conexión a la vez. Visite el primer enlace que proporcioné para las diferencias entre los tres tipos de servidores FireBird (Classic, Superserver e Embedded); hay una tabla que explica las diferencias entre ellos. –

+0

@Japster échale un vistazo aquí http://www.connectionstrings.com/firebird No he usado Firebird, pero creo que se debe agregar "Datasource = IP ADDRESS" como parámetro – ComputerSaysNo

Cuestiones relacionadas