Net-Base Rivista

11.04.2026

Sostituire Borland BDE con FireDAC: Guida per una modernizzazione sicura di Delphi senza Big Bang

Molte applicazioni Delphi esistenti utilizzano ancora la Borland Database Engine (BDE) – spesso stabile, ma con rischi crescenti per la distribuzione, il 64 bit, la sicurezza e una strategia di database moderna. Questo articolo mostra come le aziende possano sostituire la BDE in modo graduale e controllato con FireDAC...

11.04.2026

In molte aziende la Borland Database Engine (BDE) è ancora oggi parte di applicazioni Delphi critiche per il business: logiche di dominio cresciute nel tempo, accessi ai dati vicini all’interfaccia con TTable/TQuery, in parte ancora Paradox/dBase, in parte installazioni client/server più datate. Spesso la realtà è: il software funziona, gli utenti conoscono i processi e nelle attività quotidiane non c’è un motivo immediato per „toccare“ qualcosa. Contemporaneamente il substrato tecnico cambia: i sistemi operativi vengono rafforzati, il deployment viene standardizzato, il 64 bit è atteso e la conservazione dei dati dovrebbe avvenire su server di database con un concetto pulito di diritti e backup.

Proprio a questo punto „sostituire la Borland BDE con una soluzione di sostituzione della BDE con connettività nativa“ diventa un compito strategico di modernizzazione. BDE-Ablosung mit nativer Anbindung è, nelle versioni correnti di Delphi, l’accesso ai dati affermato per database moderni. Offre comportamento consistente, driver robusti, supporto Unicode, monitoring/tracing e un’architettura che può servire sia client desktop sia servizi e server REST. La migrazione raramente è un semplice scambio 1:1 dei componenti – in particolare quando l’applicazione esistente ha incorporato per anni comportamenti specifici della BDE (assunzioni sulle transazioni, formati dati, filtri/ordinamenti, Cached Updates, report third-party).

Questo articolo si concentra sull’approccio pratico: come sostituire la BDE con FireDAC senza mettere a rischio la logica di business e senza imporre un rilancio in stile big bang? Riceverete un modello attuabile, immagini tecniche di riferimento e indicazioni sulle zone problematiche tipiche nell’esercizio aziendale.

Perché oggi la sostituzione della BDE è più della sola manutenzione tecnica

Finché un’applicazione BDE funziona, una sostituzione sembra una semplice „pulizia del codice“. Nella pratica la pressione nasce però più spesso da temi operativi e di rischio.

Deployment, baseline di sicurezza e client „no-touch“

La BDE è storicamente pensata per una configurazione locale (BDE Administrator, definizioni di alias, NetDir, file di configurazione condivisi). In ambienti moderni i passaggi manuali e le impostazioni a livello di macchina sono difficilmente compatibili con distribuzione del software, hardening e verificabilità. FireDAC permette deployment molto più controllabili, perché i parametri di connessione e le impostazioni del driver possono essere gestiti vicino all’applicazione.

64 bit, modernizzazione di Windows e nuovi target di piattaforma

Quando un’applicazione deve girare in 64 bit (per requisiti di memoria, ecosistema driver/Office, nuovo hardware, strategie di Terminal Server), la BDE diventa di fatto un blocco. FireDAC supporta in modo coerente 32/64 bit ed è quindi un componente chiave di qualsiasi modernizzazione Delphi che non può fallire sul piano dell’accesso ai dati. Parallelamente diventano pianificabili tematiche come Windows 11 ARM64 e architetture ibride client/service.

Strategia di database: via dai file, verso server

Molte applicazioni BDE portano ancora eredità dai tempi di Paradox/dBase. Questi database file-based sono più vulnerabili in ambiente multiutente, più difficili da gestire amministrativamente per backup e non si adattano bene ai requisiti odierni (ruoli/permessi, crittografia, monitoring, alta disponibilità). FireDAC non è „il nuovo driver Paradox“, ma è l’accesso moderno a SQL Server, PostgreSQL, MariaDB e Firebird. Nella pratica la sostituzione della BDE è quindi spesso il segnale d’inizio per professionalizzare gestione dei dati e operatività.

