Nieuws

FoxSQL: AccountView SQL laten spreken zonder alles van ODBC afhankelijk te maken

FoxSQL is een TCP/IP-koppeling voor SQL-toegang tot AccountView- en Visual FoxPro-gegevens. C#-applicaties werken met vertrouwde databasebegrippen, terwijl de echte FoxPro-engine zijn eigen werk blijft doen. Niemand hoeft bij kaarslicht DBF-bestanden te ontleden.

FoxSQL: AccountView SQL laten spreken zonder alles van ODBC afhankelijk te maken

Het idee begon met een eenvoudige maar riskante vraag: kunnen AccountView-gegevens vanuit C# aanvoelen als een gewone databaseverbinding? Niet “een CSV exporteren en hopen” en ook niet “nog een algemene provider installeren en doen alsof 1998 prima is”. Een echte client-API: een verbinding openen, SQL versturen, parameters binden, rijen ontvangen, door grote resultaten bladeren en diagnostiek bekijken als de computer het zwaar krijgt.

Die vraag is relevant omdat veel bedrijven waardevolle FoxPro-gegevens hebben waarmee het bedrijf nog prima draait. Ondertussen is de software eromheen doorgegroeid naar webdashboards, mobiele schermen, API’s, services en wachtrijen, met ontwikkelaars die zenuwachtig worden als een productiekoppeling afhangt van een gekoppelde netwerkschijf en goede hoop.

De eerste keuze was de belangrijkste: FoxSQL probeert geen nieuwe FoxPro te worden. Het bouwt DBF, CDX, FPT, vergrendeling, buffering en de vele kleine regels van AccountView niet opnieuw. Visual FoxPro blijft de uitvoering verzorgen. FoxSQL levert de moderne verbinding; FoxPro blijft verantwoordelijk voor het gedrag van de gegevens. Dat is minder spectaculair dan een database-engine uitvinden, maar veel minder riskant voor iemands administratie.

Wat FoxSQL nu kan

C#-toegang in ADO.NET-stijlOntwikkelaars gebruiken FoxSqlConnection, FoxSqlCommand, FoxSqlDataAdapteren FoxSqlCursor. Het voelt daardoor als databasewerk, niet als een archeologische opgraving.
SQL via een eigen TCP-protocolDe service gebruikt een klein protocol met afgebakende berichten via TCP, JSON voor besturingsgegevens en binaire rijframes waar prestaties tellen. REST blijft buiten het tijdkritische pad.
SELECT, paginering, parameters en gecontroleerd schrijvenFoxSQL ondersteunt SELECT-query’s via de echte FoxPro-engine, LIMIT-vormen in MySQL-stijl, parameters die op de server worden gebonden, expliciet in te schakelen INSERT/UPDATE/DELETE en verplichte WHERE-controles voor UPDATE en DELETE. Flexibel, maar niet roekeloos.
Snelle verwerking voor dagelijkse schermenEenvoudige bladerquery’s kunnen DBF rechtstreeks alleen-lezen doorzoeken. Herhaald pagineren kan resultaatcaches hergebruiken. Servercursors houden kostbare resultaatsets open, zodat scrollen in een tabel niet bij elke muisbeweging de hele query opnieuw uitvoert.
Diagnostiek die duidelijkheid geeftElk resultaat kan metingen geven van servicetijd, Fox-querytijd, exporttijd, leestijd van rijen, COM-aanroepen, aantallen rijen en cellen en het gebruikte uitvoeringspad. Optimaliseren gaat eenvoudiger als de software vertelt wat er gebeurt.

De opbouw van de koppeling

De architectuur is bewust praktisch. Een C#-applicatie gebruikt FoxSQL.Client, dat een TCP-verbinding uit een pool opent naar FoxSQL.Service. De service laat toegang tot de Fox-runtime na elkaar plaatsvinden en voert het toegestane SQL-pad uit. Visual FoxPro blijft de engine voor complexe query’s en gegevenswijzigingen. C++ verzorgt de Windows- en FoxPro-koppeling op laag niveau, want 32-bits COM wordt niet vanzelf elegant als we het vriendelijk vragen.

C# app -> FoxSQL.Client -> pooled TCP connection -> FoxSQL.Service -> Visual FoxPro / AccountView data -> binary rowset frame back to C#

Die scheiding telt. C# wijzigt DBF/CDX/FPT-bestanden nooit rechtstreeks. De koppeling vermijdt een COM-aanroep per rij, meet kostbaar FoxPro-werk en laat schrijven alleen toe via configuratie. Als een scherm pagina 17 van een groot gesorteerd resultaat nodig heeft, haalt FoxSQL een venster met rijen op in plaats van voor de zeventiende keer alles opnieuw op te bouwen.

Hoe de ontwikkeling verliep

Het proces was niet rechtlijnig, zoals vaak bij echte software. We begonnen met een haalbaarheidsproef: aantonen dat FoxPro en AccountView bereikbaar waren, dat gegevens zonder OLE DB of ODBC konden worden verplaatst en dat de service een runtime actief kon houden in plaats van voor elk statement opnieuw duur opstartwerk te doen.

