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

Dal tema della rivista alla pratica di progetto

Pagine di servizi e tecniche correlate all'articolo

Video-Botschaft

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

Kurz erklärt, warum die BDE im Betrieb zum Risiko wird und wie FireDAC schrittweise eingeführt werden kann, ohne einen Big-Bang-Relaunch zu erzwingen.

Video mit KI erstellt

Transkript anzeigen

Hallo, ich bin Mark. Die meisten BDE-Anwendungen scheitern nicht am Code, sondern am Betrieb.

Im Beitrag „Borland BDE durch FireDAC ersetzen: Leitfaden für eine sichere Delphi-Modernisierung ohne Big Bang“ geht es genau darum. Die BDE wirkt oft stabil.

Aber sie passt schlecht zu gehärteten Windows-Setups, standardisiertem Deployment und 64‑Bit. Genau dort entstehen Audit- und Support-Risiken.

FireDAC ist der moderne Datenzugriff in Delphi. Er bringt konsistente Treiber, sauberes Logging für Fehlersuche und funktioniert in 32 und 64 Bit.

Wichtig ist die Perspektive: Nicht „Komponenten tauschen“, sondern Schritt für Schritt vorgehen. Erst eine stabile Verbindungsschicht, dann ein Pilotmodul, dann die Fläche.

So bleibt die Fachlogik geschützt. Wenn Sie dazu Fragen aus Ihrem Betrieb haben, lassen Sie uns das in Ruhe einordnen.

Wenn du dazu Fragen hast oder tiefer einsteigen willst, melde dich gern bei uns.

In molte aziende la Borland Database Engine (BDE) è ancora oggi parte integrante di applicazioni critiche per il business Delphi: logica di dominio cresciuta nel tempo, accessi ai dati vicini alla UI con TTable/TQuery, in parte ancora Paradox/dBase, in parte prime installazioni Client/Server. Spesso la realtà è questa: il software funziona, gli utenti conoscono i processi e nell’operatività quotidiana non c’è un motivo immediato per «toccare qualcosa». Contemporaneamente cambia il sottofondo tecnico: i sistemi operativi vengono irrigiditi, il deployment viene standardizzato, il 64 bit è atteso e la gestione dei dati deve avvenire su server di database con un concetto chiaro di permessi e backup.

Proprio qui la frase «Sostituire Borland BDE con una BDE-Ablösung mit nativer Anbindung» diventa un compito strategico di modernizzazione. BDE-Ablosung mit nativer Anbindung è, nelle versioni correnti di Delphi, l’accesso ai dati consolidato per database moderni. Fornisce comportamento consistente, driver robusti, supporto Unicode, monitoring/tracing e un’architettura che può servire sia client desktop sia servizi e server REST. Il passaggio però raramente è un semplice scambio 1:1 di componenti – in particolare quando l’applicazione esistente ha «prezzato» per anni comportamenti specifici di BDE (assunzioni sulle transazioni, formati dati, filtri/ordinamenti, Cached Updates, report di terze parti).

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

Perché oggi la sostituzione di BDE è più che manutenzione tecnica

Finché un’applicazione BDE funziona, una sua sostituzione sembra un semplice «riordino del codice». Nella pratica la pressione proviene però spesso da temi operativi e di rischio.

Deployment, baseline di sicurezza e client «no-touch»

BDE è storicamente progettata per configurazioni locali (BDE Administrator, definizioni Alias, NetDir, file di configurazione condivisi). In ambienti moderni i passi manuali e le impostazioni a livello macchina sono difficilmente compatibili con distribuzione software, hardening e auditabilità. FireDAC consente deployment molto più controllabili, perché parametri di connessione e impostazioni dei driver possono essere gestiti vicino all’applicazione.

64‑Bit, modernizzazione Windows e nuovi target di piattaforma

Quando un’applicazione deve girare in 64‑bit (esigenze di memoria, ecosistema driver/Office, nuovo hardware, strategie Terminal Server), BDE diventa di fatto un blocco. FireDAC supporta 32/64‑bit in modo coerente ed è quindi un elemento fondamentale di ogni modernizzazione Delphi Modernisierung che non debba fallire sul piano dell’accesso ai dati. Parallelamente si rendono pianificabili temi come Windows 11 ARM64 e architetture ibride client/service.

Strategia di database: dalla gestione file a server dedicati

