PDA

Visualizza la versione completa : Condivisione in rete Intranet di un applicativo


vicky
04-05-2006, 22:19
Ho provato a condividere in una rete intranet un applicativo funzionante che utilizza le librerie DBExpress ma ottengo questo messaggio di errore:

dbExpressError: [0x0015]:Connection Failed Database Server Error: operating system directive createfile failed - Accesso Negato.
I due computer in rete hanno sistema operativo winXp home e winXp professional: l'applicativo non richiede installazione perché costituito da un eseguibile, un db Firebird e alcune librerie. A cosa potrebbe essere dovuto l'errore visto che se inserisco l'applicativo su di un dvd questo funziona perfetteamente in tutti e due i computer? :)

alka
05-05-2006, 09:59
Originariamente inviato da vicky
Ho provato a condividere in una rete intranet un applicativo funzionante che utilizza le librerie DBExpress ma ottengo questo messaggio di errore
Cosa intendi precisamente con "condividere in rete"? Hai copiato l'applicazione su una locazione diversa dal computer locale e stai eseguendo l'applicativo da quella posizione?

Ciao! :ciauz:

vicky
05-05-2006, 14:58
Si, penso che si possa dire così. In pratica devo poter condividere l'applicativo in una rete formata da tre computer. L'applicativo è copiato all'interno di uno dei tre computer; è stato condiviso e vorrei accedervi anche dagli altri due computer. :)

alka
05-05-2006, 15:27
Originariamente inviato da vicky
Si, penso che si possa dire così. In pratica devo poter condividere l'applicativo in una rete formata da tre computer. L'applicativo è copiato all'interno di uno dei tre computer; è stato condiviso e vorrei accedervi anche dagli altri due computer. :)
Bisogna tenere conto del fatto che, se non ricordo male, l'applicativo accede a dati memorizzati in locale; lanciando il file direttamente dalla rete, il programma tenterà quindi di aprire queste risorse nella locazione di rete da cui proviene, e non tutte le operazioni di questo tipo sono concesse.

Infatti, l'errore proviene proprio dal dbExpress: supponendo che il tuo programma acceda ad un database per cercare un nome tra 1000000 di nominativi, nel caso in esame questa operazione dovrebbe essere portata a termine facendo viaggiare in rete locale tutti i nominativi, quindi 1000000 di record, per trovare quello giusto.

Questo vale per qualsiasi database di tipo "file based", come lo è FireBird (limitatamente alla sua edizione "Embedded").

vicky
05-05-2006, 16:14
Ne deduco che non ci sia niente da fare se non cambiare la struttura dell'applicativo: cosa dovrei usare per accedere ai dati memorizzati sul database da qualsiasi computer presente nella rete locale? (parlo sempre di intranet)
Sparo: non potrebbe invece trattarsi di un problema di "permessi" di lettura da un computer all'altro? :)

alka
05-05-2006, 16:22
Originariamente inviato da vicky
Ne deduco che non ci sia niente da fare se non cambiare la struttura dell'applicativo: cosa dovrei usare per accedere ai dati memorizzati sul database da qualsiasi computer presente nella rete locale? (parlo sempre di intranet)

Dovresti installare FireBird SuperServer e modificare la configurazione della libreria dbExpress affinchè non usi la DLL "fbembed.dll" ma la DLL del client di FireBird, da installare su ogni macchina, cioè "fbclient.dll", e modificare il percorso del database affinchè contenga il nome del server a cui collegarsi e il percorso del file del database su quella macchina.

Non dovresti cambiare nient'altro, sia a livello di "logica" del programma, sia a livello di componenti, nulla di nulla.

In sostanza, devi solo fare uso del client vero e proprio di FireBird, non Embedded, per andare su un server invece di aprire un file in locale.


Originariamente inviato da vicky
Sparo: non potrebbe invece trattarsi di un problema di "permessi" di lettura da un computer all'altro? :)
Può darsi, però non rischierei comunque se la mole di dati da trasferire è ingente.

