Net-Base Revista

01.07.2026

Modernitzar la connexió de SQL Server a Delphi: funcionament més estable, millor mantenibilitat, menys risc

Moltes Delphi-aplicacions es comuniquen amb SQL Server des de fa anys — sovint estables, però amb deute tècnic: accessos a dades obsolets, cadenes SQL difícils de mantenir, transaccions poc clares, valors predeterminats de seguretat febles o problemes de rendiment amb l'augment de la càrrega. Aquest article mostra...

01.07.2026

Del tema de la revista a la pràctica del projecte

Pàgines de serveis i tècniques pertinents per a l'article

Qui vol modernitzar la connexió de SQL Server a Delphi modernitzar, rarament té un problema de „funciona o no“. En moltes empreses, aplicacions d’escriptori Delphi evolucionades o serveis Windows funcionen de manera fiable durant anys – fins que apareixen noves exigències: actualitzacions Windows, noves versions de SQL Server, requisits de seguretat més estrictes, volums de dades més grans, més ubicacions o la necessitat d’encapsular interfícies de manera neta. Llavors queda visible fins a quin punt l’accés a dades, el maneig d’errors i la lògica de transaccions afecten el treball de l’administració i l’operació diària.

Aquest article descriu passos de modernització concrets que es poden implementar en sistemes existents sense haver de refer-ho tot de cop. El focus està en decisions rellevants per a la direcció d’IT, administradors i responsables tècnics de projecte: elecció de controladors, nivell de seguretat, estabilitat d’operació, mantenibilitat, rendiment i una ruta de migració amb poc risc.

Per què la connexió de SQL Server a Delphi esdevé un tema de modernització

A la pràctica, la pressió per modernitzar rarament prové de la llengua Delphi en si, sinó de la interacció entre la base de dades, l’entorn de drivers, l’enduriment del sistema operatiu i l’augment de la complexitat del programari de negoci. Els desencadenants típics són:

  • Herències tècniques en l’accés a dades: rutes ADO-/OLE DB antigues, configuracions ODBC „manuals“, ajustos de connexió incoherents o components barrejats al projecte.
  • Defaults de seguretat que ja no són adequats: requisits sobre TLS (xifrat de transport), comprovació de certificats, rotació de contrasenyes o autenticació Windows.
  • Problemes de rendiment: augment del nombre d’usuaris, més paral·lelisme, nous informes, integracions addicionals – i, de sobte, apareixen timeouts, deadlocks o bloquejos llargs.
  • La mantenibilitat empitjora: cadenes SQL en formularis, manca de parametrització, „try/except“ sense context de diagnòstic, límits de transacció poc clars.
  • Sauts de plataforma i de versió: actualització a noves versions de SQL Server o Windows, migració a 64 bits, Terminalserver/RemoteApp o virtualització.

El punt central: una connexió modernitzada no és només „més ràpida“. És més controlable: explotació clara, configuració reproductible, logs informatius i un accés a dades que es pot provar i renovar de forma incremental.

Recollir l’estat actual de forma precisa: abans d’«implementar simplement FireDAC»

Abans d’intercanviar components, val la pena fer una breu i estructurada presa d’inventari. Això estalvia dies després en la resolució d’errors, perquè posa de manifest dependències que en projectes heredats sovint existeixen només de manera implícita.

