{"id":3593,"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-20T09:30:56","modified_gmt":"2022-09-20T08:30:56","slug":"firedac-array-dml","status":"publish","type":"knowledge","link":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/firedac-array-dml","title":{"rendered":"Firedac Array DML"},"content":{"rendered":"<h3>Introdu\u00e7\u00e3o<\/h3>\n<p>Quantas vezes acontece que precisamos adicionar ou atualizar um grande n\u00famero de registros na mesma tabela. Considere as importa\u00e7\u00f5es onde isso acontece muito.<\/p>\n<p>Firedac tem uma boa solu\u00e7\u00e3o para isso chamado DML Array. Basicamente, em uma consulta voc\u00ea define sua declara\u00e7\u00e3o INSERT, UPDATE ou DELETE com par\u00e2metros uma vez, ent\u00e3o preencha os par\u00e2metros como um array e ent\u00e3o execute a consulta.<\/p>\n<p>O array de par\u00e2metros \u00e9 enviado para o banco de dados junto com a consulta em um comando. As diferen\u00e7as de desempenho de uma abordagem mais cl\u00e1ssica s\u00e3o significativas. No Cap\u00edtulo 15 do livro &#8220;Delphi in Depth: Firedac&#8221;, Cary Jensen discute o Array DML e seus detalhes t\u00e9cnicos. Neste cart\u00e3o, a descri\u00e7\u00e3o de como aplic\u00e1-lo.<\/p>\n<h3>Exemplo de c\u00f3digo<\/h3>\n<p>Primeiro defina sua consulta e par\u00e2metros. Defina o tamanho da matriz de par\u00e2metros para o n\u00famero de itens que voc\u00ea deseja usar.<\/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;<\/p>\n<h3>Usando Blobs<\/h3>\n<p>Foi necess\u00e1rio algum esfor\u00e7o para descobrir como isso funcionou com os campos BLOB. Nenhum exemplo disso p\u00f4de ser encontrado online e, portanto, o trecho de c\u00f3digo abaixo. Primeiro defina o par\u00e2metro para um campo BLOB.<\/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 \/>\nNeste exemplo, um registro Delphi \u00e9 escrito no banco de dados como um campo bin\u00e1rio. O seguinte c\u00f3digo deve ser adicionado no la\u00e7o onde os par\u00e2metros s\u00e3o preenchidos.<\/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-3593","knowledge","type-knowledge","status-publish","hentry","knowledge-category-arquivo-delphi"],"acf":{"author":1384,"type_hero":"compact","hero_image":3568,"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\/pt-br\/base-de-conhecimento\/firedac-array-dml\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Firedac Array DML\" \/>\n<meta property=\"og:description\" content=\"Introdu\u00e7\u00e3o Quantas vezes acontece que precisamos adicionar ou atualizar um grande n\u00famero de registros na mesma tabela. Considere as importa\u00e7\u00f5es onde isso acontece muito. Firedac tem uma boa solu\u00e7\u00e3o para isso chamado DML Array. Basicamente, em uma consulta voc\u00ea define sua declara\u00e7\u00e3o INSERT, UPDATE ou DELETE com par\u00e2metros uma vez, ent\u00e3o preencha os par\u00e2metros como [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/firedac-array-dml\" \/>\n<meta property=\"og:site_name\" content=\"GDK Software\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-20T08:30:56+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\\\/firedac-array-dml\",\"url\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\\\/firedac-array-dml\",\"name\":\"Firedac Array DML - GDK Software\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br#website\"},\"datePublished\":\"2022-09-20T07:54:28+00:00\",\"dateModified\":\"2022-09-20T08:30:56+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\\\/firedac-array-dml#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\\\/firedac-array-dml\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\\\/firedac-array-dml#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Knowledgebase\",\"item\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Delphi\",\"item\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/knowledgebase-category\\\/arquivo-delphi\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Firedac Array DML\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br#website\",\"url\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\",\"name\":\"GDK Software\",\"description\":\"Zet de stip op je horizon\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"}]}<\/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\/pt-br\/base-de-conhecimento\/firedac-array-dml","og_locale":"pt_BR","og_type":"article","og_title":"Firedac Array DML","og_description":"Introdu\u00e7\u00e3o Quantas vezes acontece que precisamos adicionar ou atualizar um grande n\u00famero de registros na mesma tabela. Considere as importa\u00e7\u00f5es onde isso acontece muito. Firedac tem uma boa solu\u00e7\u00e3o para isso chamado DML Array. Basicamente, em uma consulta voc\u00ea define sua declara\u00e7\u00e3o INSERT, UPDATE ou DELETE com par\u00e2metros uma vez, ent\u00e3o preencha os par\u00e2metros como [&hellip;]","og_url":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/firedac-array-dml","og_site_name":"GDK Software","article_modified_time":"2022-09-20T08:30:56+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. tempo de leitura":"2 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/firedac-array-dml","url":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/firedac-array-dml","name":"Firedac Array DML - GDK Software","isPartOf":{"@id":"https:\/\/gdksoftware.com\/pt-br#website"},"datePublished":"2022-09-20T07:54:28+00:00","dateModified":"2022-09-20T08:30:56+00:00","breadcrumb":{"@id":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/firedac-array-dml#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/firedac-array-dml"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/firedac-array-dml#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/gdksoftware.com\/pt-br"},{"@type":"ListItem","position":2,"name":"Knowledgebase","item":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento"},{"@type":"ListItem","position":3,"name":"Delphi","item":"https:\/\/gdksoftware.com\/pt-br\/knowledgebase-category\/arquivo-delphi"},{"@type":"ListItem","position":4,"name":"Firedac Array DML"}]},{"@type":"WebSite","@id":"https:\/\/gdksoftware.com\/pt-br#website","url":"https:\/\/gdksoftware.com\/pt-br","name":"GDK Software","description":"Zet de stip op je horizon","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/gdksoftware.com\/pt-br?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"}]}},"_links":{"self":[{"href":"https:\/\/gdksoftware.com\/pt-br\/wp-json\/wp\/v2\/knowledge\/3593","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gdksoftware.com\/pt-br\/wp-json\/wp\/v2\/knowledge"}],"about":[{"href":"https:\/\/gdksoftware.com\/pt-br\/wp-json\/wp\/v2\/types\/knowledge"}],"acf:post":[{"embeddable":true,"href":"https:\/\/gdksoftware.com\/pt-br\/wp-json\/wp\/v2\/team\/1384"}],"wp:attachment":[{"href":"https:\/\/gdksoftware.com\/pt-br\/wp-json\/wp\/v2\/media?parent=3593"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}