{"id":3572,"date":"2022-09-20T08:54:28","date_gmt":"2022-09-20T07:54:28","guid":{"rendered":"https:\/\/gdksoftware.com\/knowledgebase\/firedac-array-dml"},"modified":"2022-09-30T07:29:33","modified_gmt":"2022-09-30T06:29:33","slug":"firedac-array-dml","status":"publish","type":"knowledge","link":"https:\/\/gdksoftware.com\/nl\/kennisbank\/firedac-array-dml","title":{"rendered":"Firedac Array DML"},"content":{"rendered":"<h3>Introductie<\/h3>\n<p>Hoe vaak gebeurt het niet dat er grote aantallen records in dezelfde tabel moeten worden toegevoegd of bijgewerkt. Denk bijvoorbeeld aan imports waarbij dit veel voorkomt.<\/p>\n<p>Firedac heeft hier een mooie oplossing voor, namelijk Array DML. In een query definieer je eenmalig een INSERT, UPDATE of DELETE statement met parameters. Je vult vervolgens de parameters als een array en voert dan de query uit.<\/p>\n<p>De array van parameters wordt samen met de query in \u00e9\u00e9n commando naar de database gestuurd. De performanceverschillen ten opzichte van een klassieke aanpak zijn significant. In hoofdstuk 15 van het boek &#8220;Delphi in Depth: Firedac&#8221; bespreekt Cary Jensen Array DML en de technische details ervan. In deze blog wordt praktisch beschreven hoe het kan worden toegepast.<\/p>\n<h3>Code voorbeeld<\/h3>\n<p>Definieer eerst de query en de parameters. Stel de grootte van de parameter array in voor het aantal items dat je wilt gebruiken.<\/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%;\">  Qry.SQL.Text:=<span style=\"color: #0000ff;\">'INSERT INTO TABLE_TEST (ID, DESCRIPTION) VALUES (:ID,:DESCRIPTION)'<\/span>;\r\n  Qry.ParamByName(<span style=\"color: #0000ff;\">'ID'<\/span>).DataType := ftInteger;\r\n  Qry.ParamByName(<span style=\"color: #0000ff;\">'DESCRIPTION'<\/span>).DataType := ftString;\r\n  \r\n  Qry.Params.ArraySize := Descriptions.Count;\r\n<\/pre>\n<\/div>\n<p>&nbsp;<br \/>\nLoop vervolgens door de data, vul de paramater array en voer de query uit:<\/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%\">  <span style=\"color: #000080; font-weight: bold\">var<\/span> i := <span style=\"color: #0000FF\">0<\/span>;\r\n  <span style=\"color: #000080; font-weight: bold\">for<\/span> <span style=\"color: #000080; font-weight: bold\">var<\/span> Item <span style=\"color: #000080; font-weight: bold\">in<\/span> Descriptions <span style=\"color: #000080; font-weight: bold\">do<\/span>\r\n  <span style=\"color: #000080; font-weight: bold\">begin<\/span>\r\n    Qry.ParamByName(<span style=\"color: #0000FF\">'ID'<\/span>).AsIntegers[i] := Item.ID;\r\n    Qry.ParamByName(<span style=\"color: #0000FF\">'DESCRIPTION'<\/span>).AsStrings[i] := Item.Description;\r\n\r\n    Inc(i);\r\n  <span style=\"color: #000080; font-weight: bold\">end<\/span>;\r\n  \r\n  Qry.Execute(Qry.Params.ArraySize);\r\n<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<h3>Gebruiken met Blobs<\/h3>\n<p>Het kostte enige moeite om uit te vinden hoe dit werkte met BLOB-velden. Online was er geen goed voorbeeld van te vinden en daarom het onderstaande codevoorbeeld. Definieer als eerste de parameter voor een BLOB-veld.<\/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%;\">Qry.ParamByName(<span style=\"color: #0000ff;\">'BLOBFIELD'<\/span>).DataType:=ftStream;\r\nQry.ParamByName(<span style=\"color: #0000ff;\">'BLOBFIELD'<\/span>).StreamMode:=smOpenWrite;\r\n<\/pre>\n<\/div>\n<p>&nbsp;<br \/>\nIn dit voorbeeld wordt een Delphi record als binair veld naar de database geschreven. Deze code moet worden toegevoegd in de loop waarin de parameters worden gevuld.<\/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%;\">ABlobStream := TMemoryStream.Create;\r\n<span style=\"color: #000080; font-weight: bold;\">try<\/span>\r\n  APointer := @ARecord;\r\n  ABlobStream.Write(APointer^, SizeOf(ARecord));\r\n\r\n  ABlobStream.Position := <span style=\"color: #0000ff;\">0<\/span>;\r\n  Qry.ParamByName(<span style=\"color: #0000ff;\">'BLOBFIELD'<\/span>).LoadFromStream(ABlobStream, ftBlob, i);\r\n<span style=\"color: #000080; font-weight: bold;\">finally<\/span>\r\n  ABlobStream.Free;\r\n<span style=\"color: #000080; font-weight: bold;\">end<\/span>;\r\n<\/pre>\n<\/div>\n","protected":false},"featured_media":0,"parent":0,"template":"","class_list":["post-3572","knowledge","type-knowledge","status-publish","hentry","knowledge-category-delphi"],"acf":{"author":1384,"type_hero":"compact","hero_image":3611,"hero_image_position":"","hero_title":"","hero_content":"","hero_link":"","hero_show_h1":false},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.8 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Firedac Array DML - 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\/firedac-array-dml\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Firedac Array DML\" \/>\n<meta property=\"og:description\" content=\"Introductie Hoe vaak gebeurt het niet dat er grote aantallen records in dezelfde tabel moeten worden toegevoegd of bijgewerkt. Denk bijvoorbeeld aan imports waarbij dit veel voorkomt. Firedac heeft hier een mooie oplossing voor, namelijk Array DML. In een query definieer je eenmalig een INSERT, UPDATE of DELETE statement met parameters. Je vult vervolgens de [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gdksoftware.com\/nl\/kennisbank\/firedac-array-dml\" \/>\n<meta property=\"og:site_name\" content=\"GDK Software\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-30T06:29:33+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Geschatte leestijd\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\\\/firedac-array-dml\",\"url\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\\\/firedac-array-dml\",\"name\":\"Firedac Array DML - GDK Software\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/nl#website\"},\"datePublished\":\"2022-09-20T07:54:28+00:00\",\"dateModified\":\"2022-09-30T06:29:33+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\\\/firedac-array-dml#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\\\/firedac-array-dml\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\\\/firedac-array-dml#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\":\"Firedac Array DML\"}]},{\"@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":"Firedac Array DML - 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\/firedac-array-dml","og_locale":"nl_NL","og_type":"article","og_title":"Firedac Array DML","og_description":"Introductie Hoe vaak gebeurt het niet dat er grote aantallen records in dezelfde tabel moeten worden toegevoegd of bijgewerkt. Denk bijvoorbeeld aan imports waarbij dit veel voorkomt. Firedac heeft hier een mooie oplossing voor, namelijk Array DML. In een query definieer je eenmalig een INSERT, UPDATE of DELETE statement met parameters. Je vult vervolgens de [&hellip;]","og_url":"https:\/\/gdksoftware.com\/nl\/kennisbank\/firedac-array-dml","og_site_name":"GDK Software","article_modified_time":"2022-09-30T06:29:33+00:00","twitter_card":"summary_large_image","twitter_misc":{"Geschatte leestijd":"2 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/gdksoftware.com\/nl\/kennisbank\/firedac-array-dml","url":"https:\/\/gdksoftware.com\/nl\/kennisbank\/firedac-array-dml","name":"Firedac Array DML - GDK Software","isPartOf":{"@id":"https:\/\/gdksoftware.com\/nl#website"},"datePublished":"2022-09-20T07:54:28+00:00","dateModified":"2022-09-30T06:29:33+00:00","breadcrumb":{"@id":"https:\/\/gdksoftware.com\/nl\/kennisbank\/firedac-array-dml#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gdksoftware.com\/nl\/kennisbank\/firedac-array-dml"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/gdksoftware.com\/nl\/kennisbank\/firedac-array-dml#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":"Firedac Array DML"}]},{"@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\/3572","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\/1384"}],"wp:attachment":[{"href":"https:\/\/gdksoftware.com\/nl\/wp-json\/wp\/v2\/media?parent=3572"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}