Manutenibilità e capacità di diagnostica in esercizio

Un fattore di costo sottovalutato è l’investigazione degli errori: problemi di locking sporadici, comportamento incoerente dei cursori, conversioni di parametri difficili da tracciare o problematiche di rete/percorso. FireDAC, con logging, monitoring e un comportamento dei tipi più chiaro, offre punti di partenza migliori per analisi di errore riproducibili. Per le aziende che intendono esercire un’applicazione a lungo e ampliarla a punti, questo è un beneficio immediato.

BDE vs. FireDAC: differenze che contano nella migrazione

Sulla carta i componenti sono mappabili. Nella realtà si tratta di cambiamenti di comportamento che possono generare effetti collaterali sulla logica di business. Una rapida orientazione:

Mappatura dei componenti (come punto di partenza)

  • TDatabase (BDE) → TFDConnection (FireDAC)
  • TQuery (BDE) → TFDQuery
  • TTable (BDE) → TFDTable (nelle modernizzazioni spesso meglio: accesso basato su Query/View)
  • TStoredProc (BDE) → TFDStoredProc

Le differenze di comportamento più comuni

  • Parametri e tipi di dato: FireDAC lavora in modo più preciso. SQL del tipo „va bene così“ viene evidenziato più rapidamente (es. valori di data come stringhe, conversioni implicite, nullability poco chiara).
  • Transazioni: Il codice legacy spesso contiene assunzioni implicite di commit (chiusura del dataset, pattern simili a AutoCommit). Con FireDAC conviene una gestione esplicita delle transazioni, perché migliora la coerenza funzionale.
  • Cursor/Fetch: FireDAC ha default diversi e più leve di controllo. Pattern inefficienti (resultset grandi per liste UI) diventano più evidenti, ma possono essere ottimizzati in modo mirato.
  • Unicode: Nelle versioni moderne di Delphi Unicode è lo standard. La catena FireDAC (client-library, opzioni di connessione, collazione DB, tipi di campo) deve essere coerente, altrimenti si rischiano problemi di caratteri e confronti.
  • Deployment: A seconda del DB sono necessarie librerie client (es. libpq per PostgreSQL). Questo va pianificato per tempo per evitare sorprese in ambiente di produzione.

Immagine obiettivo per un’architettura FireDAC: stabile, testabile, estendibile

Una sostituzione della BDE non dovrebbe finire in un „FireDAC ovunque in modo casuale“. Un’immagine obiettivo solida è particolarmente preziosa se l’applicazione deve essere sviluppata ulteriormente o integrata in servizi/portali.

Obiettivo minimo: layer di connessione uniforme

Invece di connessioni sparse nei form è consigliabile un layer centrale di connessione:

  • Creazione e configurazione di TFDConnection in un unico punto
  • Timeout, encoding/CharacterSet, gestione errori uniformi
  • Switch tra Dev/Test/Prod senza interventi manuali
  • Opzionale: attivazione centrale di tracing/monitoring per diagnosi

Raccomandato: confini di transazione chiari nella logica di dominio

Molte applicazioni legacy distribuiscono le modifiche dati su eventi UI. Questo aumenta il rischio di aggiornamenti parziali e rende i test più complessi. Un approccio FireDAC stabile è: il caso d’uso (servizio/logica di dominio) avvia e termina la transazione, non l’interfaccia utente. Anche in un’applicazione desktop VCL pura si ottiene così un nucleo robusto, più facilmente riutilizzabile come servizio o API in seguito.

Estendibilità verso servizi e REST

