PDA

Visualizza la versione completa : [DELPHI] Accesso a database FireBird in rete (modalità client/server)


AlbertoPicca
24-11-2006, 18:04
Ciao a tutti.
Utilizzo un database Firebird con un gestionale realizzato in Delphi.

Fino ad adesso ho sempre installato nella cartella in cui si trova l'eseguibile anche la DLL per poter accedere alla struttura dati, quindi una installazione Embedded Server for Windows.
E fino a qui nessun problema.

Ora,devo condividere il database in una rete, ho già provveduto a modificare, in base all'ip del server, il percorso del database.

Faccio partire l'eseguibile sul server...e tutto bene, faccio partire lo stesso eseguibile sul client e mi restituisce un errore: "I/O errore. Il file é già in uso da un altro processo".

Sono quindi passato alla versione SuperServer per Windows, ma ora il problema é diverso: non trova proprio il database ne dal server ne dal client.
L'errore: "unavailable database".

Ho fatto ripartire una versione che non prevede il la condivisione del database ma appare sempre l'ultimo errore che vi ho descritto.


Come devo fare?

Grazie
:ciauz:

alka
24-11-2006, 18:21
Il server Embedded di FireBird è progettato per accedere direttamente al file fisico, "bloccandolo" di conseguenza. Questo impedisce a qualsiasi altra applicazione, anch'essa basata sulla versione Embedded di FireBird, di accedere al medesimo file poiché già bloccato da un'altra applicazione.

Per poter lavorare in ambito "client/server", è necessario installare FireBird SuperServer, quindi un server che sia preposto alla gestione esclusiva del file di database; i client, cioè le applicazioni, attraverso il Client del SuperServer, si collegano al server per interrogare il database specifico.

Occorre quindi eleggere una macchina delle rete che funga da server, in cui venga installato e attivato il FireBird SuperServer.

Le applicazioni non devono quindi utilizzare la DLL di FireBird Embedded (fbembed.dll), ma la DLL del client (fbclient.dll o gds32.dll, per compatibilità verso InterBase), per connettersi al server invece che tentare di aprire direttamente il file fisico bloccandolo per gli altri utenti, operazione che può comportare anche un degrado pesante delle performance se il file si trova su un'altra macchina e viene elaborato senza passare attraverso un server che riceve le richieste e restituisce solamente i dati corrispondenti.

E' necessario modificare l'applicazione indicando il percorso del database a cui collegarsi, espresso nel formato


nome del server:<percorso file .fdb riferito al server>


Ciao! :ciauz:

AlbertoPicca
24-11-2006, 18:33
Avevo dimenticato di togliere i file Embedded dalla cartella... :(

Solamente che ora appare un altro messaggio di errore:
"lock conflict on no wait transaction - deadlock".
... ma il programma si apre...

:confused:

alka
24-11-2006, 18:43
Originariamente inviato da AlbertoPicca
Avevo dimenticato di togliere i file Embedded dalla cartella... :(

I file possono anche rimanere dove sono... l'importante è che i componenti usati per l'accesso ai dati facciano riferimento alla libreria che costituisce il "client verace" di FireBird, non il "client/server embedded".


Originariamente inviato da AlbertoPicca
Solamente che ora appare un altro messaggio di errore:
"lock conflict on no wait transaction - deadlock".
... ma il programma si apre...

Che componenti usi per l'accesso al database?

Ciao! :ciauz:

AlbertoPicca
24-11-2006, 18:46
quelle librerie IB, ma passerò a dbExpress!

Una domanda: sono più performanti in termini di velocità le dbExpress rispetto a IB?

Magari i parametri del componenti TTransaction non sono impostati correttamente...
Ora sono definiti 3 valori:
. read_committed
. rec_version
. nowait

:ciauz:

alka
24-11-2006, 19:23
Originariamente inviato da AlbertoPicca
quelle librerie IB, ma passerò a dbExpress!

Con le librerie IBX è possibile sfruttare FireBird Embedded?? :stordita:


Originariamente inviato da AlbertoPicca
Una domanda: sono più performanti in termini di velocità le dbExpress rispetto a IB?

Così di getto, mi verrebbe da dire che IBX, in quanto componenti nativi, siano più rapidi di dbExpress che comunica con un driver, benché la libreria sia talmente leggera e il driver integrato che difficilmente noterai la differenza. :)


Originariamente inviato da AlbertoPicca
Magari i parametri del componenti TTransaction non sono impostati correttamente...

Possibile... non saprei dire, non conoscendo il resto della configurazione. :(

Ciao! :ciauz:

Loading