Från magasinets tema till projektpraxis
Passande tjänste- och tekniksidor för inlägget
Video-Botschaft
Ersätta Borland BDE med FireDAC: En vägledning för en säker modernisering av Delphi utan 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.
I många företag är Borland Database Engine (BDE) fortfarande en del av affärskritiska Delphi-applikationer: etablerad domänlogik, UI-nära dataåtkomst med TTable/TQuery, delvis fortfarande Paradox/dBase och delvis tidiga klient/server-installationer. Ofta är verkligheten att mjukvaran fungerar, användarna kan processerna och det i den dagliga driften inte finns något omedelbart skäl att röra vid systemet. Samtidigt ändras den tekniska basen: operativsystem hårdnas, distribution standardiseras, 64‑bit förväntas och datalagring bör ske på databasserver med ett tydligt rättighets- och backupkoncept.
Precis här blir det en strategisk moderniseringsuppgift att „ersätta Borland BDE med BDE-Ablösung mit nativer Anbindung„. BDE-Ablosung mit nativer Anbindung är i aktuella Delphi-versioner den etablerade dataåtkomsten för moderna databaser. Den levererar konsistent beteende, robusta drivrutiner, Unicode-stöd, monitoring/tracing och en arkitektur som kan betjäna både desktopklienter och tjänster samt REST-servrar. Ett byte är dock sällan bara en 1:1-komponentutbyte – särskilt inte när befintlig programvara under år har inprisat BDE-specifikt beteende (transaktionsantaganden, dataformat, filter/sorteringar, Cached Updates, tredjepartsrapporter).
Detta inlägg fokuserar på praktiskt tillvägagångssätt: Hur ersätter ni BDE med FireDAC utan att äventyra domänlogiken och utan att tvinga fram en Big-Bang-relaunch? Du får en genomförbar modell, tekniska målbilder och anvisningar om typiska problemområden i driften.
Varför BDE-avveckling idag är mer än teknikunderhåll
Så länge en BDE-applikation fungerar verkar en avveckling som ren „kodstädning“. I praktiken uppstår dock trycket oftast från drift- och riskfrågor.
Deployment, säkerhetsbaslinjer och ’no-touch‘-klienter
BDE är historiskt designad för lokal konfiguration (BDE Administrator, alias-definitioner, NetDir, gemensamma konfigurationsfiler). I moderna miljöer är manuella steg och maskinövergripande inställningar svåra att förena med programvarudistribution, hårdning och revision. FireDAC möjliggör mer kontrollerbara deploymentmönster eftersom anslutningsparametrar och drivrutinsinställningar kan hanteras nära applikationen.
64‑bit, Windows-modernisering och nya plattformsmål
När en applikation måste köras i 64‑bit (minnesbehov, drivrutins-/office-ekosystem, ny hårdvara, terminalserverstrategier) blir BDE praktiskt taget ett hinder. FireDAC stödjer 32/64‑bit konsekvent och är därmed en nyckelkomponent i varje Delphi-modernisering som inte får misslyckas på grund av dataåtkomst. Därtill blir frågor som Windows 11 ARM64 och hybridklient-/tjänstarkitekturer först ordentligt planbara.
Databasstrategi: från filbaserat till serverbaserat
Många BDE-applikationer bär fortfarande teknisk skuld från Paradox/dBase-tiden. Dessa filbaserade databaser är i flerkällig användning mer sårbara, svårare att administrera och passar dåligt till dagens krav (roller/rättigheter, kryptering, övervakning, hög tillgänglighet). FireDAC är inte „den nya Paradox-drivrutinen“, men den moderna vägen till SQL Server, PostgreSQL, MariaDB och Firebird. I praktiken blir därför BDE-avvecklingen 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 kursorbeteende, svårtolkade parameterkonverteringar eller nätverks-/sökvägsproblem. FireDAC erbjuder med logging, monitoring och tydligare typbeteende bättre möjligheter för reproducerbar felanalys. För företag som avser att drifta en applikation långsiktigt och utöka den punktvis är detta omedelbar nytta.
BDE vs. FireDAC: skillnader som räknas vid migration
Papperet tillåter komponentmappning. I verkligheten handlar det om beteendeförändringar som kan ge domänmässiga sidoeffekter. En kort orientering:
Komponentmappning (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. „Fungerar nog ändå“-SQL blottas snabbare (t.ex. datumvärden som strängar, implicita konverteringar, otydlig nullability).
- Transaktioner: Legacy-kod innehåller ofta implicita commit-antaganden (stängning av dataset, AutoCommit-liknande mönster, Cached Updates). Med FireDAC lönar det sig att styra transaktioner medvetet eftersom det förbättrar domänmässig konsistens.
- Cursor/Fetch: FireDAC har andra defaults och fler justeringsmöjligheter. Ineffektiva mönster (stora resultatuppsättningar för UI-listor) blir synligare men kan målmedvetet optimeras.
- Unicode: I moderna Delphi-versioner är Unicode standard. FireDAC-kedjan (client-library, connection-options, DB-collation, fälttyper) måste vara konsekvent, annars uppstår tecken- och jämförelseproblem.
- Deployment: Beroende på DB krävs klientbibliotek (t.ex. libpq för PostgreSQL). Detta måste planeras tidigt för att undvika produktionsnära överraskningar.
Målbild för en FireDAC-arkitektur: stabil, testbar, utbyggbar
En BDE-avveckling bör inte mynna i „FireDAC överallt på ett godtyckligt sätt“. En hållbar målbild är särskilt värdefull när applikationen ska vidareutvecklas eller bäddas in i tjänster/portaler.
Minimummål: enhetligt connection-layer
Istället för spridda anslutningar i formulär rekommenderas ett centralt connection-layer:
- Skapande och konfiguration av TFDConnection på en plats
- Enhetliga timeouts, encoding/characterSet, felhantering
- Byte mellan Dev/Test/Prod utan manuell efterarbete
- Valfritt: central aktivering av tracing/monitoring för diagnostikfall
Rekommenderat: tydliga transaktionsgränser i domänlogiken
Många äldre applikationer sprider dataändringar över UI-händelser. Det ökar risken för delvisa uppdateringar och försvårar tester. Ett stabilt FireDAC-mönster är att use caset (tjänst/domänlogik) startar och avslutar transaktionen, inte UI:t. Även i en ren VCL-desktopsapplikation skapar detta en robust kärna som senare lättare kan exposas som tjänst eller API.
Utbyggbart mot tjänster och REST
Om man senare kompletterar med en REST-server, kör Windows- eller Linux-tjänster eller vill koppla ett kundportal, tjänar man på ett rent datalager. FireDAC är lämpligt om connection-management, felhantering och – beroende på serverlast – poolning åtminstone finns med i målbilden. Det måste inte implementeras i första steget men får inte blockera arkitekturen framåt.
Migrationsstrategi: införa FireDAC stegvis, avveckla BDE kontrollerat
I B2B-miljöer är en Big Bang sällan realistisk: för många affärsprocesser, för mycket driftsansvar och för liten acceptans för långa driftstopp. En stegvis BDE-avveckling är normalt den säkra vägen.
Fas 1: inventering och riskkarta
En användbar inventering räknar inte bara komponenter utan bedömer beteenden och kopplingar:
- Vilka databaser används: Paradox/dBase, Firebird/InterBase, SQL Server, PostgreSQL, MariaDB?
- Var förekommer TTable-åtkomst, var används SQL via TQuery, var finns 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, calculated fields)?
- Vilka tredjepartskomponenter eller egna ramverk är BDE-specifika?
Utifrån denna karta avgörs om avvecklingen „bara“ rör åtkomsten 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 skärmar migreras bör FireDAC vara tekniskt på plats:
- Centralt DataModule eller serviceklass med TFDConnection
- Konfigurationsmodell för connection strings (t.ex. INI/JSON) och ordentlig hantering av hemligheter
- Standardiserad felhantering (omvandla DB-exceptions till begripliga, loggbara meddelanden)
- Tracing/monitoring-optioner för pilotdrift (aktiverbara vid behov, inte permanent högljudda)
Det är viktigt att detta mynnar ut i bindande standarder: namngivningskonventioner, parameterrutiner, loggningsschema, standardinställningar per databas.
Fas 3: pilotmodul med verklig domänrelevans
Ett bra pilotområde är domänmässigt avgränsat men i verklig användning. Syftet är att utveckla och verifiera mönster.
- TQuery → TFDQuery (inkl. parameterisering och typning)
- Definiera transaktionsram och göra den synlig i koden
- Verifiera resultatlikhet (jämför domänrelevanta resultatuppsättningar)
- Mät prestanda (svarstider, DB-last, nätverkstrafik)
I slutet av piloten bör det finnas en intern checklista som varje vidare modul migrering följer. Det minskar risken och gör insatsen mer förutsägbar.
Fas 4: volymmigration och deployment-rensning
Efter piloten migreras modul för modul. Parallellt ska BDE avvecklas som driftsberoende:
- Ta bort installer-skript och dokumentation för BDE-setups
- Eliminera alias-definitioner, NetDir-konfiguration och specialvägar
- Rikta build-/release-pipeline mot nya beroenden (client-libs, drivrutiner)
Just denna rensning är avgörande: så länge BDE-delar överlever i deploymenten kvarstår driftrisken.
Fallgropar: vanliga orsaker till domänmä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 vuxen SQL
BDE-applikationer innehåller ofta SQL som råkade fungera med en viss drivrutin: implicita joins, inkonsekvent alias-användning, DB-specifika funktioner, otydliga sorteringsordningar. Vid migration gäller:
- Gör SQL explicit (JOIN-syntax istället för implicit WHERE-koppling)
- Kontrollera reserverade ord och identifierare (t.ex. DATE, USER, ORDER som fältnamn)
- Standardisera eller kapsla datum-/tid- och strängfunktioner
FireDAC erbjuder anpassningsmöjligheter, men en hållbar lösning är DB-konform, läsbar SQL.
Datatyp-mappning: Boolean, datum/tid, Memo/Blob, NULL
BDE tolkade i praktiken mycket. FireDAC är mer precis – vilket är fördelaktigt men kräver regler. Vanliga frågor:
- Boolean: BIT/SMALLINT/CHAR(1) – definiera tydligt, undvik implicita konverteringar
- Datum/Tid: DATETIME vs. DATETIME2, millisekunder, sorterings-/jämförelselogik; tidszonsfrågor i distribuerade system
- Memo/Blob: Fetch-beteende (OnDemand), encoding, klientens minnespåverkan
- NULLability: Gammal kod som blandar tomma strängar och NULL leder till svårupptäckta logikfel
En slimmad datatypkatalog har visat sig fungera: för varje domänmässigt viktig tabell/kolumn ange måltyper (DB och Delphi) samt regler för NULL, defaultvärden och formatering.
Transaktioner: från implicit till medvetet orkestrerade
I legacy-Delphi-projekt är ett vanligt fel att systemet förlitade sig på implicita commits („stänger jag datasetet så är det sparat“). FireDAC tillhandahåller tydliga API:er (StartTransaction, Commit, Rollback). Moderniseringsvinsten kommer när transaktioner förstås som ett domänmässigt ramverk:
- Use case startar transaktion
- Flera uppdateringar sker inom samma Connection
- Commit/Rollback sker centralt med spårbar felhantering
Detta minskar inkonsekvenser och är avgörande när applikationen senare kompletteras med tjänster eller gränssnitt.
Cached Updates och konflikthantering (konkurrens)
Många BDE-applikationer använder Cached Updates som en offline-redigeringsmekanik. FireDAC kan erbjuda liknande funktionalitet, men reglerna måste bli 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 delfel i batchoperationer?
I moderniseringar är det ofta lämpligt att flytta konfliktlogik närmare domänlogiken eller in i en tjänstelager i stället för att dölja den i UI-datasetbeteende.
TTable/Paradox-tunga applikationer: FireDAC är inte enda byggstenen
Om applikationen är starkt filbaserad (TTable mot Paradox) är „BDE ersatt med FireDAC“ bara en del av sanningen. FireDAC är främst avsett för SQL-databaser. Den centrala frågan blir då: ska datalagringen moderniseras till en server-DB?
- Migration till SQL Server, PostgreSQL eller MariaDB
- Införande av roller-/rättighetskoncept och ordnade backup/restore-processer
- Stabil flerkundsdrift utan fil-låsproblem
Om ett omedelbart databassbyte organisatoriskt inte är möjligt är ett tvåstegsansats ofta pragmatiskt: först stabilisera åtkomstlagret och minska UI-koppling, därefter datamigrering med en tydlig test- och cutover-strategi.
Rapportering, exporter och tredjepartskomponenter
Rapporter hänger ofta på detaljer: sorteringsordningar, filtersekvenser, beräknade fält, master/detail-beteende. För en kontrollerad omställning:
- Identifiera kritiska rapporter och behandla dem som en regressions-testsvit
- Generera data för rapporter deterministiskt (views/stored procedures eller tydligt definierade queries)
- Minska UI-baserade filterkedjor som är beroende av datasetbeteende
Målet är reproducerbar resultatlikhet, särskilt för revisionsrelevanta utsagor.
Arkitekturuppgradering i samband med FireDAC-migration: pragmatisk avkoppling
BDE-avvecklingen är en bra tidpunkt att lyfta ut dataåtkomst från formulär och eventhanterare. Det betyder inte att ett fullständigt re-architecture-projekt krävs. Redan måttliga åtgärder ger ofta stor effekt.
Pragmatisk målstruktur (anslutbar till Layer-3-arkitektur)
- Connection/Unit-of-Work: hanterar Connection och transaktion, tillhandahåller query-objekt
- Repository/DAO: kapslar SQL och dataåtkomst per domänområde
- Service/Use Case: orkestrerar domänlogik, valideringar och transaktionsram
Denna struktur är kompatibel med en senare Layer-3-arkitektur och förenklar efterföljande projekt: REST-gränssnitt, bakgrundstjänster, multiplattformsklienter eller koppling mot portaler.
Viktigt effekt: färre globala sidoeffekter
Många BDE-projekt använder globala datamoduler och implicita tillstånd. FireDAC kan fungera på samma sätt, men moderniseringen blir stabilare om tillstånd lokaliseras: tydlig livscykel för Connection/Transaktion, reproducerbara felvägar och färre bieffekter från globalt tillstånd.
Prestanda och stabilitet: konfigurera FireDAC målmedvetet
FireDAC är kapabelt, men prestanda är en kombination av SQL, indexering, fetch-strategi och connection-management. I migrationer framkommer ofta att BDE har maskerat ineffektiva mönster, antingen för att datamängder tidigare var mindre eller för att systemet körde lokalt.
Fetch-strategier och UI-listor
- Listor laddar endast nödvändiga kolumner (ingen SELECT *)
- Serverside-sortering och riktade filter i stället för klientbaserade kedjor
- Vid stora datamängder: paging eller inkrementell inladdning
- LOB-fält (Memo/Blob) laddas först när de verkligen behövs
FireDAC erbjuder lämpliga options; avgörande är den domänmässiga besluten om vilken data en användare faktiskt behöver i respektive kontext.
Prepared statements och parametrisering
Parametriserade queries är inte bara säkerhetsstandard (för att undvika SQL-injection) utan förbättrar i många databaser återanvändningen av execution plans. Dessutom blottas typinkonsekvenser i gammal kod och kan riktas upp. I etablerade system är detta en kvalitetsvinst som ger färre specialfall och bättre diagnostik.
Connection-management: desktop vs. tjänst/REST
I klassiska desktopklienter ä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 med dessa skillnader i målbilden så att framtida utbyggnader inte måste börja om vid dataåtkomstlagret.
Test- och godkännandestrategi: påvisa resultatlikhet
Vid BDE-avveckling är huvudrisken sällan att „applikationen inte startar“ utan tysta domänmässiga avvikelser: sorteringsskillnader, avrundningar, NULL-hantering, transaktionsgränser, bieffekter av triggers/constraints i moderna DB. En robust 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. bokföring, godkännande, återkallande, import/export) mot förväntade resultat
- Fleranvändar-/stabilitetstester: låsbeteende, deadlocks, timeouts, transaktionslängd
- Logging/observability: fånga DB-fel strukturerat (felkoder, kontext, påverkad query) i stället för endast ett felmeddelande till användaren
Företag vinner dubbelt här: testerna säkrar migrationen och skapar en bas för att senare förändringar i datamodell eller gränssnitt kan rullas ut kontrollerat.
Måldatabaser i FireDAC-projekt: typiska alternativ
FireDAC är avsiktligt brett, men varje databas har sina egna regler. I moderniseringar är följande mål vanliga:
SQL Server
Typiskt i Windows-dominerade IT-landskap. Viktiga punkter: konsekventa Unicode-typer (NVARCHAR), moderna tidstyper (DATETIME2), tydlig identity/sequence-strategi, definierade isolation levels och ordnad hantering av lås.
PostgreSQL
Starkt på integritet och funktioner. I migrationer relevant: identifierares case-sensitivity, datatyper (boolean/uuid/jsonb) och dialektvariationer. FireDAC kan ansluta PostgreSQL produktivt om client-libraries och deployment organiseras ordentligt.
MariaDB/MySQL
Vanligt när desktopmjukvara samarbetar med webb- eller portalkomponenter. Viktigt: konsekvent utf8mb4, InnoDB som engine, ordnad transaktions- och indexstrategi. FireDAC stödjer MariaDB/MySQL tillförlitligt om parametrar och typer är tydligt definierade.
Oberoende av mål gäller: en BDE-avveckling blir stabilast om man parallellt etablerar databasstandarder (schema-versionering, migrationsskript, roller/rättigheter, backup/restore, monitoring).
Praktiska rekommendationer för en planbar FireDAC-migration
Minska beroenden innan ni byter många komponenter
Om SQL och datasetlogik ligger i många formulär blir varje ändring dyr. Ett mellansteg som samlar SQL i några få åtkomstklasser minskar migrationsytan avsevärt. Därefter är själva övergången till FireDAC ofta snabbare och mindre riskfylld.
Migrera tidigt en transaktionell kärnprocess
„Enkla listor“ är bekväma som ingång, men minskad risk fås om man tidigt migrerar en process med verkliga uppdateringar och beroenden. Om transaktioner, datatyper och felvägar där hanteras ordentligt blir resten av migrationen mer förutsägbar.
Behandla deployment som ett lika viktigt arbete
Kodbytet är bara halva arbetet. Klargör tidigt:
- Vilka client-libraries/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 supportprocessen ut när DB-åtkomst misslyckas?
Använd FireDAC som moderniseringspåverkare – utan nystart
Avvecklingen är en möjlighet att påverka kvalitet: parametrisering, transaktionsgränser, logging, enhetliga feltexter. Det minskar driftkostnader och gör framtida utbyggnader (gränssnitt, tjänster) avsevärt mindre riskfyllda, utan att applikationen måste uppfinnas på nytt.
Slutsats: BDE-avveckling med FireDAC är kontrollerbar modernisering – om den behandlas som ett arkitekturtema
BDE har burit många Delphi-applikationer i åratal. Idag är den dock en strukturell risk: för 64‑bit, för standardiserad distribution, för moderna säkerhetskrav och för anslutning till samtida databaser. FireDAC är en lämplig efterträdare, men inte som en „komponentbytessats över natt“. Den säkra vägen är en stegvis migration med en ren foundation, pilotmodul, bindande regler för datatyper och transaktioner samt tester som påvisar resultatlikhet.
Om ni vill planera BDE-avvecklingen strukturerat – inklusive inventering, migrationsväg och FireDAC-målarkitektur – är en teknisk genomgång av era förutsättningar nästa mest rimliga steg: https://net-base-software-gmbh.de/kontakt/
nästa steg
När ett ämne blir ett verkligt projekt bör arkitektur, befintligt bestånd och drift tidigt ses över gemensamt.
Vi stöder inte bara vid enstaka frågor, utan även när kodsfragment, legacy-frågor eller portalidéer ska utvecklas till ett robust företagsprojekt.
- Nuläge, målbild och tekniska risker bedöms tillsammans.
- REST, dataåtkomst, portaler och utrullning skjuts inte upp som sena följder.
- Ni ser tidigt vilken väg som är ekonomiskt och driftmässigt hållbar.