Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [Delphi&Firebird] Accesso database in rete

    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

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,462
    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
    codice:
    nome del server:<percorso file .fdb riferito al server>
    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    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...


  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,462
    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!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    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


  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,462
    Originariamente inviato da AlbertoPicca
    quelle librerie IB, ma passerò a dbExpress!
    Con le librerie IBX è possibile sfruttare FireBird Embedded??

    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!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.