Net-Base Magasin

11.04.2026

Ersätta Borland BDE med FireDAC: En vägledning för en säker modernisering av Delphi utan Big Bang

Många befintliga Delphi-applikationer använder fortfarande Borland Database Engine (BDE) – ofta stabil, men med ökande risker vid distribution, 64‑bit, säkerhet och modern databasstrategi. Denna artikel visar hur företag stegvis och kontrollerat kan ersätta BDE med FireDAC...

11.04.2026

I många företag är Borland Database Engine (BDE) fortfarande en del av affärskritiska Delphi-applikationer: upparbetad affärslogik, UI-nära dataåtkomster med TTable/TQuery, delvis fortfarande Paradox/dBase, delvis tidiga klient-/serverinstallationer. Ofta är verkligheten denna: Mjukvaran fungerar, användarna kan processerna, och i det dagliga arbetet finns ingen omedelbar anledning att „röra något“. Samtidigt förändras den tekniska underliggande miljön: operativsystem hårdas, distribution standardiseras, 64‑Bit förväntas och datalagring bör ske på databasserverar med tydliga åtkomsträttigheter och backup‑koncept.

Precis här blir „att ersätta Borland BDE med en BDE-avveckling med native-anslutning“ en strategisk moderniseringsuppgift. BDE-Ablosung mit nativer Anbindung är i aktuella Delphi‑versioner den etablerade dataåtkomsten för moderna databaser. Det ger konsekvent beteende, robusta drivrutiner, Unicode‑stöd, övervakning/spårning och en arkitektur som kan betjäna både skrivbordsklienter, tjänster och REST‑servrar. Övergången är dock sällan bara en 1:1‑komponentväxling – särskilt inte om den befintliga applikationen över år har „inprisat“ BDE‑specifikt beteende (transaktionsantaganden, dataformat, filter/sorteringar, Cached Updates, tredjepartsrapporter).

Detta inlägg fokuserar det praktiska förfarandet: Hur ersätter ni BDE med FireDAC utan att äventyra affärslogiken och utan att tvinga fram en storskalig omstart? Du får en genomförbar modell, tekniska målbilder och anvisningar för typiska problemzoner i drift.

Varför BDE‑avvecklingen idag är mer än tekniskt underhåll

Så länge en BDE‑applikation fungerar kan en avveckling verka som ren „kodstädning“. I praktiken uppstår trycket dock ofta från drifts‑ och riskfrågor.

Deployment, Security‑Baselines och „No‑Touch“‑klienter

BDE är historiskt utformat för lokal konfiguration (BDE Administrator, alias‑definitioner, NetDir, delade konfigurationsfiler). I moderna miljöer är manuella steg och maskinomfattande inställningar svåra att förena med mjukvarudistribution, hårdning och reviderbarhet. FireDAC tillåter betydligt mer kontrollerbara deployment‑mönster eftersom anslutningsparametrar och drivrutinsinställningar kan hanteras applikationsnära.

64‑Bit, Windows‑modernisering och nya plattforms mål

Senast när en applikation måste köras i 64‑Bit (minnesbehov, drivrutins/Office‑ekosystem, ny hårdvara, terminalserverstrategier) blir BDE i praktiken en blockerare. FireDAC stödjer 32/64‑Bit konsekvent och är därmed en kärnkomponent i varje Delphi‑modernisering som tekniskt inte får misslyckas på dataåtkomstnivån. Vid sidan av blir ämnen som Windows 11 ARM64 och hybrida klient/tjänst‑arkitekturer överhuvudtaget planbara på ett tydligare sätt.

Databasstrategi: från filbaserat till serverbaserat