Chi in seguito aggiungerà un server REST, gestirà servizi Windows o servizi Linux o collegherà un portale clienti, trarrà vantaggio da un data layer pulito. FireDAC è adatto a questo se il connection management, il trattamento degli errori e – a seconda del carico server – il pooling sono almeno considerati come obiettivi architetturali. Non è necessario implementarlo tutto al primo passo, ma l’architettura non dovrebbe impedirlo.

Strategia di migrazione: introdurre FireDAC gradualmente, smantellare la BDE con controllo

In contesti B2B un big bang è raramente realistico: troppi processi di business, troppa responsabilità operativa, scarsa accettazione per lunghi downtime. Di norma la strada sicura è una sostituzione graduale della BDE.

Fase 1: inventario e mappa dei rischi

Un inventario utile non conta solo i componenti ma valuta comportamenti e accoppiamenti:

  • Quali database sono utilizzati: Paradox/dBase, Firebird/InterBase, SQL Server, PostgreSQL, MariaDB?
  • Dove sono presenti accessi con TTable, dove viene usato SQL tramite TQuery, dove sono presenti stored procedure?
  • Come vengono gestite oggi le transazioni (esplicite, implicite, Cached Updates, pattern misti)?
  • Quali report/export si aspettano certe proprietà dei dataset (ordinamento, filtro, campi calcolati)?
  • Quali componenti di terze parti o framework interni sono specifici della BDE?

Dalla mappa risulta se la sostituzione riguarda „solo“ l’accesso o se parallelamente è sensato o necessario un rifacimento del database (es. Paradox → SQL Server/PostgreSQL/MariaDB).

Fase 2: fondazione FireDAC (senza cambiamento UI)

Prima di migrare le schermate, FireDAC dovrebbe essere posizionato tecnicamente in modo pulito:

  • DataModule centrale o classe di servizio con TFDConnection
  • Modello di configurazione per connection string (es. INI/JSON) e gestione sicura dei segreti
  • Gestione errori standardizzata (tradurre DB-Exceptions in messaggi comprensibili e loggabili)
  • Opzioni di tracing/monitoring per il pilot (attivabili in modo mirato, non costantemente „rumorose“)

È importante che da ciò emergano standard vincolanti: convenzioni di naming, regole per i parametri, schema di logging, impostazioni di default per ogni DB.

Fase 3: modulo pilota con reale rilevanza di business

Un buon modulo pilota è funzionalmente delimitato ma realmente usato. Obiettivo: sviluppare e verificare i pattern.

  • TQueryTFDQuery (inclusi parametrizzazione e tipizzazione)
  • Definire il perimetro transazionale e renderlo visibile nel codice
  • Dimostrare l’uguaglianza dei risultati (confrontare resultset rilevanti per il business)
  • Misurare le performance (tempi di risposta, carico DB, traffico di rete)

Alla fine del pilota dovrebbe esserci una checklist interna con cui migrare i moduli successivi. Questo riduce il rischio e rende il lavoro prevedibile.

Fase 4: migrazione estesa e pulizia del deployment

Dopo il pilota si procede modulo per modulo. Parallelamente la BDE viene rimossa come dipendenza operativa:

  • Rimuovere script di installer e documentazione sui setup BDE
  • Eliminare definizioni di alias, configurazioni NetDir e percorsi speciali
  • Allineare pipeline di build/release alle nuove dipendenze (client-libs, driver)

Proprio questa rimozione è essenziale: finché parti della BDE sopravvivono nel deployment, il rischio operativo rimane.

Trappole: cause frequenti di effetti collaterali funzionali

Molte migrazioni non falliscono per colpa di FireDAC, ma per assunzioni implicite nel codice legacy. Queste aree vanno priorizzate precocemente.

Dialetti SQL e SQL cresciuto storicamente

