{"id":5043,"date":"2024-01-18T16:50:27","date_gmt":"2024-01-18T15:50:27","guid":{"rendered":"https:\/\/gdksoftware.com\/?post_type=knowledge&#038;p=5043"},"modified":"2024-01-18T16:50:27","modified_gmt":"2024-01-18T15:50:27","slug":"trabalhando-com-o-firedac-batchmove","status":"publish","type":"knowledge","link":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/trabalhando-com-o-firedac-batchmove","title":{"rendered":"Trabalhando com o Firedac BatchMove"},"content":{"rendered":"<p>Quem conhece ou usa o componente BatchMove do Firedac? Ou o LocalSQL? Para a maioria dos desenvolvedores, esses componentes s\u00e3o relativamente desconhecidos, embora sejam muito \u00fateis. Em dois blogs, quero explicar o valor agregado desses componentes e mostrar como eles funcionam. Este blog \u00e9 sobre o componente BatchMove.<\/p>\n<h5>O valor agregado<\/h5>\n<p>O BatchMove permite que voc\u00ea mova facilmente dados entre diferentes fontes e estruturas de dados. Pense em carregar dados de um CSV em um DataSet, ou exportar o conte\u00fado de um DataSet para um arquivo JSON, ou gravar o resultado de uma consulta de banco de dados em outro banco de dados.<\/p>\n<p>Portanto, uma movimenta\u00e7\u00e3o em lote sempre consiste em um Reader e um Writer. Voc\u00ea tem leitores para arquivos de texto, uma consulta SQL e para DataSets. Tamb\u00e9m h\u00e1 Writers para arquivos de texto, SQL e DataSet, bem como para JSON. Portanto, voc\u00ea pode fazer todas as combina\u00e7\u00f5es poss\u00edveis com esses Readers e Writers para mover dados entre fontes diferentes. E isso \u00e9 muito mais f\u00e1cil e r\u00e1pido do que escrever c\u00f3digo manualmente para essas situa\u00e7\u00f5es.<\/p>\n<h5>O projeto b\u00e1sico<\/h5>\n<p>Abaixo, voc\u00ea pode ver a configura\u00e7\u00e3o do meu aplicativo. \u00c0 esquerda, h\u00e1 uma conex\u00e3o com o banco de dados e o QueryCustomers, que l\u00ea os dados do banco de dados. \u00c0 direita, voc\u00ea v\u00ea o CsvDataset, um Firedac MemTable. Nesse conjunto de dados, o CsvMove (<strong>TFDBatchMove<\/strong>) carrega os dados do CSV. Para fazer isso, o CsvMove est\u00e1 vinculado ao CsvReader (<strong>TFDBatchMoveTextReader<\/strong>) e ao CsvDatasetWriter (<strong>TFDBatchMoveDataSetWriter<\/strong>).<\/p>\n<p>A grade mostra primeiro duas colunas com os dados do cliente do banco de dados. As tr\u00eas colunas seguintes v\u00eam do CSV. Esses dados s\u00e3o combinados por meio do componente CombinedLocalSQL (<strong>TFDLocalSQL<\/strong>).<\/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<p><strong>A configura\u00e7\u00e3o para leitura<\/strong><\/p>\n<p>A primeira etapa \u00e9 ler o CSV. Para isso, configuramos o componente CsvReader. As capturas de tela abaixo mostram que h\u00e1 v\u00e1rias propriedades para especificar o arquivo e seu formato. Por meio da propriedade Fields, voc\u00ea pode especificar quais campos (ou colunas) est\u00e3o presentes no arquivo. Voc\u00ea pode usar a op\u00e7\u00e3o WithFieldNames para especificar se os campos tamb\u00e9m aparecem como t\u00edtulos de coluna no arquivo.<\/p>\n<p>Para cada campo, voc\u00ea pode especificar o tipo de dados do campo e (se aplic\u00e1vel) seu tamanho e precis\u00e3o. Nas capturas de tela abaixo, voc\u00ea pode ver como os campos s\u00e3o definidos no CsvReader e, na verdade, no CSV. Os t\u00edtulos s\u00e3o diferentes, mas isso \u00e9 interpretado corretamente pelo CSV Reader.<\/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\" \/><\/p>\n<p><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\" \/><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<p><strong>A configura\u00e7\u00e3o para grava\u00e7\u00e3o<\/strong><\/p>\n<p>Para gravar o CSV, escolhi o DataSet como destino, para que eu possa exibir os dados em uma grade. Esse Writer \u00e9 um dos mais simples, n\u00e3o h\u00e1 muito o que configurar. Com os outros Writers, h\u00e1 op\u00e7\u00f5es dispon\u00edveis para formata\u00e7\u00e3o ou para consultas (no caso do Writer SQL). O DataSet Writer tem as op\u00e7\u00f5es abaixo.<\/p>\n<p>Definir a op\u00e7\u00e3o Direct como True significa que, ao gravar os dados no conjunto de dados, as fun\u00e7\u00f5es padr\u00e3o Append, Edit e Post do conjunto de dados n\u00e3o ser\u00e3o usadas. Isso significa que nenhum evento de conjunto de dados \u00e9 disparado. As fun\u00e7\u00f5es internas do Firedac s\u00e3o ent\u00e3o usadas. Portanto, isso s\u00f3 se aplica a um conjunto de dados baseado no Firedac. Em outros casos, a configura\u00e7\u00e3o dessa op\u00e7\u00e3o n\u00e3o importa.<\/p>\n<p>Algo semelhante se aplica \u00e0 op\u00e7\u00e3o Otimizar. Isso tamb\u00e9m afeta apenas os conjuntos de dados do Firedac e n\u00e3o se aplica a outros tipos. Se estiver usando um conjunto de dados associado a componentes com reconhecimento de dados, como um TDBGrid, a ativa\u00e7\u00e3o dessa op\u00e7\u00e3o poder\u00e1 causar problemas. Se a otimiza\u00e7\u00e3o estiver ativada, o Firedac define v\u00e1rias op\u00e7\u00f5es de busca e atualiza\u00e7\u00e3o que aceleram a grava\u00e7\u00e3o no conjunto de dados.<\/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<p>Leitura e grava\u00e7\u00e3o dos dados<\/p>\n<p>Para finalmente reunir o Reader e o Writer e colocar os dados no CsvDataset, \u00e9 necess\u00e1rio o componente TFDBatchMove. Ele aparece na tela como CsvMove. \u00c9 aqui que voc\u00ea vincula o Reader e o Writer nas op\u00e7\u00f5es. No BatchMove, voc\u00ea tamb\u00e9m pode especificar o mapeamento entre os campos do Reader e os campos do Writer. Al\u00e9m disso, h\u00e1 op\u00e7\u00f5es para validar os arquivos (Analyze) e outras op\u00e7\u00f5es que influenciam o comportamento, como Mode (voc\u00ea deseja adicionar, atualizar ou excluir) e Options (empty data first, use transactions, 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>A execu\u00e7\u00e3o do Move real pode ser feita simplesmente chamando o procedimento Execute no c\u00f3digo.<\/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<p>&nbsp;<\/p>\n<p><strong>Em resumo<\/strong><\/p>\n<p>A movimenta\u00e7\u00e3o de dados entre arquivos CSV e JSON, bancos de dados e conjuntos de dados \u00e9 muito f\u00e1cil com os componentes TFDBatchMove. Como a grava\u00e7\u00e3o de e para um conjunto de dados tamb\u00e9m \u00e9 suportada, ela tamb\u00e9m oferece muitas possibilidades para outras solu\u00e7\u00f5es que podem fazer uso de um conjunto de dados. Basta pensar em mover dados entre dois bancos de dados diferentes ou em um conjunto de dados Firedac e um conjunto de dados ADO, por exemplo. O BatchMove \u00e9 uma boa op\u00e7\u00e3o do Firedac que merece ser mais usada.<\/p>\n","protected":false},"featured_media":0,"parent":0,"template":"","class_list":["post-5043","knowledge","type-knowledge","status-publish","hentry"],"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 v26.8 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Trabalhando com o Firedac BatchMove - GDK Software<\/title>\n<meta name=\"description\" content=\"Quem conhece ou usa o componente BatchMove do Firedac ou o LocalSQL? Esses componentes s\u00e3o relativamente desconhecidos, embora sejam muito \u00fateis.\" \/>\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\/trabalhando-com-o-firedac-batchmove\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Trabalhando com o Firedac BatchMove\" \/>\n<meta property=\"og:description\" content=\"Quem conhece ou usa o componente BatchMove do Firedac ou o LocalSQL? Esses componentes s\u00e3o relativamente desconhecidos, embora sejam muito \u00fateis.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/trabalhando-com-o-firedac-batchmove\" \/>\n<meta property=\"og:site_name\" content=\"GDK Software\" \/>\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=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data1\" content=\"6 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\\\/trabalhando-com-o-firedac-batchmove\",\"url\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\\\/trabalhando-com-o-firedac-batchmove\",\"name\":\"Trabalhando com o Firedac BatchMove - GDK Software\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\\\/trabalhando-com-o-firedac-batchmove#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\\\/trabalhando-com-o-firedac-batchmove#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/gdksoftware.com\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/LocalSQL-demo-300x194.png\",\"datePublished\":\"2024-01-18T15:50:27+00:00\",\"description\":\"Quem conhece ou usa o componente BatchMove do Firedac ou o LocalSQL? Esses componentes s\u00e3o relativamente desconhecidos, embora sejam muito \u00fateis.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\\\/trabalhando-com-o-firedac-batchmove#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\\\/trabalhando-com-o-firedac-batchmove\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\\\/trabalhando-com-o-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\\\/pt-br\\\/base-de-conhecimento\\\/trabalhando-com-o-firedac-batchmove#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\":\"Trabalhando com o Firedac BatchMove\"}]},{\"@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":"Trabalhando com o Firedac BatchMove - GDK Software","description":"Quem conhece ou usa o componente BatchMove do Firedac ou o LocalSQL? Esses componentes s\u00e3o relativamente desconhecidos, embora sejam muito \u00fateis.","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\/trabalhando-com-o-firedac-batchmove","og_locale":"pt_BR","og_type":"article","og_title":"Trabalhando com o Firedac BatchMove","og_description":"Quem conhece ou usa o componente BatchMove do Firedac ou o LocalSQL? Esses componentes s\u00e3o relativamente desconhecidos, embora sejam muito \u00fateis.","og_url":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/trabalhando-com-o-firedac-batchmove","og_site_name":"GDK Software","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":{"Est. tempo de leitura":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/trabalhando-com-o-firedac-batchmove","url":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/trabalhando-com-o-firedac-batchmove","name":"Trabalhando com o Firedac BatchMove - GDK Software","isPartOf":{"@id":"https:\/\/gdksoftware.com\/pt-br#website"},"primaryImageOfPage":{"@id":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/trabalhando-com-o-firedac-batchmove#primaryimage"},"image":{"@id":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/trabalhando-com-o-firedac-batchmove#primaryimage"},"thumbnailUrl":"https:\/\/gdksoftware.com\/wp-content\/uploads\/2023\/12\/LocalSQL-demo-300x194.png","datePublished":"2024-01-18T15:50:27+00:00","description":"Quem conhece ou usa o componente BatchMove do Firedac ou o LocalSQL? Esses componentes s\u00e3o relativamente desconhecidos, embora sejam muito \u00fateis.","breadcrumb":{"@id":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/trabalhando-com-o-firedac-batchmove#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/trabalhando-com-o-firedac-batchmove"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/trabalhando-com-o-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\/pt-br\/base-de-conhecimento\/trabalhando-com-o-firedac-batchmove#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":"Trabalhando com o Firedac BatchMove"}]},{"@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\/5043","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\/413"}],"wp:attachment":[{"href":"https:\/\/gdksoftware.com\/pt-br\/wp-json\/wp\/v2\/media?parent=5043"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}