Många BDE‑applikationer bär fortfarande kvar skulder från Paradox/dBase‑tiden. Dessa fildatabaser är i fleranvändarmiljöer mer sårbara, svårare att administrera och passar illa för dagens krav (roller/rättigheter, kryptering, övervakning, hög tillgänglighet). FireDAC är inte „den nya Paradox‑drivrutinen“, men det är den moderna vägen till SQL Server, PostgreSQL, MariaDB och Firebird. I praktiken är BDE‑avvecklingen därför ofta startskottet för att professionalisera datalagring och drift.

Underhållbarhet och diagnostik i drift

En underskattad kostnadsfaktor är felsökning: sporadiska låsproblem, inkonsekvent cursor‑beteende, svårföljda parameterkonverteringar eller nätverks/‑sökvägsproblem. FireDAC erbjuder med logging, monitoring och tydligare typbeteende bättre förutsättningar för reproducerbar felanalys. För företag som avser att driva en applikation långsiktigt och utöka punktvis är detta ett omedelbart värde.

BDE vs. FireDAC: skillnader som räknas vid migrering

Papperet tillåter komponentmappning. I verkligheten handlar det om beteendeförändringar som kan ge affärsmässiga sidoeffekter. En kort orientering:

Komponentkartläggning (som startpunkt)

  • TDatabase (BDE) → TFDConnection (FireDAC)
  • TQuery (BDE) → TFDQuery
  • TTable (BDE) → TFDTable (i moderniseringar ofta bättre: query-/view‑baserad åtkomst)
  • TStoredProc (BDE) → TFDStoredProc

De vanligaste beteendedifferenserna

  • Parametrar och datatyper: FireDAC arbetar mer precist. „Det går nog“‑SQL upptäcks snabbare (t.ex. datumvärden som strängar, implicit konvertering, otydlig nullbarhet).
  • Transaktioner: Legacy‑kod innehåller ofta implicita commit‑antaganden (dataset stängs, AutoCommit‑liknande mönster, Cached Updates). Med FireDAC lönar det sig att styra transaktioner medvetet eftersom det förbättrar affärskonsistens.
  • Cursor/Fetch: FireDAC har andra default‑värden och fler justeringsmöjligheter. Ineffektiva mönster (stora resultatuppsättningar för UI‑listor) blir mer synliga men kan optimeras målinriktat.
  • Unicode: I moderna Delphi‑versioner är Unicode standard. FireDAC‑kedjan (client‑library, connection‑options, DB‑collation, fälttyper) måste vara konsekvent, annars riskerar tecken‑ och jämförelseproblem.
  • Deployment: Beroende på DB krävs klientbibliotek (t.ex. libpq för PostgreSQL). Det måste planeras i god tid, annars uppstår produktionsnära överraskningar.

Målbild för en FireDAC‑arkitektur: stabil, testbar, utbyggbar

En BDE‑avveckling bör inte sluta i „FireDAC överallt hur som helst“. En hållbar målbilder är särskilt värdefull när applikationen ska vidareutvecklas eller bäddas in i tjänster/portaler.

Minimummål: enhetligt anslutningslager

Istället för spridda anslutningar i formulär rekommenderas ett centralt anslutningslager:

  • Skapande och konfiguration av TFDConnection på ett ställe
  • Enhetliga timeouts, encoding/characterSet, felhantering
  • Växling Dev/Test/Prod utan manuellt efterarbete
  • Valfritt: central aktivering av tracing/monitoring för diagnosfall

Rekommenderat: tydliga transaktionsgränser i affärslogiken

Många äldre applikationer sprider datändringar över UI‑events. Det ökar risken för delvisa uppdateringar och försvårar tester. Ett stabilt FireDAC‑ansats är: Use Case (tjänst/affärslogik) startar och avslutar transaktionen, inte UI. Även i ren VCL‑desktopmjukvara ger detta en robust kärna som senare lättare kan nyttjas som tjänst eller API.

Utbyggnadsbar mot tjänster och REST