Molte applicazioni BDE portano ancora debiti tecnici dai tempi di Paradox/dBase. Questi database basati su file sono più vulnerabili in ambienti multiutente, più difficili da mettere in sicurezza amministrativamente e poco adatti ai requisiti odierni (ruoli/permessi, cifratura, monitoring, alta disponibilità). FireDAC non è «il nuovo driver Paradox», ma l’accesso moderno a SQL Server, PostgreSQL, MariaDB e Firebird. Nella pratica la sostituzione di BDE è quindi spesso il segnale d’avvio per professionalizzare la gestione dei dati e l’operatività.

Mantenibilità e capacità diagnostica in esercizio

Un fattore di costo sottovalutato è l’investigazione dei guasti: problemi di locking sporadici, comportamento dei cursori incoerente, conversioni di parametri difficili da ricostruire o problemi di rete/percorso. FireDAC offre con logging, monitoring e un tipaggio più chiaro punti di partenza migliori per analisi riproducibili. Per aziende che intendono gestire a lungo termine un’applicazione e ampliarla puntualmente, questo è un beneficio immediato.

BDE vs. FireDAC: differenze che contano nella migrazione

Sulla carta i componenti si possono mappare. Nella realtà si tratta di cambi di comportamento che possono avere effetti collaterali funzionali. Una breve orientazione:

Mappatura dei componenti (punto di partenza)

  • TDatabase (BDE) → TFDConnection (FireDAC)
  • TQuery (BDE) → TFDQuery
  • TTable (BDE) → TFDTable (nelle modernizzazioni spesso preferibile: accesso basato su query/view)
  • TStoredProc (BDE) → TFDStoredProc

Le differenze di comportamento più comuni

  • Parametri e tipi di dato: FireDAC è più preciso. SQL del tipo «funzionerà comunque» emergono prima (es. valori data come stringhe, conversioni implicite, nullability non chiara).
  • Transazioni: il codice legacy spesso contiene assunzioni di commit implicito (chiudere il dataset, pattern simili ad AutoCommit, Cached Updates). Con FireDAC conviene una gestione consapevole delle transazioni, perché migliora la coerenza funzionale.
  • Cursor/Fetch: FireDAC ha default diversi e più leve di configurazione. Pattern inefficienti (grandi resultset per liste UI) diventano più visibili, ma possono essere ottimizzati in modo mirato.
  • Unicode: nelle versioni moderne di Delphi Unicode è lo standard. La catena FireDAC (libreria client, opzioni di connessione, collation DB, tipi di campo) deve essere coerente, altrimenti si rischiano problemi di caratteri e di confronto.
  • Deployment: a seconda del DB sono necessarie librerie client (es. libpq per PostgreSQL). Questo va pianificato per tempo, altrimenti emergono sorprese in fase produttiva.

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

Una sostituzione di BDE non dovrebbe degenerare in un «FireDAC ovunque e in qualunque modo». Un’immagine obiettivo sostenibile è particolarmente preziosa se l’applicazione verrà ulteriormente sviluppata o integrata in servizi/portali.

Obiettivo minimo: layer di connessione unificato

Invece di connessioni distribuite nei form è consigliabile un layer centrale di connection:

  • Creazione e configurazione di TFDConnection in un unico punto
  • Timeout, Encoding/CharacterSet, gestione errori unificati
  • Commutazione Dev/Test/Prod senza interventi manuali
  • Opzionale: attivazione centrale di tracing/monitoring per diagnostica

Raccomandato: confini di transazione chiari nella logica di dominio

Molte applicazioni legacy distribuiscono le modifiche dei dati su eventi UI. Questo aumenta il rischio di aggiornamenti parziali e complica i test. Un approccio stabile con FireDAC è che il caso d’uso (service/logica di dominio) avvii e chiuda la transazione, non la UI. Anche in una VCL-Desktop pura si ottiene così un nucleo robusto che più tardi può essere riutilizzato come service o API.

Scalabilità verso servizi e REST

Chi in seguito aggiunge un REST-Server, gestisce servizi Windows o Linux o collega un Kundenportal, trae vantaggio da un data layer pulito. FireDAC è adatto se la gestione delle connection, il trattamento degli errori e – a seconda del carico del server – il pooling sono pensati almeno come obiettivo architetturale. Non è necessario implementarlo tutto al primo passo, ma l’architettura non dovrebbe bloccarne l’evoluzione.

