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 vulgui modernitzar la connexió a SQL Server en Delphi modernitzar, rarament es troba amb un problema de «funciona o no funciona». En moltes empreses, aplicacions d’escriptori Delphi consolidades o serveis Windows funcionen de manera fiable durant anys – fins que apareixen noves exigències: actualitzacions de Windows, noves versions de SQL Server, requisits de seguretat més estrictes, volums de dades més alts, més ubicacions o la necessitat d’encapsular netament les interfícies. Aleshores es fa evident com d’intensament influeixen l’accés a dades, el tractament d’errors i la lògica de transaccions en la gestió quotidiana de l’administració i l’operació.

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

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

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

  • Passius tècnics en l’accés a dades: rutes antigues ADO-/OLE-DB, configuracions ODBC «manuals», paràmetres de connexió incoherents o components mixtes dins del projecte.
  • Els valors predeterminats de seguretat ja no són adequats: requisits per xifrat TLS (xifrat de transport), verificació 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 cop apareixen timeouts, deadlocks o bloquejos llargs.
  • La mantenibilitat es veu afectada: cadenes SQL en formularis, manca de parametrització, «try/except» sense context de diagnosi, límits de transacció poc clars.
  • Saltos de plataforma i versions: actualització a noves versions de SQL Server o de 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: operació clara, configuració reproductible, logs amb informació rellevant i un accés a dades que es pot provar i renovar de forma gradual.

Documentar bé l’estat actual: abans d’implementar simplement «FireDAC»

Abans de substituir components, convé fer una breu i estructurada presa d’estat. Més endavant això estalvia dies de cerca d’errors perquè posa en evidència dependències que en projectes antics sovint existeixen només de manera implícita.