Den som senare kompletterar med en REST‑server, kör Windows‑ eller Linux‑tjänster eller kopplar ett kundportal tjänar på ett rent datalager. FireDAC är lämpligt för detta om connection‑management, felhantering och – beroende på serverlast – pooling åtminstone finns med som målbilder. Det behöver inte implementeras i första steget men bör inte låsa arkitekturen.

Migrationsstrategi: inför FireDAC stegvis, avveckla BDE kontrollerat

I B2B‑miljöer är en Big‑Bang sällan realistisk: för många affärsprocesser, för stort driftansvar, för låg acceptans för långa driftstopp. En stegvis BDE‑avveckling är i regel den säkrare vägen.

Fas 1: Inventering och riskkarta

En användbar inventering räknar inte bara komponenter utan bedömer beteende och kopplingar:

  • Vilka databaser används: Paradox/dBase, Firebird/InterBase, SQL Server, PostgreSQL, MariaDB?
  • Var förekommer TTable‑åtkomster, var används SQL via TQuery, var används stored procedures?
  • Hur hanteras transaktioner idag (explicit, implicit, Cached Updates, blandade mönster)?
  • Vilka rapporter/exporter förväntar sig särskilda dataset‑egenskaper (sortering, filter, beräknade fält)?
  • Vilka tredjepartskomponenter eller egna ramverk är BDE‑specifika?

Utifrån denna karta framgår om avvecklingen „bara“ rör åtkomstskiktet eller om en parallell databasombyggnad (t.ex. Paradox → SQL Server/PostgreSQL/MariaDB) är lämplig eller nödvändig.

Fas 2: FireDAC‑foundation (utan UI‑omställning)

Innan ni migrerar skärmar bör FireDAC stå tekniskt stadigt:

  • Centralt DataModule eller serviceklass med TFDConnection
  • Konfigurationsmodell för connection‑strings (t.ex. INI/JSON) och ordnad hantering av hemligheter
  • Standardiserad felhantering (DB‑exceptions översätts till begripliga, loggbara meddelanden)
  • Tracing/monitoring‑alternativ för pilotdrift (aktiverbart selektivt, inte konstant „högljutt“)

Viktigt är att detta mynnar ut i bindande standarder: namngivningskonventioner, parameterregler, logging‑schema, default‑inställningar per databas.

Fas 3: Pilotmodul med verklig affärsrelevans

Ett bra pilotområde är funktionellt avgränsat men i verklig användning. Målet: utveckla och verifiera mönster.

  • TQueryTFDQuery (inkl. parameterisering och typning)
  • Definiera transaktionsramar och gör dem synliga i koden
  • Visa resultatlikhet (jämför affärsmässigt relevanta resultatuppsättningar)
  • Mät prestanda (svarstider, DB‑last, nätverkstrafik)

I slutet av piloten bör en intern checklista finnas som styr fortsatt migration per modul. Det minskar risk och gör arbetsinsatsen planbar.

Fas 4: Omfattande migrering och rensning av deployment

Efter piloten går man över modul för modul. Parallellt avvecklas BDE som driftberoende:

  • Ta bort installer‑skript och dokumentation för BDE‑setups
  • Eliminera alias‑definitioner, NetDir‑konfiguration och specialvägar
  • Anpassa build-/release‑pipeline till nya beroenden (client‑libs, drivrutiner)

Just denna rensning är avgörande: så länge BDE‑delar överlever i distributionen kvarstår drift‑risken.

Fallgropar: vanliga orsaker till affärsmässiga sidoeffekter

Många migrationer misslyckas inte på grund av FireDAC utan på grund av implicita antaganden i gammal kod. Dessa områden bör prioriteras tidigt.

SQL‑dialekter och historiskt präglad SQL

BDE‑applikationer innehåller ofta SQL som „av en slump“ fungerade med en viss drivrutin: implicita joins, ojämn alias‑användning, DB‑specifika funktioner, oklara sorteringsordningar. Vid migrering gäller:

  • Gör SQL explicit (JOIN‑syntax i stället för implicit WHERE‑koppling)
  • Kontrollera reserverade ord och identifierare (t.ex. DATE, USER, ORDER som fältnamn)
  • Enhetliggör datum/tids‑ och strängfunktioner eller kapsla dem