Strategia di migrazione: introdurre FireDAC gradualmente, smantellare BDE in modo controllato

In contesti B2B un Big Bang raramente è realistico: troppi processi di dominio, molte responsabilità operative, bassa accettazione per downtime prolungati. Una sostituzione graduale di BDE è in genere la via più sicura.

Fase 1: inventario e mappatura dei rischi

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

  • Quali database sono utilizzati: Paradox/dBase, Firebird/InterBase, SQL Server, PostgreSQL, MariaDB?
  • Dove sono accessi TTable, dove si usa SQL tramite TQuery, dove sono Stored Procedures?
  • Come vengono gestite oggi le transazioni (esplicite, implicite, Cached Updates, pattern misti)?
  • Quali report/export si aspettano proprietà particolari dei dataset (ordinamento, filtri, campi calcolati)?
  • Quali componenti di terze parti o framework proprietari dipendono da BDE?

Da questa mappa risulta se la sostituzione riguarda «solo» l’accesso o se parallelamente è sensato o necessario un rifacimento della base dati (es. Paradox → SQL Server/PostgreSQL/MariaDB).

Fase 2: fondazione FireDAC (senza cambiare la UI)

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

  • DataModule centrale o classe service con TFDConnection
  • Modello di configurazione per connection string (es. INI/JSON) e gestione dei segreti
  • Gestione degli errori standardizzata (convertire DB-Exceptions in messaggi comprensibili e loggabili)
  • Opzioni di tracing/monitoring per ambiente pilota (attivabili in modo mirato, non permanentemente «rumorose»)

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

Fase 3: modulo pilota con rilevanza funzionale reale

Un buon pilota è delimitato funzionalmente ma effettivamente utilizzato. Obiettivo: sviluppare e verificare pattern.

  • TQueryTFDQuery (incl. parametrizzazione e tipizzazione)
  • Definire il perimetro di transazione e renderlo visibile nel codice
  • Dimostrare parità di risultati (confrontare resultset rilevanti per il dominio)
  • Misurare le performance (tempi di risposta, carico DB, traffico di rete)

Al termine del pilota dovrebbe esistere una checklist interna in base alla quale migrare ogni ulteriore modulo. Questo riduce il rischio e rende lo sforzo pianificabile.

Fase 4: migrazione estesa e pulizia del deployment

Dopo il pilota si procede per moduli. Parallelamente si smantella BDE come dipendenza operativa:

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

Questo smantellamento è cruciale: finché parti di BDE sopravvivono nel deployment, il rischio operativo permane.

Trappole: cause frequenti di effetti collaterali funzionali

Molte migrazioni falliscono non per FireDAC, ma per assunzioni implicite nel codice legacy. Queste aree vanno prioritarizzate presto.

Dialetti SQL e SQL cresciuto storicamente

Le applicazioni BDE spesso contengono SQL che funzionava «per caso» con un driver specifico: join impliciti, uso incoerente di alias, funzioni DB-specifiche, ordinamenti non deterministici. Nella migrazione vale:

  • Rendere l’SQL esplicito (JOIN invece di condizioni WHERE implicite)
  • Verificare parole riservate e identificatori (es. DATE, USER, ORDER come nomi di campo)
  • Unificare o incapsulare funzioni di data/ora e stringhe

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

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

BDE in pratica interpretava molto. FireDAC è più preciso – il che è un bene, ma richiede regole. Temi tipici:

  • Booleano: BIT/SMALLINT/CHAR(1) – definire chiaramente a livello funzionale, evitare conversioni implicite
  • Data/Ora: DATETIME vs. DATETIME2, millisecondi, logica di ordinamento/confronto; questioni di fuso orario in sistemi distribuiti
  • Memo/Blob: comportamento di fetch (OnDemand), encoding, consumo di memoria lato client
  • NULLability: codice legacy che mescola stringhe vuote e NULL genera errori logici difficili da vedere

È consolidata la pratica di un catalogo snello dei tipi: per ciascuna tabella/colonna rilevante definire i tipi obiettivo (DB e Delphi) più regole su NULL, valori default e formattazioni.

Transazioni: da implicite a orchestrate consapevolmente

