Wie kent of gebruikt de Firedac component LocalSQL wel eens? Of de BatchMove? Bij de meeste ontwikkelaars zijn deze componenten relatief onbekend, terwijl ze wel heel handig zijn. In twee blogs wil ik de meerwaarde van deze componenten uitleggen en laten zien hoe ze werken. Deze blog gaat over de LocalSQL component.
Met behulp van de LocalSQL dataset kun je data uit verschillende datasets combineren in een Firedac query. De component zorgt ervoor dat datasets beschikbaar worden als ware het database tabellen. Datasets zijn daardoor met een SQL query te bevragen vanuit een TFDQuery component.
Dat is erg handig als je data uit verschillende bronnen hebt. Bijvoorbeeld uit meerdere databases. Of deels in memory en uit de database. Of vanuit verschillende dataset componenten, bijvoorbeeld ADO en Firedac. Met LocalSQL kun je deze data heel eenvoudig bij elkaar brengen met een simpele SQL query. Het geeft je de mogelijkheid om de gecombineerde data heel gemakkelijk in een grid laten zien of gecombineerde statistieken te maken.
Hieronder werk ik een voorbeeld uit, waarbij ik data uit een CSV combineer met data uit de database. In de database heb ik klanten vastgelegd met een id en naam. In de CSV wordt alleen het id van de klant gebruikt. Bij het tonen van de inhoud van de CSV wil ik direct de naam van de klant laten zien. Dat kan met LocalSQL zonder al teveel moeite.
Hieronder zie je de opzet van mijn applicatie. Links is de connectie met de database met daarin de tabel Customer. Die wordt uitgelezen via de QueryCustomers. Aan de rechterkant zie je de CsvDataset, een Firedac MemTable. Daarin wordt door de CsvMove (TFDBatchMove) de data uit de CSV geladen.
In het midden zie je de LocalSQL component, die ik CombinedLocalSQL heb genoemd. Onder water maakt deze component gebruik van SQLite en vereist daarom een SQLite connectie. Die connectie hoef je verder niet te configureren, alleen maar aangeven dat de driver SQLite is. In dit geval is dat de LocalSQLConnection. De CombinedDataset component is een TFDQuery met daarin de SQL query die de gegevens uit de datasets verzamelt.
De grid toont eerst twee kolommen met de customer gegevens uit de database. De drie kolommen daarna komen uit de CSV.
De LocalSQL component maakt datasets dus beschikbaar alsof het database tabellen zijn. Om dat mogelijk te maken, geven we aan welke datasets we willen gebruiken en welke “tabelnaam” ze krijgen. In de properties van de LocalSQL component vind je daarvoor de optie “DataSets” (zie afbeeldingen hieronder). Voeg de datasets toe en geef ze de naam die je als tabelnaam in de query wilt gebruiken.
Door de LocalSQL component op Active te zetten, kun je hierna de query live uitvoeren en zo bijvoorbeeld de velden eenvoudig toevoegen. Let daar wel mee op, want zodra je de query uitvoert, worden de onderliggende datasets ook op Active gezet.
We gebruiken een Firedac query om de LocalSQL toe te passen. De connectie van deze query is dezelfde als de LocalSQL connectie. En dat is alles. We kunnen nu de query gaan maken alsof we een tabel Customer en een tabel CsvLine hebben.
SELECT * FROM Customer c JOIN CsvLine csv ON (csv.CustomerId = c.CustomerId)
En dit kun je uiteraard uitbreiden en gebruiken met alle mogelijkheden die in (SQLite) SQL zitten. Denk aan de WHERE clause, maar ook aan aggegratie functies zoals SUM, COUNT, etc. De Firedac query werkt vervolgens zoals je gewend bent.
De LocalSQL component opent een diversiteit aan mogelijkheden om gegevens te combineren, te filteren en te aggegreren. Het is breed toepasbaar omdat het alle vormen van datasets ondersteunt. Het kan ingewikkelde datasets met lookup fields een stuk eenvoudiger maken. En het werkt snel en eenvoudig. Een aanrader om in je projecten toe te passen.
Contact