FireDAC erbjuder anpassningsmöjligheter, men den hållbara lösningen är DB‑konform, väl läsbar SQL.

Datatyp‑mappning: Boolean, Datum/Zeit, Memo/Blob, NULL

BDE tolkade mycket i praktiken. FireDAC är mer precis – vilket är bra men kräver regler. Typiska teman:

  • Boolean: BIT/SMALLINT/CHAR(1) – definiera tydligt, inga implicita konverteringar
  • Datum/Tid: DATETIME vs. DATETIME2, millisekunder, sorterings-/jämförelselogik; tidszonsfrågor i distribuerade system
  • Memo/Blob: Fetch‑beteende (OnDemand), encoding, minnesförbrukning i klienten
  • NULLbarhet: Gammal kod som blandar tomma strängar och NULL leder till svårupptäckta logikfel

En smal datatypkatalog har visat sig fungera väl: för varje affärsmässigt viktig tabell/kolumn måldatatyper (DB och Delphi) plus regler för NULL, default‑värden och format.

Transaktioner: från implicit till medvetet orkestrerade

I legacy‑Delphi‑projekt är det vanligt att systemet förlitat sig på implicita commits („när jag stänger dataset sparas det“). FireDAC erbjuder tydliga API:er (StartTransaction, Commit, Rollback). Moderniseringsvinsten kommer när transaktioner förstås som ett affärsmässigt ramverk:

  • Use Case startar transaktionen
  • Flera uppdateringar sker inom samma connection
  • Commit/Rollback sker centralt med spårbar felhantering

Detta minskar inkonsekvenser och är avgörande om applikationen senare kompletteras med tjänster eller gränssnitt.

Cached Updates och konfliktbehandling (concurrency)

Många BDE‑applikationer använder Cached Updates som en „offline‑edit“‑mekanik. FireDAC kan likna detta, men reglerna måste vara explicita:

  • Vilka fält är nycklar, vilka används för concurrency‑kontroll?
  • Hur löses konflikter (RowVersion/Timestamp, „last write wins“, användarbeslut)?
  • Vad händer vid delvis fel i batch‑operationer?

I moderniseringar är det ofta klokt att flytta konfliktlogiken närmare affärslogiken eller in i en tjänstelager i stället för att dölja den i UI‑dataset‑beteende.

TTable/Paradox‑tunga applikationer: FireDAC är inte enda området

Om applikationen i hög grad bygger på filbaserad åtkomst (TTable mot Paradox) är „ersätta BDE med FireDAC“ bara en del av sanningen. FireDAC är primärt avsett för SQL‑databaser. Den centrala frågan då är: Ska datalagringen moderniseras till en server‑DB?

  • Migration till SQL Server, PostgreSQL eller MariaDB
  • Införande av roll‑/rättighetskoncept och ordnade backup/restore‑processer
  • Stabil fleranvändardrift utan fil‑låsningsproblematik

Om ett omedelbart databasbyte inte är organisatoriskt möjligt är ett tvåstegs‑förfarande ofta pragmatiskt: först stabilisera åtkomstskiktet och minska UI‑kopplingen, sedan data‑migration med tydlig test‑ och cutover‑strategi.

Rapportering, export och tredjepartskomponenter

Rapporter är ofta beroende av detaljer: sorteringar, filterordning, beräknade fält, master/detail‑beteende. För en kontrollerad omställning:

  • Identifiera kritiska rapporter och behandla dem som en regressions‑testsvit
  • Generera dataset för rapporter deterministiskt (views/stored procedures eller väl definierade queries)
  • Minska UI‑sida filterkedjor som är beroende av dataset‑beteende

