2011-11-26 7 views
5

Ho una lunga domanda da porre. Prima di tutto Im ancora molto nuovo per quanto riguarda la programmazione Delphi e la mia esperienza è stata per lo più lo sviluppo di piccole applicazioni di database per utente singolo utilizzando ADO e un database di Access.Applicazione client-server Delphi con errore di connessione incorporato Firebird 2.5

Ho bisogno di passare ora a un'applicazione client server ed è qui che inizia il problema. Ho deciso di utilizzare Firebird 2.5 come mio database, poiché è open source e può essere utilizzato con i componenti interbase in Delphi e che più client possono accedere al database simultaneamente. Così ho seguito il tutorial interbase in Delphi. Sono riuscito a connettere il client al server e vedere i dati nell'esempio (Mentre entrambi sono in esecuzione sul mio pc), ma quando ho provato a spostare il client su un altro pc, mantenendo il server sul mio e eseguendolo per vedere se io può connettersi al server mi ha dato il seguente errore.

Eccezione EIdSocketError nel modulo clientDemo.exe in 0029DCAC. Errore socket n. 10061 Connessione rifiutata.

Capisco che questo potrebbe essere perché l'host è definito come localhost nel client. Ma ecco la mia prima domanda. Nella TSQLConncetion puoi impostare die hostname sotto Driver-> Nome host. La cosa che voglio sapere è come lo si fa in fase di esecuzione, poiché non riesco ad ottenere la proprietà quando provo a creare una casella di modifica per consentire all'utente di inserire il valore e quindi impostarlo tramite codice come ad esempio:

SQLConncetion1.Driver.Hostname: = edtHost.text; Questo non può essere fatto in questo modo e l'unico modo in cui vedo che è possibile impostare il nome host è con l'ispettore dell'oggetto, ma che non è disponibile in fase di esecuzione e ho bisogno di impostare il nome host sul client quando il programma è in esecuzione la prima volta quindi come si imposta il nome host/l'indirizzo IP in fase di runtime?

Im utilizzando Delphi XE2

C'è ancora un sacco di domande a venire soprattutto quando si tratta di schieramento, ma prenderà questo pezzo per pezzo e apprezzo il consiglio.

+0

Non reinventare la ruota. Il nostro ORM client-server Open Source con architettura orientata ai servizi utilizza JSON e SQLite3 denominati [mORMot] (http://synopse.info/fossil/wiki?name=SQLite3+Framework). Almeno vale la pena guardare il codice o leggere la documentazione di 700 pagine per ottenere alcune idee di progettazione o implementazione. –

risposta

3

Embedded non può essere utilizzato da più utenti contemporaneamente (anche se si tratta di due applicazioni sulla stessa macchina). Vedere here per informazioni sulle differenze tra le tre versioni. Ci sono anche informazioni in un altro SO question che potrebbe aiutare.

Per quanto riguarda specificando un server in fase di esecuzione, questo può aiutare:

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

Grazie per il codice precedente, ma non è necessario impostare anche il nome host in modo che il client sappia dove cercare il server? O si deve nominare l'hostname localhost? – Japster

+1

Per l'integrazione, non è necessario il nome host, poiché è possibile accedervi solo da un'applicazione/connessione alla volta. Si prega di visitare il primo collegamento fornito per le differenze tra i tre tipi di server FireBird (Classic, Superserver ed Embedded); c'è una tabella che spiega le differenze tra loro. –

+0

@Japster guarda qui http://www.connectionstrings.com/firebird Non ho usato firebird, ma credo che "Datasource = IP ADDRESS" debba essere aggiunto come parametro – ComputerSaysNo

Problemi correlati