Nei progetti legacy con Delphi è comune che il sistema abbia fatto affidamento su commit impliciti («quando chiudo il dataset è salvato»). FireDAC offre API chiare (StartTransaction, Commit, Rollback). Il vantaggio di modernizzazione si ottiene quando le transazioni sono intese come cornice funzionale:

  • Il caso d’uso avvia la transazione
  • Diversi update avvengono nella stessa Connection
  • Commit/Rollback avvengono in modo centrale con gestione degli errori tracciabile

Questo riduce le incoerenze ed è cruciale se in seguito l’applicazione verrà estesa con servizi o interfacce.

Cached Updates e gestione dei conflitti (concurrency)

Molte applicazioni BDE usano Cached Updates come meccanismo di «editing offline». FireDAC può fornire funzionalità analoghe, ma le regole devono essere esplicite:

  • Quali campi sono chiave, quali servono per la verifica della concurrency?
  • Come vengono risolti i conflitti (RowVersion/Timestamp, «last write wins», scelta dell’utente)?
  • Che succede in caso di errori parziali in operazioni batch?

In molte modernizzazioni è sensato portare la logica di risoluzione dei conflitti più vicino alla logica di dominio o in uno strato service, invece di lasciarla nascosta nel comportamento del dataset UI.

Applicazioni fortemente legate a TTable/Paradox: FireDAC non è l’unico problema

Se l’applicazione è fortemente basata su accessi file-based (TTable su Paradox), dire «sostituiamo BDE con FireDAC» racconta solo una parte della verità. FireDAC è pensato primariamente per DB SQL. La decisione centrale allora è: si modernizza la persistenza passando a un DB server?

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

Se un cambio immediato del DB 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 migrare i dati con una strategia chiara di test e cutover.

Reporting, export e componenti di terze parti

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

  • identificare report critici e trattarli come suite di test di regressione
  • generare dataset per report in modo deterministico (view/stored procedure o query chiaramente definite)
  • ridurre catene di filtri lato UI che dipendono dal comportamento implicito del dataset

L’obiettivo è la parità di risultati riproducibile, in particolare per valutazioni soggette ad audit.

Aggiornamento architetturale durante la migrazione FireDAC: disaccoppiare in modo pragmatico

La sostituzione di BDE è un buon momento per estrarre l’accesso ai dati da form ed event handler. Questo non significa che sia necessario un completo progetto di re-architecture. Anche misure moderate spesso producono grande impatto.

Struttura obiettivo pragmatica (collegabile a una Layer-3-Architektur)

  • Connection/Unit-of-Work: gestisce Connection e transazione, fornisce oggetti Query
  • Repository/DAO: incapsula SQL e accesso ai dati per ambito funzionale
  • Service/Use Case: orchestra logica di dominio, validazioni e perimetro transazionale

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

Effetto rilevante: meno effetti collaterali globali

Molti progetti BDE lavorano con data module globali e stati impliciti. FireDAC può funzionare anche in questo modo, ma la modernizzazione è più stabile se gli stati vengono localizzati: ciclo di vita chiaro di Connection/Transazione, percorsi di errore riproducibili, meno «side-effect» da stato globale.

Performance e stabilità: configurare FireDAC in modo mirato

FireDAC è performante, ma le prestazioni sono una combinazione di SQL, indicizzazione, strategia di fetch e gestione delle connection. Nelle migrazioni spesso emerge che BDE aveva di fatto nascosto pattern inefficienti, perché i volumi dati un tempo erano inferiori o il sistema girava localmente.