Målet är reproducerbar resultatlikhet, särskilt för revisionskritiska utskrifter.

Arkitektur‑uppgradering i samband med FireDAC‑migration: pragmatiskt koppla bort

BDE‑avvecklingen är ett bra tillfälle att ta ut dataåtkomsten ur formulär och event‑handlers. Det betyder inte att ett komplett re‑architecture‑projekt krävs. Redan måttliga åtgärder ger ofta stor effekt.

Pragmatiskt målstruktur (anslutningsbar till Layer‑3‑arkitektur)

  • Connection/Unit‑of‑Work: hanterar connection och transaktion, tillhandahåller query‑objekt
  • Repository/DAO: kapslar SQL och dataåtkomst per affärsområde
  • Service/Use Case: orkestrerar affärslogik, valideringar och transaktionsram

Denna struktur är kompatibel med en senare Layer‑3‑arkitektur och underlättar efterföljande projekt: REST‑gränssnitt, bakgrundstjänster, multiplattforms‑klienter eller koppling mot portaler.

Viktig effekt: färre globala sidoeffekter

Många BDE‑projekt arbetar med globala datamoduler och implicita tillstånd. FireDAC fungerar också så, men moderniseringen blir stabilare om tillstånd lokaliseras: tydligare livscykel för connection/transaktion, reproducerbara felvägar, färre „biverkningar“ av globalt tillstånd.

Prestanda och stabilitet: konfigurera FireDAC målinriktat

FireDAC är kraftfullt, men prestanda är en kombination av SQL, indexering, fetch‑strategi och connection‑hantering. I migrationer visar det sig ofta att BDE dolde ineffektiva mönster eftersom datamängderna tidigare var mindre eller systemet kördes lokalt.

Fetch‑strategier och UI‑listor

  • Listor laddar bara nödvändiga kolumner (ingen SELECT *)
  • Serversidig sortering och målmedvetna filter i stället för klient‑sida filterkedjor
  • Vid stora datamängder: paging eller inkrementell inläsning
  • LOB‑fält (Memo/Blob) laddas först när de verkligen behövs

FireDAC erbjuder lämpliga alternativ; avgörande är en affärsmässig beslutsprocess om vilka data en användare faktiskt behöver i varje kontext.

Prepared statements och parametrisering

Parametriserade queries är inte bara säkerhetsstandard (förhindra SQL‑injektion) utan förbättrar även planåteranvändning i många databaser. Dessutom blottas typosäkerheter i gammal kod och kan riktas upp. Särskilt i upparbetade system är detta en kvalitetsförbättring som ger färre specialfall och bättre diagnostik.

Connection‑hantering: Desktop vs. Service/REST

I klassiska desktop‑klienter är ofta en långlivad connection per klient praktisk. I tjänster eller REST‑servrar gäller andra mönster: kortlivade requests, parallella åtkomster, connection‑pooling. Den som ser BDE‑avvecklingen som en del av en större modernisering bör ta dessa skillnader i beaktande i målbilderna så att senare utbyggnader inte måste börja om på dataåtkomstnivån.

Test‑ och driftsättningsstrategi: bevisa resultatlikhet

Vid BDE‑avveckling är huvudrisken sällan att „applikationen inte startar“, utan tysta funktionella avvikelser: sorteringsordning, avrundningar, NULL‑hantering, transaktionsgränser, sidoeffekter av triggers/constraints i moderna DB. En hållbar teststrategi omfattar:

  • SQL‑regression: kör kritiska frågor mot definierade testdata och jämför resultatuppsättningar
  • Use‑case‑tester: granska kärnprocesser (t.ex. bokning, godkännande, avbokning, import/export) mot förväntade värden
  • Fleranvändar‑/stabilitetstester: låsning, deadlocks, timeouts, transaktionslängd
  • Logging/Observability: fånga DB‑fel strukturerat (felkoder, kontext, påverkad query), inte bara „felruta“