Le applicazioni BDE spesso contengono SQL che „casualmente“ funzionava con un certo driver: join impliciti, uso non uniforme di alias, funzioni specifiche del DB, ordinamenti non chiari. Nella migrazione vale:

  • Rendere l’SQL esplicito (sintassi JOIN invece di join impliciti nella WHERE)
  • Verificare parole riservate e identificatori (es. DATE, USER, ORDER come nomi di campo)
  • Uniformare o incapsulare funzioni di data/ora e stringa

FireDAC offre margini di adattamento, ma la soluzione realmente sostenibile è SQL conforme al DB e leggibile.

Mapping dei tipi: Boolean, Data/Ora, Memo/Blob, NULL

La BDE interpretava molto in modo permissivo. FireDAC è più preciso – il che è positivo, ma richiede regole. Temi tipici:

  • Boolean: BIT/SMALLINT/CHAR(1) – definire chiaramente a livello di dominio, evitare conversioni implicite
  • Data/Ora: DATETIME vs. DATETIME2, millisecondi, logiche di ordinamento/confronto; questioni di fusi orari in sistemi distribuiti
  • Memo/Blob: comportamento di fetch (OnDemand), encoding, consumo di memoria sul client
  • NULLability: Codice legacy che mescola stringhe vuote e NULL porta a errori logici poco visibili

Si è dimostrato efficace un catalogo snello dei tipi: per ogni tabella/colonna rilevante definire i tipi target (DB e Delphi) più le regole per NULL, valori di default e formattazioni.

Transazioni: da implicite a orchestrate consapevolmente

Nei progetti Delphi legacy è comune l’errore che il sistema si affidi a commit impliciti („se chiudo il dataset è salvato“). FireDAC offre API chiare (StartTransaction, Commit, Rollback). Il vantaggio di modernizzazione arriva quando le transazioni sono concepite come inquadramento funzionale:

  • Il caso d’uso avvia la transazione
  • Più aggiornamenti avvengono nella stessa Connection
  • Commit/Rollback avvengono in modo centrale con gestione errori tracciabile

Questo riduce incoerenze ed è cruciale se l’applicazione verrà poi ampliata con servizi o interfacce.

Cached Updates e gestione dei conflitti (concorrenza)

Molte applicazioni BDE utilizzano i Cached Updates come meccanismo di „modifica offline“. FireDAC può offrire meccaniche simili, ma le regole devono essere esplicite:

  • Quali campi sono chiave e quali servono per il controllo di concorrenza?
  • Come si risolvono i conflitti (RowVersion/Timestamp, „last write wins“, decisione utente)?
  • Cosa succede in caso di errori parziali in operazioni batch?

Nelle modernizzazioni spesso è sensato spostare la logica di risoluzione dei conflitti più vicino alla logica di dominio o in uno strato di servizio, invece di lasciarla nascosta nel comportamento dei dataset UI.

Applicazioni fortemente legate a TTable/Paradox: FireDAC non è l’unica area da considerare

Se l’applicazione è fortemente basata su accesso file-based (TTable contro Paradox), „sostituire la BDE con FireDAC“ è solo una parte della soluzione. FireDAC è pensato principalmente per database SQL. La decisione centrale allora è: la persistenza dati verrà modernizzata su un DB server?

  • Migrazione a SQL Server, PostgreSQL o MariaDB
  • Introduzione di ruoli/permessi e processi di backup/restore definiti
  • Funzionamento multiutente stabile senza problemi di file-locking

Se un cambio immediato di database non è fattibile per ragioni organizzative, un approccio in due fasi è spesso pragmatico: prima stabilizzare lo strato di accesso e ridurre l’accoppiamento con la UI, poi eseguire la migrazione dei dati con una strategia di test e cutover chiara.

Reporting, export e componenti di terze parti

I report spesso dipendono da dettagli: ordinamenti, ordine dei filtri, campi calcolati, comportamento master/detail. Per una migrazione controllata:

  • identificare i report critici e trattarli come una suite di test di regressione
  • generare record per i report in modo deterministico (views/stored procedures o query chiaramente definite)
  • ridurre le catene di filtri lato UI che dipendono dal comportamento del dataset