Llista de comprovació: Què cal respondre en l’anàlisi?

  • Quina tecnologia d’accés? ADO (a través d’OLE DB), ODBC, dbExpress, RESTes de BDE, llibreries propietàries – i on estan distribuïdes al codi?
  • Com es construeixen les connexions? Connection-String central o per mòdul? Hi ha fitxers de configuració, entrades al registre, variables d’entorn?
  • Com s’authentica? Inici de sessió SQL, autenticació Windows (autenticació integrada), comptes de servei, Kerberos/NTLM, si escau modes mixtes.
  • Com s’utilitzen les transaccions? Per cada 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.
  • Quins entorns d’explotació? estació de treball local, servidor de terminal, Citrix, Windows- und Linux-Services, tasques programades, diverses ubicacions amb VPN.
  • Un resultat d’aquesta fase hauria de ser una petita imatge objectiu: quins mòduls es modernitzaran primer, quines configuracions s’estandarditzaran i quins riscos (p. ex. canvi d’autenticació) es tractaran de manera separada i conscient.

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

    Per a molts sistemes Delphi la decisió clau és: com ens comuniquem tècnicament amb SQL Server — i com ho estandarditzem a través de tots els mòduls? En stacks modernes 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 reflectir de manera clara requisits operatius típics com el pooling i el registre.

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

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

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

    Substituir o encapsular ADO?

    Molts sistemes fan servir ADO perquè aleshores „era fàcil“. Avui ADO no és automàticament erroni, però sovint és un obstacle per a valors per defecte de seguretat uniformes, 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 ja quedin correctament connectats.
    • Substituir pas a pas: els mòduls o casos d’ús es migren successivament a FireDAC, acompanyats de proves de regressió i operació en paral·lel.

    Quina variant s’ajusta depèn de la pressió de llançament, de la cobertura de proves i de la complexitat de la lògica SQL — i menys de la simple quantitat de formularis.

    Seguretat en la connexió a la base de dades: TLS, identitats i gestió clara de permisos

    Des del punt de vista operatiu, la connexió a la base de dades és un tema central de seguretat. Es tracta de xifrat del transport, identitats, permisos mínims i una configuració rastrejable. Especialment en aplicacions amb història, els valors per defecte sovint són històrics i no fruit d’una decisió conscient.

    Xifrat del transport (TLS) i verificació de certificats

    SQL Server pot xifrar connexions per TLS. No n’hi ha prou amb activar „Encrypt“, és també crucial la verificació del certificat i una gestió de certificats consistent (p. ex. Subject Alternative Names correctes). Altrament es cau en la trampa: xifrat activat, però mitjançant „Trust Server Certificate“ de facto sense una verificació real.

    Per als administradors això implica: 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 Authentication

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

    Una modernització pràctica sovint és: Windows Authentication per a components de servidor (Windows- und Linux-Services, REST-Server) i inicis de sessió 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 d’esquema inesperats, eliminacions de dades o la circumvenció de regles de negoci. Són recomanables:

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

    Rendiment i estabilitat: pooling de connexions, timeouts, bloquejos

    Molts problemes de rendiment no són „SQL Server és lent“, sinó conseqüència d’estratègies de client incoherents: massa connexions, timeouts incorrectes, accions d’interfície d’usuari que travessen transaccions o consultes sense paràmetres. Modernitzar aquí significa fer l’accés a dades previsible.

    Connexions: Obrir/Tancar vs. Pooling

    En aplicacions d’escriptori és habitual obrir connexions segons necessitat. En processos de servidor (Windows-Service, REST-Server) el pooling de connexions és decisiu per absorbir pics de càrrega. Pooling significa: les connexions es reutilitzen en lloc de crear-ne de noves per cada petició. Això redueix la sobrecàrrega d’autenticació i estabilitza els temps de resposta.

    La vessant operativa és clau: el pooling necessita límits clars, timeouts d’inactivitat raonables i monitoratge, perquè les connexions „penjades“ siguin visibles. Si no, només s’estan traslladant els problemes.

    Timeouts: tres nivells, un objectiu

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

    En operació ha de ser rastrejable si un timeout es deu a índexs que falten, bloquejos o problemes de xarxa. Això només funciona si l’aplicació registra el context (tipus de consulta, paràmetres, durada, nom del servidor).

    Fer manejables les transaccions i els bloquejos (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’aplica completa o no s’aplica. A la pràctica es generen problemes quan les transaccions queden obertes massa temps — per exemple perquè dins de la transacció es fan accions de la interfície d’usuari, confirmacions d’usuari o accessos a fitxers.

    Passos de modernització que tenen efecte immediat:

    • Definir límits de transacció per operació de negoci (p. ex. «registrar comanda»), no per formulari.
    • Evitar esperes interactives dins d’una transacció (diàlegs, càlculs llargs, impressió/PDF).
    • Fer que els deadlocks siguin analitzables: ampliar la gestió d’errors perquè es puguin identificar les víctimes de deadlock i aplicar estratègies de reintents dirigides.

    Augmentar la mantenibilitat: encapsular SQL, exigir la parametrització, millorar el diagnòstic d’errors

    Molts projectes existents Delphi pateixen menys per «poca funcionalitat» que per un accés a dades poc clar. La mantenibilitat neix quan l’SQL i la lògica de dades no estan dispersos per tot arreu, sinó que són rastrejables en pocs punts.

    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 serà costós. 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 les sentències SQL (per mòdul/cas d’ús),
    • utilitza la parametrització de forma consistent (en lloc de concatenar cadenes),
    • retorna les dades en estructures clares (en lloc de «Dataset arreu»).

    Per a equips amb poca capacitat de desenvolupament ja és valuós un pas intermedi: una fàbrica de consultes uniforme i regles fixes sobre on pot residir l’SQL.

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

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

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

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

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

    Diagnòstic d’errors: del text de l’excepció a un senyal accionable

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

    • Correlació: Request-ID o ID d’operació per agrupar les línies de registre.
    • Context tècnic: servidor/instància, base de dades, tipus d’inici de sessió, controlador, durada.
    • Classe SQL: nom de la consulta/cas d’ús, no necessàriament el text SQL complet.
    • Categoria d’error: timeout, deadlock, violació de constraints, xarxa, login.

    Això fa que la diferència entre «només veiem símptomes» i «podem delimitar clarament les causes» sigui, en la pràctica, molt gran.

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

    Qui modernitza la connexió amb el SQL Server gairebé sempre toca també l’esquema: tipus de dades, índexs, constraints, col·lació o la creació de noves taules per a integracions. Sense disciplina de migracions sorgeix 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 enfocament robust és tractar els canvis de base de dades com a releases d’aplicació: versionats, repetibles, amb condicions prèvies clares. Això es pot fer amb scripts de migració, un paquet de desplegament o un job de release. L’important no és l’eina sinó la regla:

    • No fer «canvis manuals» a producció sense traçabilitat.
    • Estratègia de rollback almenys per a canvis crítics (o, més clarament, un pla «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

    Precisament en aplicacions més antigues de Delphi es troben suposicions històriques (ANSI-Strings, col·lacions antigues) amb requisits moderns (Unicode, multillenguatge, nous clients). A nivell de SQL Server, els tipus NVARCHAR/Unicode són l’estàndard. Modernitzar vol dir aquí: definir de manera conscient com funcionen la codificació de caràcters, l’ordenació i la comparació. Si no, apareixeran errors difícils de reproduir en cerques, comprovacions de duplicats o exportacions d’interfícies.

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

    En 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 creixement.

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

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

    • Els canvis són més localitzats: un camp nou no necessita 20 adaptacions de formularis amb cadenes SQL.
    • És possible fer proves: la lògica de negoci pot executar-se amb dades de prova, sense connexió real a la BD.
    • La seguretat es pot implementar de forma central: registre, comprovacions de permisos, parametrització.

    Per a passos posteriors com Delphi REST-API o un Delphi REST-API und REST-Server, aquest desacoblament és la base: no es tracta d“obrir la base de dades a Internet“, sinó de proporcionar casos d’ús definits com a interfície.

    Funcionament en paral·lel: combinar de manera controlada accessos a dades antics i nous

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

    • Regles de transacció uniformes, perquè no hi hagi conflicte entre tecnologies.
    • Configuració comuna (servidor, BD, xifrat, temps d’espera) des d’una sola font.
    • Límits de migració clars: per cas d’ús o mòdul, no «una mica per tot arreu».

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

    Una connexió modernitzada a SQL Server només està „llesta“ quan funciona correctament en explotació: paràmetres traçables, registres clars, llançaments planificables i monitorització que mostri no només l’ús de CPU sinó també problemes de l’aplicació.

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

    Entre desenvolupament, prova, staging i producció els noms de servidor, certificats, autenticació i de vegades fins i tot els noms de base de dades són diferents. Això no s’ha de resoldre amb canvis de codi, sinó amb una estratègia clara de configuració (fitxer, magatzem de secrets, paràmetres de desplegament). Decisiu: mateix build, configuració diferent – i un mecanisme que detecti aviat les configuracions errònies.

    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 bloqueigs). Per obtenir una imatge completa cal també disposar de mètriques d’aplicació: temps de resposta per cas d’ús, taxes d’errors, nombre d’operacions de BD paral·leles, reintents després de deadlocks. Això permet als responsables d’IT decidir si un problema prové de la base de dades, de la xarxa o de l’aplicació.

    Procés de desplegament: pensar la base de dades i l’aplicació conjuntament

    Quan l’aplicació Delphi i la base de dades es despleguen per separat, sorgeixen 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 desplegament modern defineix:

    • Ordre (p. ex. migració primer, aplicació després),
    • Finestra de compatibilitat (les versions de l’aplicació poden funcionar durant un període amb l’esquema antic),
    • Proves de fum (Smoke Tests) després del desplegament (inici de sessió, casos d’ús bàsics, operació d’escriptura).

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

    Tècnicament es pot fer gairebé de tot, però la realitat del projecte és: finestres de manteniment limitades, poca cobertura de proves, el funcionament ha de continuar. Ha demostrat ser eficient un enfocament en etapes clares.

    Pla d’etapes que funciona en entorns existents

    1. Establir la línia de base: documentar els patrons d’errors actuals, els temps d’espera, les consultes principals i la configuració del servidor.
    2. Definir un estàndard de configuració: regles per a la cadena de connexió, TLS/política de confiança, temps d’espera, 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: registre (logging), correlació, categories d’errors, funcions opcionals de trace SQL en cas d’incidència de suport.
    5. Sustitució gradual: migrar mòduls, afegir tests de regressió, eliminar rutes antigues.
    6. Enduriment i explotació: monitoratge, procediments de desplegament, finalitzar el model de permisos.

    L’important: cada etapa aporta un benefici independent. Així la modernització es justifica fins i tot quan no es pot abordar immediatament tot el sistema.

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

    La modernització de la connexió a SQL Server a Delphi és més que un canvi de components. Afecta el nivell de seguretat, la capacitat de diagnosi, l’estabilitat dels desplegaments i la capacitat del seu programari empresarial per atendre requisits creixents. Qui estandarditza de manera conscient l’estratègia de controladors, l’autenticació, el disseny de transaccions i el logging redueix riscos operatius i crea una base per a passos posteriors com interfícies REST, connexions a portals o una modernització gradual de Delphi.

    Si vol continuar desenvolupant de manera tècnicament robust el seu entorn Delphi i modernitzar estructuradament la connexió a SQL Server, parli amb nosaltres:

    En l’àmbit funcional, també tenen un paper important Delphi FireDAC SQL Server i la substitució d’Ado en Delphi quan les integracions, els fluxos de dades i el desenvolupament continu han de funcionar de forma coherent.

    Parli sobre el projecte o la iniciativa de modernització amb Net-Base.

    Pas següent

    Quan un tema esdevé un projecte real, l'arquitectura, l'entorn existent i les operacions s'haurien de considerar conjuntament des de bon començament.

    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, l'accés a les dades, els portals i el desplegament no es releguen a fases posteriors.
    • Vostè veurà aviat quin camí és econòmicament i operativament viable.

    Comparteix la publicació

    Comparteix aquesta publicació directament

    LinkedIn, X, XING, Facebook, WhatsApp i E-Mail estan disponibles de forma immediata. Per a Instagram preparem directament l’enllaç i un text breu.

    Correu electrònic

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