{"id":5001,"date":"2024-01-18T13:39:38","date_gmt":"2024-01-18T12:39:38","guid":{"rendered":"https:\/\/gdksoftware.com\/?post_type=knowledge&#038;p=5001"},"modified":"2024-01-18T15:00:37","modified_gmt":"2024-01-18T14:00:37","slug":"werken-met-firedac-batchmove","status":"publish","type":"knowledge","link":"https:\/\/gdksoftware.com\/nl\/kennisbank\/werken-met-firedac-batchmove","title":{"rendered":"Werken met Firedac BatchMove"},"content":{"rendered":"<p>Wie kent of gebruikt de Firedac component <b>BatchMove <\/b>wel eens? Of de\u00a0<strong>LocalSQL<\/strong>? 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 <b>BatchMove <\/b>component.<\/p>\n<h5>De meerwaarde<\/h5>\n<p>Met de BatchMove kun je eenvoudig data verplaatsen tussen verschillende data bronnen en data structuren. Denk aan data uit een CSV inladen in een DataSet, of de inhoud van een DataSet exporteren naar een JSON file, of het resultaat van een database query wegschrijven in een andere database.<\/p>\n<p>Een batch move bestaat daarom altijd uit een Reader en een Writer. Je hebt readers voor Textbestanden, een SQL query en voor DataSets. Er zijn ook Writers voor Textbestanden, SQL en DataSet, maar daarnaast ook nog voor JSON. Je kunt met deze Readers en Writers dus alle mogelijke combinaties maken, om data te verplaatsen tussen verschillende bronnen. En dat gaat veel eenvoudiger en sneller dan het handmatig code schrijven voor dergelijke situaties.<\/p>\n<h5>De basisopzet<\/h5>\n<p>Hieronder zie je de opzet van mijn applicatie. Links is er een connectie met de database en de QueryCustomers die de data uit de database inleest. Aan de rechterkant zie je de CsvDataset, een Firedac MemTable. In deze dataset wordt door de CsvMove (<strong>TFDBatchMove<\/strong>) de data uit de CSV geladen. Om dat te kunnen is de CsvMove gekoppeld aan de CsvReader (<strong>TFDBatchMoveTextReader<\/strong>) en de CsvDatasetWriter (<strong>TFDBatchMoveDataSetWriter<\/strong>).<\/p>\n<p>De grid toont eerst twee kolommen met de customer gegevens uit de database. De drie kolommen daarna komen uit de CSV. Deze data wordt gecombineerd via de CombinedLocalSQL (<strong>TFDLocalSQL<\/strong>) component.<\/p>\n<p><img decoding=\"async\" class=\"alignnone wp-image-4943\" src=\"https:\/\/gdksoftware.com\/wp-content\/uploads\/2023\/12\/LocalSQL-demo-300x194.png\" alt=\"\" width=\"646\" height=\"418\" srcset=\"https:\/\/gdksoftware.com\/wp-content\/uploads\/2023\/12\/LocalSQL-demo-300x194.png 300w, https:\/\/gdksoftware.com\/wp-content\/uploads\/2023\/12\/LocalSQL-demo-768x496.png 768w, https:\/\/gdksoftware.com\/wp-content\/uploads\/2023\/12\/LocalSQL-demo.png 798w\" sizes=\"(max-width: 646px) 100vw, 646px\" \/><\/p>\n<h5>De configuratie voor het inlezen<\/h5>\n<p>De eerste stap is het inlezen van de CSV. Hiervoor configureren we de CsvReader component. In de screenshots hierna is te zien dat er diverse properties zijn om het bestand en het format op te geven. Via de Fields property kun je aangeven welke velden (of kolommen) er in het bestand aanwezig zijn. Je kunt via de optie WithFieldNames aangeven of de velden ook als kolomtitels in je bestand staan.<\/p>\n<p>Voor ieder veld kun je opgeven welk data type het bevat en (indien van toepassing) de grootte en nauwkeurigheid. In onderstaande screenshots zie je hoe de velden gedefinieerd zijn in de CsvReader en daadwerkelijk in de CSV. De titels zijn verschillend, maar dit wordt door de CSV Reader correct geinterpreteerd.<\/p>\n<p><img decoding=\"async\" class=\"alignnone wp-image-5022\" src=\"https:\/\/gdksoftware.com\/wp-content\/uploads\/2024\/01\/CsvReader-properties-300x252.png\" alt=\"\" width=\"486\" height=\"408\" srcset=\"https:\/\/gdksoftware.com\/wp-content\/uploads\/2024\/01\/CsvReader-properties-300x252.png 300w, https:\/\/gdksoftware.com\/wp-content\/uploads\/2024\/01\/CsvReader-properties.png 497w\" sizes=\"(max-width: 486px) 100vw, 486px\" \/>\u00a0 \u00a0<img decoding=\"async\" class=\"wp-image-5019 alignright\" src=\"https:\/\/gdksoftware.com\/wp-content\/uploads\/2024\/01\/CsvReader-fields-300x164.png\" alt=\"\" width=\"388\" height=\"212\" srcset=\"https:\/\/gdksoftware.com\/wp-content\/uploads\/2024\/01\/CsvReader-fields-300x164.png 300w, https:\/\/gdksoftware.com\/wp-content\/uploads\/2024\/01\/CsvReader-fields.png 476w\" sizes=\"(max-width: 388px) 100vw, 388px\" \/>\u00a0 \u00a0<img decoding=\"async\" class=\"size-full wp-image-5025 alignright\" src=\"https:\/\/gdksoftware.com\/wp-content\/uploads\/2024\/01\/CsvReader-csv-content.png\" alt=\"\" width=\"241\" height=\"185\" \/><\/p>\n<h5>De configuratie voor het wegschrijven<\/h5>\n<p>Voor het wegschrijven van de CSV heb ik als doel gekozen voor de DataSet, zodat ik de data kan tonen in een grid. Deze Writer is een van de eenvoudigste, er valt weinig aan te configureren. Bij de andere Writers zijn er opties beschikbaar voor formatting of voor queries (in het geval van de SQL writer). De DataSet Writer heeft onderstaande opties.<\/p>\n<p>De optie Direct op True zetten, betekent dat er, bij het schrijven van de data naar de dataset, <strong>geen<\/strong> gebruik gemaakt wordt van de standaard Append, Edit en Post functies van de dataset. Dat betekent dat er ook geen dataset events afgevuurd worden. Er wordt dan gebruik gemaakt van de interne Firedac functies. Dit geldt dus alleen voor een Firedac gebaseeerde dataset. In andere gevallen maakt de instelling van dit vinkje niet uit.<\/p>\n<p>Iets dergelijks geldt voor de Optimise optie. Die heeft ook alleen effect op Firedac datasets en geldt niet voor andere types. Als je gebruik maakt van een dataset die gekoppeld is aan data-aware components, zoals een TDBGrid, dan kan dit vinkje aanzetten problemen opleveren. Als de optimalisatie aanstaat, stelt Firedac diverse fetch en update opties in die het schrijven naar de dataset versnellen.<\/p>\n<p><img decoding=\"async\" class=\"alignnone wp-image-5028\" src=\"https:\/\/gdksoftware.com\/wp-content\/uploads\/2024\/01\/CsvReader-Writer-props-300x251.png\" alt=\"\" width=\"348\" height=\"291\" srcset=\"https:\/\/gdksoftware.com\/wp-content\/uploads\/2024\/01\/CsvReader-Writer-props-300x251.png 300w, https:\/\/gdksoftware.com\/wp-content\/uploads\/2024\/01\/CsvReader-Writer-props.png 310w\" sizes=\"(max-width: 348px) 100vw, 348px\" \/><\/p>\n<h5>Het inlezen en schrijven van de data<\/h5>\n<p>Om uiteindelijk de Reader en Writer bijelkaar te krijgen en de data in de CsvDataset, is de TFDBatchMove component nodig. Die staat op het scherm als CsvMove. Hier koppel je in de opties de Reader en Writer aan elkaar. In de BatchMove kun je ook de mapping aangeven tussen de velden uit de Reader en de velden van de Writer. Daarnaast zijn er opties om de files te laten valideren (Analyze) en andere opties die het gedrag beinvloeden, zoals Mode (wil je toevoegen, updaten of deleten) en Options (data eerst legen, transacties gebruiken, etc.).<\/p>\n<p><img decoding=\"async\" class=\" wp-image-5034 alignnone\" src=\"https:\/\/gdksoftware.com\/wp-content\/uploads\/2024\/01\/CsvMove-Props-245x300.png\" alt=\"\" width=\"381\" height=\"467\" srcset=\"https:\/\/gdksoftware.com\/wp-content\/uploads\/2024\/01\/CsvMove-Props-245x300.png 245w, https:\/\/gdksoftware.com\/wp-content\/uploads\/2024\/01\/CsvMove-Props.png 500w\" sizes=\"(max-width: 381px) 100vw, 381px\" \/><\/p>\n<p>Het uitvoeren van de daadwerkelijke Move, kan eenvoudig door in de code de Execute procedure aan te roepen.<\/p>\n<div style=\"background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;\">\n<pre style=\"margin: 0; line-height: 125%;\">CsvMove<span style=\"color: #333333;\">.<\/span>Execute<span style=\"color: #333333;\">;<\/span>\r\n<\/pre>\n<\/div>\n<h5>Samenvattend<\/h5>\n<p>Het verplaatsen van gegevens tussen CSV en JSON bestanden, Databases en Datasets, wordt door de TFDBatchMove components heel erg eenvoudig gemaakt. Doordat ook het schrijven van en naar een dataset ondersteund wordt, biedt het ook veel mogelijkheden voor andere oplossingen die gebruik kunnen maken van een dataset. Denk alleen al aan het verplaatsen van gegevens tussen twee verschillende databases of een Firedac dataset en bijvoorbeeld een ADO dataset. De BatchMove is een mooie Firedac optie die het verdient om meer gebruikt te worden.<\/p>\n","protected":false},"featured_media":0,"parent":0,"template":"","class_list":["post-5001","knowledge","type-knowledge","status-publish","hentry","knowledge-category-delphi"],"acf":{"author":413,"type_hero":"compact","hero_image":4959,"hero_image_position":"","hero_title":"","hero_content":"","hero_link":null,"hero_show_h1":false},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.8 (Yoast SEO v27.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Werken met Firedac BatchMove - GDK Software<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/gdksoftware.com\/nl\/kennisbank\/werken-met-firedac-batchmove\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Werken met Firedac BatchMove\" \/>\n<meta property=\"og:description\" content=\"Wie kent of gebruikt de Firedac component BatchMove wel eens? Of de\u00a0LocalSQL? 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 BatchMove component. De meerwaarde Met de [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gdksoftware.com\/nl\/kennisbank\/werken-met-firedac-batchmove\" \/>\n<meta property=\"og:site_name\" content=\"GDK Software\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-18T14:00:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/gdksoftware.com\/wp-content\/uploads\/2023\/12\/LocalSQL-demo-300x194.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Geschatte leestijd\" \/>\n\t<meta name=\"twitter:data1\" content=\"5 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\\\/werken-met-firedac-batchmove\",\"url\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\\\/werken-met-firedac-batchmove\",\"name\":\"Werken met Firedac BatchMove - GDK Software\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/nl#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\\\/werken-met-firedac-batchmove#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\\\/werken-met-firedac-batchmove#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/gdksoftware.com\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/LocalSQL-demo-300x194.png\",\"datePublished\":\"2024-01-18T12:39:38+00:00\",\"dateModified\":\"2024-01-18T14:00:37+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\\\/werken-met-firedac-batchmove#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\\\/werken-met-firedac-batchmove\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\\\/werken-met-firedac-batchmove#primaryimage\",\"url\":\"https:\\\/\\\/gdksoftware.com\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/LocalSQL-demo-300x194.png\",\"contentUrl\":\"https:\\\/\\\/gdksoftware.com\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/LocalSQL-demo-300x194.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\\\/werken-met-firedac-batchmove#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/gdksoftware.com\\\/nl\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Knowledgebase\",\"item\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Delphi\",\"item\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank-categorie\\\/delphi\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Werken met Firedac BatchMove\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/nl#website\",\"url\":\"https:\\\/\\\/gdksoftware.com\\\/nl\",\"name\":\"GDK Software\",\"description\":\"Zet de stip op je horizon\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/gdksoftware.com\\\/nl?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Werken met Firedac BatchMove - GDK Software","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/gdksoftware.com\/nl\/kennisbank\/werken-met-firedac-batchmove","og_locale":"nl_NL","og_type":"article","og_title":"Werken met Firedac BatchMove","og_description":"Wie kent of gebruikt de Firedac component BatchMove wel eens? Of de\u00a0LocalSQL? 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 BatchMove component. De meerwaarde Met de [&hellip;]","og_url":"https:\/\/gdksoftware.com\/nl\/kennisbank\/werken-met-firedac-batchmove","og_site_name":"GDK Software","article_modified_time":"2024-01-18T14:00:37+00:00","og_image":[{"url":"https:\/\/gdksoftware.com\/wp-content\/uploads\/2023\/12\/LocalSQL-demo-300x194.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Geschatte leestijd":"5 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/gdksoftware.com\/nl\/kennisbank\/werken-met-firedac-batchmove","url":"https:\/\/gdksoftware.com\/nl\/kennisbank\/werken-met-firedac-batchmove","name":"Werken met Firedac BatchMove - GDK Software","isPartOf":{"@id":"https:\/\/gdksoftware.com\/nl#website"},"primaryImageOfPage":{"@id":"https:\/\/gdksoftware.com\/nl\/kennisbank\/werken-met-firedac-batchmove#primaryimage"},"image":{"@id":"https:\/\/gdksoftware.com\/nl\/kennisbank\/werken-met-firedac-batchmove#primaryimage"},"thumbnailUrl":"https:\/\/gdksoftware.com\/wp-content\/uploads\/2023\/12\/LocalSQL-demo-300x194.png","datePublished":"2024-01-18T12:39:38+00:00","dateModified":"2024-01-18T14:00:37+00:00","breadcrumb":{"@id":"https:\/\/gdksoftware.com\/nl\/kennisbank\/werken-met-firedac-batchmove#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gdksoftware.com\/nl\/kennisbank\/werken-met-firedac-batchmove"]}]},{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/gdksoftware.com\/nl\/kennisbank\/werken-met-firedac-batchmove#primaryimage","url":"https:\/\/gdksoftware.com\/wp-content\/uploads\/2023\/12\/LocalSQL-demo-300x194.png","contentUrl":"https:\/\/gdksoftware.com\/wp-content\/uploads\/2023\/12\/LocalSQL-demo-300x194.png"},{"@type":"BreadcrumbList","@id":"https:\/\/gdksoftware.com\/nl\/kennisbank\/werken-met-firedac-batchmove#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/gdksoftware.com\/nl"},{"@type":"ListItem","position":2,"name":"Knowledgebase","item":"https:\/\/gdksoftware.com\/nl\/kennisbank"},{"@type":"ListItem","position":3,"name":"Delphi","item":"https:\/\/gdksoftware.com\/nl\/kennisbank-categorie\/delphi"},{"@type":"ListItem","position":4,"name":"Werken met Firedac BatchMove"}]},{"@type":"WebSite","@id":"https:\/\/gdksoftware.com\/nl#website","url":"https:\/\/gdksoftware.com\/nl","name":"GDK Software","description":"Zet de stip op je horizon","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/gdksoftware.com\/nl?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"}]}},"_links":{"self":[{"href":"https:\/\/gdksoftware.com\/nl\/wp-json\/wp\/v2\/knowledge\/5001","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gdksoftware.com\/nl\/wp-json\/wp\/v2\/knowledge"}],"about":[{"href":"https:\/\/gdksoftware.com\/nl\/wp-json\/wp\/v2\/types\/knowledge"}],"acf:post":[{"embeddable":true,"href":"https:\/\/gdksoftware.com\/nl\/wp-json\/wp\/v2\/team\/413"}],"wp:attachment":[{"href":"https:\/\/gdksoftware.com\/nl\/wp-json\/wp\/v2\/media?parent=5001"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}