Checklist: Què cal respondre en l’anàlisi?

  • Quina tecnologia d’accés? ADO (via OLE DB), ODBC, dbExpress, BDE-RESTes, llibreries propietàries — i on estan repartides pel codi?
  • Com es construeixen les connexions? Connection-String central o per mòdul? Hi ha fitxers de configuració, entrades al Registry, variables d’entorn?
  • Com s’autentica? SQL-Login, autenticació Windows (inici de sessió integrat), comptes de servei, Kerberos/NTLM, possiblement modes mixtes.
  • Com s’utilitzen les transaccions? Per operació d’emmagatzematge, per cas d’ús, o fins i tot „autocommit“ sense límits clars?
  • Quines funcionalitats de SQL Server s’utilitzen? Stored Procedures, Views, Trigger, CLR, Always On, xifrat, Columnstore, Temporal Tables.
  • Quines entorns d’explotació? estació de treball individual, Terminal Server, Citrix, Windows- i Linux-serveis, tasques programades, diversos emplaçaments amb VPN.
  • Un resultat d’aquesta fase hauria de ser un petit objectiu final: quins mòduls es modernitzaran primer, quines configuracions s’estandarditzaran i quins riscos (p. ex. canvi d’autenticació) es tractaran deliberadament per separat.

    Modernitzar la connexió de SQL Server en Delphi: estratègia de controladors i components

    Per a molts sistemes Delphi la decisió clau és: com ens connectem tècnicament a SQL Server i com ho estandarditzem a tots els mòduls? En stacks moderns de Delphi la substitució de BDE amb connexió nativa sovint és l’estàndard més pràctic. BDE-Ablosung mit nativer Anbindung és una capa d’accés a dades (Data Access Layer) en Delphi que encapsula controladors, admet la parametrització i pot modelar de manera neta requisits operatius típics com pooling i logging.

    Per què la standardització és més important que «el controlador perfecte»

    En aplicacions existents no és estrany trobar funcionament mixt: una part fa servir ADO, una altra ODBC, una tercera dbExpress. Això comporta configuració duplicada, semàntiques de timeout i de transacció diferents i patrons d’error difícils de comparar. L’objectiu de la modernització hauria de ser:

    • un estàndard de connexió unificat (incl. timeouts, xifrat, Application Name),
    • un concepte comú d’errors i de registre,
    • una capa d’abstracció clarament definida entre la lògica d’interfície/servei i SQL.

    Substituir o encapsular ADO?

    Molts sistemes utilitzen ADO perquè en aquell moment «anava bé». Avui ADO no és automàticament incorrecte, però sovint suposa un impediment per a valors de seguretat per defecte unificats, estratègies de pooling i diagnosi. A la pràctica hi ha dues vies viables:

    • Encapsular: ADO es manté inicialment, però s’introdueix una façana d’accés a dades perquè els nous mòduls s’hi integrin de forma neta.
    • Substitució gradual: els mòduls o casos d’ús es migren un a un a FireDAC, acompanyats de proves de regressió i funcionament en paral·lel.

    Quina variant s’adiu depèn de la pressió de llançament, la cobertura de proves i la complexitat de la lògica SQL —més que de la mera quantitat de formularis.

    Seguretat en la connexió a la base de dades: TLS, identitats i permisos gestionats correctament

    Des del punt de vista operatiu la connexió a la base de dades és un tema central de seguretat. Es tracta de xifrat de transport, identitats, permisos mínims i una configuració traçable. Especialment en aplicacions evolucionades, els valors per defecte sovint són històrics i no triats de manera conscient.

    Xifrat de transport (TLS) i verificació de certificats

    SQL Server pot xifrar connexions amb TLS. No n’hi ha prou amb activar «Encrypt»: també cal la verificació del certificat i una gestió coherent dels certificats (p. ex. Subject Alternative Names correctes). Altrament es cau en la trampa: xifrat activat però, per «Trust Server Certificate», de facto sense comprovació real.

    Per als administradors és important: la configuració ha de ser reproduïble (GPO/Deployment) i els errors han de ser inequívocs (p. ex. certificat caducat vs. nom DNS incorrecte).

    SQL-Login vs. Windows autenticació

    Els inicis de sessió SQL són fàcils de distribuir, però més difícils d’operar de manera segura: rotació de contrasenyes, gestió de secrets i risc d’abús. Windows Autenticació (inici de sessió integrat) pot aportar avantatges en l’entorn empresarial, però requereix condicions marc clares: comptes de servei, SPNs (Service Principal Names) i rutes Kerberos han d’estar correctes, especialment quan s’accedeix a través de diversos salts (p. ex. servidor de terminal a la base de dades).

    Una modernització pràctica sovint és: Windows Autenticació per a components de servidor (Windows-servei, REST-servidor) i inicis de sessió clarament regulats per a casos especials – cadascun amb permisos mínims.

    Concepte de permisos: menys és més estable

    La tolerància a fallades també depèn dels permisos. Permisos massa amplis provoquen «efectes secundaris»: canvis inesperats d’esquema, esborrats de dades o l’elusió de regles funcionals. Són recomanables:

    • Rols de BD per aplicació (lectura, escriptura, administració separats),
    • Permisos explícits en lloc de pertinença a rols estàndard amb privilegis amplis,
    • Separació clara entre DDL (canvis d’esquema) i DML (canvis de dades) mitjançant desplegaments.

    Rendiment i estabilitat: pooling de connexions, timeouts, bloqueigs

    Molts problemes de rendiment no són «el SQL Server és lent», sinó conseqüència d’estratègies de client inconsistents: massa connexions, timeouts incorrectes, accions d’interfície d’usuari que travessen transaccions o consultes no parametritzades. Modernitzar aquí significa fer que l’accés a dades sigui previsible.

    Connexions: Obrir/Tancar vs. Pooling

    En aplicacions d’escriptori és habitual obrir connexions sota demanda. En processos de servidor (Windows-servei, REST-servidor) el pooling de connexions és determinant per absorbir pics de càrrega. Pooling vol dir: les connexions es reutilitzen en lloc de crear-ne de noves per a cada petició. Això redueix la sobrecàrrega d’inici de sessió i estabilitza els temps de resposta.

    És important la cara operativa: el pooling necessita límits clars, timeouts d’inactivitat raonables i monitoratge perquè les connexions «penjades» es facin visibles. Altrament només es desplacen els problemes.

    Timeouts: tres nivells, un objectiu

    En escenaris amb SQL Server els timeouts actuen en diversos nivells: xarxa/socket, inici de sessió/handshake i command-timeout (temps d’execució). Una connexió moderna implica establir aquests valors de manera conscient i justificar-los per cada cas d’ús (p. ex. cerca interactiva vs. procés batch nocturn).

    En explotació ha de ser traçable si un timeout és causat per falta d’índexs, bloqueigs o problemes de xarxa. Això només funciona si l’aplicació registra el context (tipus de consulta, paràmetres, durada, nom del servidor).

    Controlar transaccions i bloqueigs (locking)

    Les transaccions són un tema central per a l’estabilitat. Una transacció és una seqüència coherent de canvis de dades que o bé s’apliquen completament o no s’apliquen gens. En la pràctica sorgeixen problemes quan les transaccions es mantenen obertes massa temps — per exemple perquè dins la transacció es realitzen accions d’UI, confirmacions d’usuari o accés a fitxers.

    Passos de modernització que actuen immediatament:

    • Definir límits de transacció per operació funcional (p. ex. «registrar una comanda»), no per formulari.
    • Evitar esperes interactives dins d’una transacció (diàlegs, càlculs llargs, impressió/PDF).
  • Fer analitzables els deadlocks: ampliar el tractament d’errors per tal que es puguin identificar les víctimes de deadlock i aplicar estratègies de reintents de manera dirigida.
  • Augmentar la mantenibilitat: encapsular SQL, imposar la parametrizació, millorar el diagnòstic d’errors

    Molts projectes existents Delphi pateixen menys per «massa poques funcionalitats» que per un accés a dades poc clar. La mantenibilitat neix quan les consultes SQL i la lògica de dades no estan distribuïdes per tot arreu, sinó localitzades de manera rastrejable en pocs punts.

    Les cadenes SQL a la UI són un risc de manteniment

    Si cada formulari construeix les seves pròpies cadenes SQL, cada canvi d’esquema esdevé car. A més augmenten els riscos de seguretat (p. ex. SQL Injection) i el diagnòstic es complica. Una aproximació moderna és una capa d’accés a dades que:

    • gestiona centralment els SQL-Statements (per mòdul/cas d’ús),
    • utilitza la parametrització de manera consistent (en lloc de concatenació de cadenes),
    • retorna dades en estructures clares (en lloc de «dataset a tot arreu»).

    Per a equips amb pocs recursos de desenvolupament, ja és útil un pas intermedi: una fàbrica de consultes unificada i regles clares sobre on pot residir l’SQL.

    Stored Procedures vs. Inline SQL: realitat operativa en lloc de qüestió de fe

    Les Stored Procedures (procediments emmagatzemats en SQL Server) poden aportar avantatges: lògica centralitzada, conceptes de permisos i sovint plans d’execució més estables. L’SQL en línia, en canvi, és més ràpid de modificar i per a molts equips és més fàcil de versionar dins del mateix procés de release que l’aplicació.

    En la pràctica és habitual una estratègia mixta:

    • Operacions d’escriptura crítiques (com assentaments o moviments d’estoc) més aviat procedurals quan els permisos i la consistència tenen prioritat.
    • Consultes amb càrrega de lectura (cerques, llistes, informes) preferiblement com SQL versionat dins l’aplicació – però correctament parametritzat i provat.

    El que importa no és tant el «on», sinó que els desplegaments, les reversions i les dependències estiguin definits i comprensibles.

    Diagnòstic d’errors: del text d’excepció a un senyal operable

    Moltes aplicacions només registren «error en desar». Per a l’operació i el suport de 2n nivell això no serveix. Modernitzar vol dir: informació d’error estructurada, sense filtrar dades sensibles. Elements de registre útils són:

    • Correlació: Request-ID o ID d’operació per unir les línies de log.
    • Context tècnic: servidor/instància, base de dades, tipus d’autenticació, controlador, durada.
    • Classe SQL: nom de la consulta/cas d’ús, no cal el text SQL complet.
    • Categoria d’error: timeout, deadlock, incompliment de constraints, xarxa, autenticació.

    Així la diferència entre «només veiem símptomes» i «podem delimitar les causes de manera clara» és molt gran en la pràctica.

    Canvis d’esquema i de dades: fer la migració planificable

    Qui modernitza la connexió a SQL Server gairebé sempre toca també l’esquema: tipus de dades, índexs, constraints, col·lació o la introducció de noves taules per a integracions. Sense disciplina de migracions es crea un sistema fràgil que funciona en un entorn de proves però trenca en staging/producció.

    Migracions de base de dades versionades en lloc d’intervencions manuals

    Un enfoc robust és tractar els canvis de base de dades com a llançaments d’aplicació: versionats, repetibles i amb condicions prèvies clares. Això es pot fer amb scripts de migració, un paquet de desplegament o un job de release. El que importa no és l’eina sinó la norma:

    • Cap «modificació manual» a producció sense traçabilitat.
    • Estratègia de rollback almenys per a canvis crítics (o un pla clarament «forward-only»).
    • Entorn de staging, que reprodueixi les dades de producció de manera realista (mascarament si cal).

    Tipus de dades i Unicode: evitar errors silenciosos

    Especialment en aplicacions Delphi antigues, les assumpcions històriques (ANSI-Strings, col·lacions antigues) topen amb requisits moderns (Unicode, multilingüisme, nous clients). A nivell de SQL Server, els tipus NVARCHAR/Unicode són l’estàndard. Modernitzar aquí significa: definir conscientment com funcionen la codificació de caràcters, l’ordenació i la comparació. Si no, apareixeran errors difícils de reproduir en cerques, comprovació de duplicats o exportacions d’interfícies.

    Arquitectura: desacoblar l’accés a dades i obrir-lo per a interfícies

    A moltes empreses l’aplicació Delphi ja no és l’única: portals, proveïdors externs, BI, DMS o integracions ERP accedeixen a les mateixes dades. Quan es modernitza la connexió a la base de dades, és un bon moment per orientar l’arquitectura perquè permeti el creixement.

    Layering: límits clars entre UI, lògica de negoci i accés a dades

    Un patró provat és una arquitectura en capes (p. ex., presentació, lògica de negoci, accés a dades). Pot semblar abstracte, però té efectes molt concrets en el funcionament:

    • Els canvis són més locals: un camp nou no necessita 20 ajustos de formularis amb cadenes SQL.
    • Es poden fer proves: la lògica de negoci pot executar-se amb dades de prova, sense una connexió real a la DB.
    • La seguretat es pot implementar centralment: registre, comprovacions de permisos, parametrització.

    Per a passos posteriors com Delphi REST-API o un Delphi REST-API i REST-Server aquesta desconnexió és la base: llavors no s’obre la base de dades a Internet, sinó que casos d’ús definits es posen a disposició com a interfície.

    Funcionament paral·lel: barrejar de manera controlada els accessos a dades antics i nous

    A la pràctica no sempre es pot fer un canvi «Big Bang». Un enfoc pragmàtic és fer que els nous accessos a dades funcionin pel nou estàndard mentre els mòduls antics continuen operant. Important:

    • Regles de transacció unificades, per evitar que dues tecnologies operin en conflicte.
    • Configuració comuna (Server, DB, xifrat, timeouts) d’una sola font.
    • Límits de migració clars: per cas d’ús o mòdul, no «una mica per tot arreu».

    Operació i administració: configuració, monitorització, procés de llançament

    Una connexió a SQL Server modernitzada només està «llesta» quan funciona correctament en producció: paràmetres rastrejables, logs clars, llançaments planificables i monitorització que faci visibles no només l’ús de CPU sinó també els problemes d’aplicació.

    Configuració: reproduïble i específica per entorn

    Entre desenvolupament, prova, staging i producció varien noms de servidors, certificats, autenticació i a vegades fins i tot noms de base de dades. Això no s’hauria de resoldre amb canvis de codi, sinó amb una estratègia clara de configuració (fitxer, secret-store, paràmetres de desplegament). El fonamental és: mateix build, altra configuració – i un mecanisme que detecti errors de configuració aviat.

    Monitorització: complementar les mètriques de SQL Server amb mètriques d’aplicació

    SQL Server ofereix moltes possibilitats de diagnosi (Wait Stats, Query Store, anàlisis de bloqueig). Per obtenir una imatge completa també calen mètriques d’aplicació: temps de resposta per cas d’ús, taxes d’error, nombre d’operacions de BD paral·leles, reintents després de deadlocks. Això permet als responsables IT determinar si un problema prové de la base de dades, de la xarxa o de l’aplicació.

    Procés de release: concebre base de dades i aplicació de manera conjunta

    Si l’aplicació Delphi i la base de dades es despleguen per separat, apareixen errors típics: la nova aplicació espera una nova columna, la migració de la base de dades encara no s’ha desplegat (o a l’inrevés). Per això, un procés de release modern defineix:

    • Ordre (p. ex. migració primer, app després),
    • Finestra de compatibilitat (les versions de l’aplicació poden funcionar durant un període amb l’esquema antic),
    • Proves bàsiques post-desplegament (login, casos d’ús principals, operació d’escriptura).

    Reducció de riscos en projectes: com modernitzar sense aturar el servei

    Tècnicament moltes coses són possibles, però la realitat dels projectes és: finestres de manteniment limitades, poca cobertura de proves i el servei ha de continuar. Ha demostrat ser efectiu un enfocament per etapes clares.

    Pla d’etapes que funciona en entorns existents

    1. Establir la línia base: documentar els patrons d’error actuals, timeouts, consultes més pesades i la configuració dels servidors.
    2. Definir un estàndard de configuració: regles de connection string, TLS/Trust-Policy, timeouts, Application Name.
    3. Introduir l’accés a dades nou: FireDAC (o l’estàndard escollit) com a capa definida, inicialment per a casos d’ús seleccionats.
    4. Millorar la diagnosi: logging, correlació, categories d’errors, funcions opcionals de rastreig SQL en cas de suport.
    5. Substitució gradual: migrar mòduls, afegir proves de regressió, eliminar rutes antigues.
    6. Enduriment i operació: monitoring, processos de release, finalitzar el concepte de permisos.

    El decisiu: cada etapa aporta un benefici independent. Així, la modernització es justifica fins i tot si no es pot abordar tot el sistema de cop.

    Conclusió: la connexió moderna a SQL Server és un projecte d’operació, no un simple refactoring

    La modernització de la connexió a SQL Server en Delphi és més que un canvi de components. Afecta el nivell de seguretat, la capacitat de diagnosi, l’estabilitat del release i la pregunta de com la seva aplicació de negoci gestiona requeriments creixents. Qui estandaritza de forma conscient l’estratègia de drivers, l’autenticació, el disseny de transaccions i el logging, redueix riscos operatius i crea una base per a passos posteriors com interfícies REST, integracions de portal o una modernització progressiva de Delphi.

    Si voleu evolucionar tècnicament i de manera robusta la vostra infraestructura Delphi existent i modernitzar de forma estructurada la connexió a SQL Server, poseu-vos en contacte amb nosaltres:

    En l’àmbit funcional també tenen un paper important Delphi FireDAC SQL Server i Delphi Ado Ersetzen quan cal que les integracions, els fluxos de dades i el desenvolupament continu cooperin de manera ordenada.

    Parli sobre un projecte o un procés de modernització amb Net-Base.

    Pas següent

    Quan d'un tema se'ndevé un projecte real, s'han de considerar aviat i de manera conjunta l'arquitectura, els actius existents i l'operació.

    No només donem suport en qüestions puntuals, sinó també quan, a partir de fragments de codi font, temes de sistemes heredats o idees de portal, ha de sorgir un projecte empresarial sòlid.

    • L'estat actual, la visió objectiu i els riscos tècnics s'avaluen conjuntament.
    • REST, accés a dades, portals i desplegament no es posposaran com a efectes retardats.
    • Veu aviat quin camí és viable des del punt de vista econòmic i operatiu.

    Comparteix la publicació

    Comparteix aquesta publicació directament

    LinkedIn, X, XING, Facebook, WhatsApp i correu electrònic estan disponibles immediatament. Per Instagram preparem l'enllaç i un text curt immediatament.

    Correu electrònic

    Instagram s'obre en una pestanya nova. L'enllaç i el text curt es copien prèviament al porta-retalls.