Vista l'esiguità delle modifiche, considerando gli enormi vantaggi che ci sono, io installerei FireBird Server, metterei il file del database su quella macchina e, sulle singole macchine, installando il client, farei accedere l'applicazione a quel DB modificandola così come indicato sopra.

Cerca in questo forum, perché ne abbiamo parlato in modo più approfondito.

Ciao! :ciauz:

vicky
08-05-2006, 17:30
Dovresti installare FireBird SuperServer... e modificare il percorso del database affinchè contenga il nome del server a cui collegarsi e il percorso del file del database su quella macchina.
Dov'è che devo modificare il percorso del database? Nel codice del programma il percorso è:

DBPath := ExtractFilePath(Application.ExeName) + 'DB\db1.fdb';
Devo forse agire a livello della registrazione del database con IBExpert ? :)

alka
08-05-2006, 17:37
Originariamente inviato da vicky
Dov'è che devo modificare il percorso del database? Nel codice del programma il percorso è:

DBPath := ExtractFilePath(Application.ExeName) + 'DB\db1.fdb';

Il percorso deve essere espresso in questo modo:


NOMESERVER:PERCORSODB

dove NOMESERVER designa l'indirizzo IP o il nome della macchina su cui risiede il file GDB/FDB a cui collegarsi, mentre PERCORSODB rappresenta il percorso del file GDB/FDB sul server stesso.

Ovviamente, sulla macchina server deve essere installato e in esecuzione FireBird SuperServer.


Originariamente inviato da vicky
Devo forse agire a livello della registrazione del database con IBExpert ? :)
No, le informazioni di registrazione presenti in IB Expert sono solo scorciatoie utili al solo tool di manipolazione dei database: non hanno alcuna relazione, attinenza o influenza con il mondo esterno, cioè non devi registrare un DB su IB Expert per poterlo vedere in Delphi, non c'entra nulla.

Ciao! :ciauz:

vicky
08-05-2006, 18:43
Ho provato a scrivere così:

DBPath:='Portatilevicky:'+ ExtractFilePath(Application.ExeName) + 'DB\bzpd.fdb';
E' giusto? Perché il computer in cui tento l'apertura del programma mi dice che non riconosce l'host PortatileVicky come appartenente al dominio. Potrei postare anche tutto il messaggio di errore se fosse necessario.

alka
08-05-2006, 19:03
Originariamente inviato da vicky
Ho provato a scrivere così:

DBPath:='Portatilevicky:'+ ExtractFilePath(Application.ExeName) + 'DB\bzpd.fdb';
E' giusto? Perché il computer in cui tento l'apertura del programma mi dice che non riconosce l'host PortatileVicky come appartenente al dominio. Potrei postare anche tutto il messaggio di errore se fosse necessario.
PortatileVicky è il nome della macchina su cui sta girando il server di FireBird?
La macchina deve essere ovviamente attiva e raggiungibile, altrimenti non è possibile stabilire la connessione. Per quanto riguarda, invece, il percorso del DB, nella maggior parte dei casi sarà fisso o comunque non determinato dal percorso dell'applicazione poiché quando la connessione avverrà su un altro PC che non è quello corrente, usare come riferimento il percorso dell'applicazione è inutile, visto che occorre indicare il percorso del file del DB sulla macchina a cui ci si collega. Al massimo, se si vuole parametrizzare in qualche modo l'impostazione, si potrà mettere in un file INI esterno o qualcosa del genere per poterlo caricare e usare, ma anche modificare con semplicità.

Ricordati che non puoi usare fbembed.dll: quella è la libreria che simula il server, è il server "embedded"; devi usare fbclient.dll oppure gds32.dll, due librerie che ottieni installando FireBird Server sulla tua macchina (selezionando solo i componenti client). Queste librerie sono quelle che materialmente possono dialogare con un server FB che può risiedere nella stessa macchina che usi o in una macchina differente.

Il nome della libreria va indicato nella proprietà VendorLib del componente SQLConnection.

Ciao! :ciauz:

Loading