L’obiettivo è uguaglianza riproducibile dei risultati, specialmente per elaborazioni rilevanti ai fini di audit.

Aggiornamento architetturale durante la migrazione FireDAC: disaccoppiare in modo pragmatico

La sostituzione della BDE è un buon momento per estrarre l’accesso ai dati da form ed event handler. Questo non implica che sia necessario un completo re-architecture. Anche misure moderate producono spesso grandi benefici.

Struttura obiettivo pragmatica (collegabile ad un’architettura a 3 layer)

  • Connection/Unit-of-Work: gestisce Connection e transazione, fornisce oggetti Query
  • Repository/DAO: incapsula SQL e accesso ai dati per ambito funzionale
  • Service/Caso d’uso: orchestra la logica di dominio, le validazioni e il perimetro transazionale

Questa struttura è compatibile con una successiva Layer-3 Architektur e facilita progetti successivi: interfacce REST, servizi in background, client multipiattaforma o integrazione con portali.

Effetto importante: meno effetti collaterali globali

Molti progetti BDE lavorano con data module globali e stati impliciti. FireDAC può funzionare anche così, ma la modernizzazione è più stabile se gli stati sono localizzati: ciclo di vita chiaro per Connection/Transazione, percorsi di errore riproducibili, meno „effetti collaterali“ dovuti a stato globale.

Performance e stabilità: configurare FireDAC in modo mirato

FireDAC è potente, ma le performance sono il risultato di SQL, indicizzazione, strategia di fetch e gestione delle connessioni. Nelle migrazioni emerge spesso che la BDE aveva nascosto pattern inefficienti perché i volumi dati erano un tempo più piccoli o perché il sistema era eseguito in locale.

Strategie di fetch e liste UI

  • Caricare nelle liste solo le colonne necessarie (no SELECT *)
  • Ordinamento lato server e filtri mirati invece di catene client-side
  • Per grandi volumi: paging o caricamento incrementale
  • Campi LOB (Memo/Blob) caricarli solo quando realmente necessari

FireDAC offre opzioni adatte; la decisione cruciale è quali dati servono effettivamente all’utente nel contesto specifico.

Prepared Statements e parametrizzazione

Le query parametrizzate non sono solo uno standard di sicurezza (prevenire SQL injection), ma migliorano il riuso dei piani di esecuzione in molti DB. Inoltre mettono in luce incoerenze di tipo nel codice legacy che possono essere corrette in modo mirato. In sistemi maturi questo è un guadagno di qualità che si traduce in meno casi speciali e migliore diagnostica.

Gestione delle connessioni: Desktop vs. Service/REST

Nei classici client desktop una connection lunga per client è spesso praticabile. In servizi o server REST sono in uso pattern diversi: richieste di breve durata, accessi paralleli, connection-pooling. Chi vede la sostituzione della BDE come parte di una modernizzazione più ampia dovrebbe considerare queste differenze nell’immagine obiettivo, così che fasi successive non ricomincino da capo sul tema dell’accesso ai dati.

Strategia di test e accettazione: dimostrare uguaglianza dei risultati

Nella sostituzione della BDE il rischio principale raramente è „l’app non parte“, ma scostamenti funzionali sottili: ordinamenti, arrotondamenti, gestione di NULL, confini transazionali, effetti collaterali di trigger/constraint nei DB moderni. Una strategia di test robusta comprende:

  • Regressione SQL: eseguire query critiche contro dati di test definiti e confrontare i resultset
  • Test dei casi d’uso: verificare processi core (es. contabilizzazione, approvazione, storno, import/export) con valori attesi
  • Test multiutente/stabilità: comportamento di lock, deadlock, timeout, durata delle transazioni
  • Logging/Observability: catturare gli errori DB in modo strutturato (codici errore, contesto, query coinvolta), non solo con un „messaggio di errore“