Daarna groeide het project in lagen: eerst het protocol en de afspraken met de C#-client, vervolgens resultaatserialisatie, SQL-classificatie en parameterbinding, paginering, wijzigingsregels, snelle UPDATE/DELETE-paden voor RECNO, ongeldig maken van resultaatcaches, verbindingspools, opschonen van gedeelde Fox-toestand, bufferhergebruik, DBF-resultaten in bulk lezen en ten slotte expliciete servercursors. Het interessante soort infrastructuurwerk, waarbij elke milliseconde te herleiden is.

Benchmarks bepaalden mede het ontwerp. Een eenvoudige UPDATE met WHERE RECNO() = ... kan via het verkeerde pad onbedoeld de hele tabel doorlopen. FoxSQL kreeg daarom specifieke recordnummerpaden die de native recordpositionering gebruiken wanneer de applicatie het record al kent. Dat is geen voortijdige optimalisatie, maar een zichtbaar obstakel gericht wegnemen.

Wat hierna komt

De volgende stap is FoxSQL bruikbaar maken buiten .NET-applicaties. De C#-client is de eerste volwaardige interface, omdat deze duidelijke databaseafspraken biedt: verbindingsreeksen, commando’s, parameters, adapters, readers, cursors en voorspelbare foutafhandeling. Maar de koppeling is niet bedoeld om bij desktop- of C#-servicecommunicatie te blijven.

Er is een directe JSON-antwoordmodus gepland. Aanroepers kunnen dan gegevens opvragen en heldere JSON ontvangen zonder eerst alles in een DataTable om te zetten. Dat maakt lichte koppelingen, beheerpanelen, mobiele endpoints en webtools mogelijk, waar JSON de natuurlijke vorm is. Het binaire rijformaat blijft snel voor zware clients; JSON kan een toegankelijke ingang worden voor de rest.

Ook PHP-websites kunnen daarmee volwaardige afnemers worden. Een PHP-site moet FoxSQL kunnen aanroepen, een toegestane query uitvoeren, parameters binden en actuele AccountView-gegevens op een pagina tonen, zonder DBF-bestanden aan te raken, ODBC-drivers te installeren of de webserver oude desktoprituelen aan te leren. De website vraagt gegevens op, FoxSQL handelt FoxPro af en AccountView blijft het leidende systeem.

Daarmee wordt FoxSQL waar de naam altijd op doelde: een echte SQL-serverlaag boven op FoxPro en AccountView. Geen Microsoft SQL Server en geen databasevermomming, maar een serverproces met protocol, authenticatie, querycontrole, uitvoeringsbeleid, diagnostiek, resultaatformaten en meerdere clienttypen. Bestaande gegevens, moderne toegang, duidelijke grenzen en minder nachtelijk gedoe met driverinstallaties.

Waar het op neerkomt

FoxSQL is interessant omdat het niet doet alsof oude gegevens modern worden door nieuwe termen te gebruiken. Het respecteert de bestaande engine, schermt riskante onderdelen af en geeft moderne applicaties een gecontroleerde ingang: verbindingspools, geparametriseerde commando’s, rijverzamelingen, diagnostiek, paginering, cursors, mogelijkheden voor JSON-koppelingen, installatiegereedschap en een Windows-service die kan worden getoetst voordat deze in productie gaat.

Het resultaat is een koppeling met karakter: FoxPro blijft doen waar het goed in is, C# krijgt een volwaardige database-API, PHP een duidelijke route naar actuele bedrijfsgegevens en ODBC hoeft niet meer voor elke trage query de schuld te krijgen.

Terug naar nieuws

Meer

Gerelateerde artikelen

22 mei 2026

Hamlet: een professionele publicatie-editor voor 4D ontwikkelen

Hamlet is een van de belangrijkste ontwikkelingen in ons huidige productplan: een native editor voor opgemaakte tekst, pagina-indeling en databasepublicaties, speciaal voor 4D. Het doel is ambitieus maar helder: 4D-ontwikkelaars een volwaardige documenteditor bieden die in een 4D-formulier draait, met echte databasegegevens werkt en professionele facturen, rapporten, brieven, templates en publicaties oplevert.

7 mei 2026

4D Agenda: van Carbon-code uit 2003 naar een moderne macOS-plug-in voor 2026

We hebben 4D Agenda ingrijpend gemoderniseerd: een klassieke 4D-plug-in uit het begin van deze eeuw kreeg een heldere, stabiele en moderne macOS-codebase. De oorspronkelijke code stamt uit ongeveer 2003 en had jarenlang trouw dienstgedaan, maar bevatte ook oude tekenroutines, platformvertakkingen, aannames uit het klassieke Mac-tijdperk en genoeg historische compatibiliteitscode om een museumconservator tevreden te stellen.

Wilt u met ons samenwerken?

Neem contact op, dan bespreken we uw project.