Strategie di fetch e liste UI

  • Caricare solo le colonne necessarie nelle liste (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 effettivamente necessari

FireDAC fornisce opzioni adeguate; la decisione funzionale su quali dati servono all’utente in ogni contesto è però fondamentale.

Prepared Statements e parametrizzazione

Le query parametrizzate non sono solo uno standard di sicurezza (evitare SQL-Injection), ma migliorano in molti DB il riuso del piano di esecuzione. Inoltre espongono l’imprecisione di tipo nel codice legacy che può essere corretta. In sistemi cresciuti nel tempo questo è un miglioramento qualitativo che si traduce in meno casi speciali e diagnosi migliori.

Gestione delle connection: Desktop vs. Service/REST

Nei client desktop classici è spesso praticabile una Connection lunga per client. In servizi o server REST sono invece usuali pattern diversi: richieste brevi, accessi paralleli, connection-pooling. Chi vede la sostituzione di BDE come parte di una modernizzazione più ampia dovrebbe considerare queste differenze nell’immagine obiettivo, così le fasi successive non devono ricominciare da capo l’accesso ai dati.

Strategia di test e collaudo: dimostrare la parità dei risultati

Nella sostituzione di BDE il rischio principale raramente è «l’applicazione non si avvia», ma piuttosto deviazioni funzionali silenziose: ordinamenti, arrotondamenti, gestione di NULL, confini transazionali, effetti collaterali di trigger/constraint nei DB moderni. Una strategia di test solida include:

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

Le aziende traggono beneficio doppio: i test mettono al sicuro la migrazione e creano una base che permette di distribuire in modo controllato futuri cambiamenti al modello dati o alle interfacce.

Database target nei progetti FireDAC: opzioni tipiche

FireDAC è volutamente ampio, ma ogni database porta regole proprie. Nelle modernizzazioni sono frequenti i seguenti target:

SQL Server

Tipico nelle IT dominata da Windows. Punti importanti: tipi Unicode coerenti (NVARCHAR), tipi temporali moderni (DATETIME2), strategia chiara per Identity/Sequence, isolation level definiti e gestione attenta dei lock.

PostgreSQL

Forte su integrità e feature. Nelle migrazioni è rilevante: 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 collabora con componenti web o portal. Importante: utf8mb4 coerente, InnoDB come motore, strategia di transazioni e indici ben definita. FireDAC supporta MariaDB/MySQL in modo affidabile se parametri e tipi sono chiariti.

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

Raccomandazioni pratiche per una migrazione FireDAC pianificabile

Ridurre le dipendenze prima di cambiare in massa i componenti

Se SQL e logica dei dataset sono incastrati 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. Successivamente la transizione a FireDAC è spesso più rapida e meno rischiosa.

Migrare presto un processo transazionale centrale

«Liste semplici» sono comode come punto d’entrata, ma riducono il rischio migrare presto un processo con veri aggiornamenti e dipendenze. Se lì transazioni, tipi e percorsi di errore sono sistematici, il resto della migrazione diventa più prevedibile.

Trattare il deployment come lavoro di pari dignità

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

  • Quali librerie client/driver servono per ogni DB?
  • Come verranno versionate e firmate (se rilevante) e distribuite?
  • Come verranno gestiti i parametri di connessione e chi può modificarli?
  • Quale processo di supporto esiste in caso di errori di accesso al DB?

Usare FireDAC come leva di modernizzazione – senza ricominciare da zero

La sostituzione è un’opportunità per interventi mirati sulla qualità: parametrizzazione, confini transazionali, logging, testi di errore coerenti. Questo riduce i costi operativi e rende ampliamenti futuri (interfacce, servizi) molto meno rischiosi, senza reinventare la logica applicativa.

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

BDE ha sostenuto molte applicazioni Delphi per anni. Oggi tuttavia rappresenta un rischio strutturale: per il 64‑bit, per un deployment standardizzato, per i requisiti di sicurezza moderni e per il collegamento a database attuali. FireDAC è il successore adeguato, ma non come «scambio di componenti da una notte all’altra». La via sicura è una migrazione graduale con una foundation pulita, un modulo pilota, regole vincolanti su tipi e transazioni e test che dimostrino la parità dei risultati.

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

Passo successivo

Quando un tema diventa un progetto reale, architettura, sistemi esistenti e gestione operativa dovrebbero essere considerati insieme fin dalle fasi iniziali.

Non forniamo solo supporto per questioni isolate, ma anche quando da frammenti di codice sorgente, tematiche legacy o idee di portale deve nascere un progetto aziendale solido.

  • Stato attuale, stato obiettivo e rischi tecnici vengono valutati insieme.
  • REST, l'accesso ai dati, i portali e il rollout non vengono rinviati a fasi successive.
  • Vede in anticipo quale percorso è economicamente e operativamente sostenibile.

Condividi il post

Condividi direttamente questo articolo

LinkedIn, X, XING, Facebook, WhatsApp e e-mail sono immediatamente disponibili. Per Instagram prepariamo direttamente il link e un breve testo.

E-mail

Instagram si apre in una nuova scheda. Il link e il breve testo vengono copiati prima negli appunti.