Le aziende traggono doppio vantaggio: i test assicurano la migrazione e creano una base per rilasciare modifiche al modello dati o alle interfacce in modo controllato.

Database target nei progetti FireDAC: opzioni tipiche

FireDAC è deliberatamente ampio, ma ogni DB porta regole proprie. Nelle modernizzazioni le destinazioni più frequenti sono:

SQL Server

Tipico in ambienti IT dominati da Windows. Punti importanti: tipi Unicode coerenti (NVARCHAR), tipi temporali moderni (DATETIME2), strategia chiara per Identity/Sequence, livelli di isolamento definiti e gestione pulita dei lock.

PostgreSQL

Forte su integrità e feature. Nelle migrazioni rilevanti: case-sensitivity degli identificatori, tipi di dato (boolean/uuid/jsonb) e differenze di dialetto. FireDAC può connettere PostgreSQL in produzione se le librerie client e il deployment sono organizzati correttamente.

MariaDB/MySQL

Spesso scelto quando il software desktop si integra con componenti web o portali. Importante: usare utf8mb4 in modo coerente, InnoDB come motore, strategia di transazioni e indici ben definita. FireDAC supporta MariaDB/MySQL in modo affidabile se parametri e tipi sono chiari.

Indipendentemente dal target: una sostituzione della BDE è più stabile se parallelamente nascono standard di database (versioning dello schema, script di migrazione, ruoli/permessi, backup/restore, monitoring).

Raccomandazioni pratiche per una migrazione FireDAC pianificabile

Ridurre le dipendenze prima di cambiare massa di componenti

Se SQL e logica dei dataset sono disseminati in molti form, ogni modifica diventa costosa. Un passo intermedio che concentra l’SQL in poche classi di accesso riduce significativamente la superficie di migrazione. Dopodiché la sostituzione effettiva con FireDAC è spesso più rapida e meno rischiosa.

Migrare presto un processo transazionale chiave

„Liste semplici“ sono comode per iniziare, ma riduce il rischio migrare presto un processo con veri aggiornamenti e dipendenze. Se transazioni, tipi e percorsi di errore sono ben gestiti lì, il resto della migrazione diventa più prevedibile.

Trattare il deployment come lavoro di pari livello

La modifica del codice è solo metà dell’opera. Chiarire presto:

  • Quali client-libraries/driver servono per ogni database?
  • Come vengono versionati, firmati (se rilevante) e distribuiti?
  • Come vengono gestiti i parametri di connessione e chi li può modificare?
  • Come funziona il processo di supporto quando gli accessi DB falliscono?

Usare FireDAC come perno di modernizzazione – senza ripartire da zero

La sostituzione è un’opportunità per leve qualitative mirate: parametrizzazione, confini transazionali, logging, testi di errore uniformi. Questo riduce i costi operativi e rende ampliamenti futuri (interfacce, servizi) molto meno rischiosi, senza reinventare la logica funzionale dell’applicazione.

Conclusione: la sostituzione della BDE con FireDAC è una modernizzazione controllabile – se affrontata come tema di architettura

La BDE ha sostenuto molte applicazioni Delphi per anni. Oggi però rappresenta un rischio strutturale: per il 64 bit, per il deployment standardizzato, per i requisiti di sicurezza moderni e per l’integrazione con database attuali. FireDAC è l’erede adatto, ma non come „scambio di componenti da un giorno all’altro“. La strada sicura è una migrazione graduale con una foundation pulita, un modulo pilota, regole vincolanti per i tipi di dato e le transazioni e test che dimostrino l’uguaglianza dei risultati.

Se volete pianificare in modo strutturato la sostituzione della BDE – inclusa l’analisi dell’esistente, il percorso di migrazione e l’architettura target FireDAC – il passo successivo più sensato è un allineamento tecnico delle vostre condizioni quadro: https://net-base-software-gmbh.de/kontakt/