Företag vinner dubbelt här: testerna säkrar migreringen och skapar en grund för att senare ändringar i datamodell eller gränssnitt kan rullas ut kontrollerat.

Måldatabaser i FireDAC‑projekt: vanliga alternativ

FireDAC är medvetet brett, men varje databas har egna regler. Vid moderniseringar är följande mål vanliga:

SQL Server

Typiskt i Windows‑dominerade IT‑landskap. Viktiga punkter: konsekventa Unicode‑typer (NVARCHAR), moderna tidtyper (DATETIME2), tydlig Identity/Sequence‑strategi, definierade isolationsnivåer och ett ordnat förhållningssätt till låsning.

PostgreSQL

Starkt på integritet och funktionalitet. I migrationer relevant: identifierares case‑känslighet, datatyper (boolean/uuid/jsonb) och dialektsskillnader. FireDAC kan binda PostgreSQL produktivt om client‑libraries och deployment är organiserade.

MariaDB/MySQL

Vanligt när desktopmjukvara samspelar med webb‑ eller portalkomponenter. Viktigt: utf8mb4 konsekvent, InnoDB som engine, ordnad transaktions‑ och indexstrategi. FireDAC stödjer MariaDB/MySQL pålitligt om parametrar och typer är tydligt definierade.

Oavsett mål gäller: En BDE‑avveckling blir mest stabil om man samtidigt skapar databasstandarder (schema‑versionering, migrationsskript, roller/rättigheter, backup/restore, monitoring).

Praktiska rekommendationer för en planbar FireDAC‑migration

Minska beroenden innan ni massbyter komponenter

Om SQL och dataset‑logik är utspritt över många formulär blir varje ändring dyr. Ett mellansteg som samlar SQL i ett fåtal åtkomstklasser minskar migrationsytan avsevärt. Därefter blir den egentliga övergången till FireDAC ofta snabbare och mindre riskfylld.

Migrera tidigt en transaktionell kärnprocess

„Enkla listor“ är bekväma att börja med, men ett mer riskminimerande grepp är att tidigt migrera en process med verkliga uppdateringar och beroenden. När transaktioner, datatyper och felvägar är ordnade där blir resten av migrationen mer planbar.

Behandla deployment som lika viktigt arbete

Kodändringen är bara halva jobbet. Klargör tidigt:

  • Vilka klientbibliotek/drivrutiner krävs per databas?
  • Hur versionshanteras och signeras dessa (om relevant) och hur rullas de ut?
  • Hur hanteras connection‑parametrar, och vem får ändra dem?
  • Hur ser supportrutinen ut när DB‑åtkomst misslyckas?

Använd FireDAC som moderniseringskotva – utan omstart

Avvecklingen är ett tillfälle för riktade kvalitetslyft: parametrisering, transaktionsgränser, logging, enhetliga feltexter. Det minskar driftkostnader och gör senare utbyggnader (gränssnitt, tjänster) betydligt mindre riskfyllda utan att till sist nyskapa affärsfunktionaliteten.

Slutsats: BDE‑avveckling med FireDAC är kontrollerbar modernisering – om den behandlas som ett arkitekturtema

BDE har under lång tid burit många Delphi‑applikationer. Idag är den dock en strukturell risk: för 64‑Bit, för standardiserad deployment, för moderna säkerhetskrav och för anslutning till samtida databaser. FireDAC är en lämplig efterföljare, men inte som en „komponentväxling över natten“. Den säkra vägen är en stegvis migration med en ren foundation, pilotmodul, bindande regler för datatyper och transaktioner samt tester som bevisar resultatlikhet.

Om ni vill planera BDE‑avvecklingen strukturerat – inklusive inventering, migrationsväg och FireDAC‑målarkitektur – är en teknisk avstämning av era förutsättningar nästa mest rimliga steg: https://net-base-software-gmbh.de/kontakt/