<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-142520387185854483</id><updated>2024-08-30T23:05:50.567-07:00</updated><category term="PAF-ECF"/><category term="Visual Basic"/><category term="Banco de Dados"/><category term="Fiscal"/><title type='text'>Guilherme Braga</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://guilhermebragaf1.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/142520387185854483/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://guilhermebragaf1.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Guilherme Braga</name><uri>http://www.blogger.com/profile/16830822452229257562</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhehJQRuxzziq-Qa9uchcLw1oPhef-c1Q3meO-lkFmuYVdEoIoRoVa41KSh2NDulpNVzqOQ0YLjgHPc_h-6sp0q2tFaxLDM103MqrFNP3NvMoMjB9spVL29kk2_ajtKxA/s220/SAM_4046.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-142520387185854483.post-7564233416582622309</id><published>2013-06-13T07:18:00.000-07:00</published><updated>2013-06-13T07:29:04.923-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PAF-ECF"/><title type='text'>TESTE 115: Exclusão/Inclusão de dados - BLOCO VII</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
A partir do Roteiro de análise funcional do PAF-ECF versão 1.6 Aplicável à versão 1.08 do ER-PAF-ECF foi implementado o teste 115 do Bloco VII que diz respeito a Exclusão/Inclusão de dados. Esse requisito é para identificar os registros que foram incluídos ou excluídos fora do PAF-ECF, ou seja, por outra aplicação ou diretamente no banco de dados. Com Isso na geração do arquivo eletrônico irá identificar com o caracter &quot;?&quot; no respectivo campo definido no alínea c) do REQUISITO – Observações – “b”.&lt;br /&gt;
&lt;br /&gt;
Muitos desenvolvedores estão implementando Trigges em seus banco de dados para identificar os registros incluídos e excluídos fora do PAF-ECF, porém alguns Órgãos não estão aceitando a utilização da trigger, pois alegam que a mesma pode ser ativada ou desativada a qualquer momento. A dica para tratar esse requisito é criar uma tabela de controle de registro onde a mesma irá armazenar a quantidade total de registros das tabelas.&lt;/div&gt;
&lt;br /&gt;
Exemplo da Tabela de Controle:&lt;br /&gt;
&lt;br /&gt;
&lt;table border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td bgcolor=&quot;#dcdcdc&quot;&gt;TABELA&lt;/td&gt;&lt;td bgcolor=&quot;#dcdcdc&quot;&gt;QTD. REGISTROS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TABPRODUTO&lt;/td&gt; &lt;td&gt;1000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TABESTOQUE&lt;/td&gt; &lt;td&gt;500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TABDAV&lt;/td&gt; &lt;td&gt;750&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;...&lt;/td&gt; &lt;td&gt;...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Toda vez que for incluído ou excluído um registro no PAF-ECF irá ser atualizado a quantidade de registro dessa tabela de controle.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
No momento da geração dos arquivos eletrônicos o PAF-ECF irá fazer a comparação entre a quantidade de registro existente na tabela (&lt;em&gt;Select count(*) from TabProduto&lt;/em&gt;) com a quantidade de registro existente na tabela de controle. Se for diferente é porque algum registro dessa tabela foi incluído ou excluído por fora do PAF-ECF. Nesse caso o arquivo eletrônico terá que identificar com o caracter &quot;?&quot;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://guilhermebragaf1.blogspot.com/feeds/7564233416582622309/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://guilhermebragaf1.blogspot.com/2013/06/teste-115-exclusaoinclusao-de-dados.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/142520387185854483/posts/default/7564233416582622309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/142520387185854483/posts/default/7564233416582622309'/><link rel='alternate' type='text/html' href='http://guilhermebragaf1.blogspot.com/2013/06/teste-115-exclusaoinclusao-de-dados.html' title='TESTE 115: Exclusão/Inclusão de dados - BLOCO VII'/><author><name>Guilherme Braga</name><uri>http://www.blogger.com/profile/16830822452229257562</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhehJQRuxzziq-Qa9uchcLw1oPhef-c1Q3meO-lkFmuYVdEoIoRoVa41KSh2NDulpNVzqOQ0YLjgHPc_h-6sp0q2tFaxLDM103MqrFNP3NvMoMjB9spVL29kk2_ajtKxA/s220/SAM_4046.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-142520387185854483.post-4118841627887299956</id><published>2012-01-07T16:42:00.000-08:00</published><updated>2012-01-07T17:05:31.931-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Fiscal"/><category scheme="http://www.blogger.com/atom/ns#" term="PAF-ECF"/><title type='text'>Nota da Gente</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Projeto de Lei, do estado de Sergipe, que dispõe sobre a criação do Programa de Estímulo à Cidadania Fiscal e Tributária que foi aprovado pela Assembléia Legislativa.&amp;nbsp;O objetivo do programa é estimular nos cidadãos que adquirem mercadorias, o hábito de exigir do fornecedor a Nota ou o Cupom Fiscal. Desde Outubro de 2011, de acordo&amp;nbsp;com a atividade econômica de cada estabelecimento, estão sendo obrigados a aderirem a essa legislação (7000/2010). Para os programas de aplicativos fiscais que&amp;nbsp;utilizam emissor de cupom fiscal (PAF-ECF), terão que disponibilizar as seguintes funcionalidades para atender a portaria 365/2011:&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Opção de imprimir o CNPJ/CPF do consumidor no cupom fiscal;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;As bibliotecas das maiorias dos ECFs dispõe dessa funcionalidade.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Gerar arquivo digital contendo informações relativas aos documentos emitidos pelo ECF;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Para quem já gera o arquivo CAT-52 já está atendendo a essa exigência, pois o leiaute atende também ao 365/2011. Para quem não gera, as bibliotecas das maiorias dos&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;ECFs também tem disponível essa funcionalidade. A geração desse arquivo é baseado no Ato Cotepe/icms 17/04. Para ECFs que não tem essa funcionalidade o PAF-ECF terá&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;que gerar as informações de acordo com os dados armazenados seguindo esse ato cotepe. Algums ECFs, mediante configuração, geram esse arquivo diariamente,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;automaticamente após a redução Z. O ideal é gerar esse arquivo diariamente para se precaver em caso da impressora quebrar, e no final do mês gerar um único arquivo&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;substituindo todos os gerados diariamente e fazer a importação do mesmo no sistema da nota da gente.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Gravar esse arquivo gerado em mídia ótica não regravável.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Gravar esses arquivo em um disco rígido, por exemplo.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Conservar e manter o arquivo digital gerado pelo prazo previsto no art. 173 do regulamento do ICMS, para disponibilização ao fisco quando solicitado.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Essa responsabilidade é do estabelecimento, de toda forma o PAF-ECF pode armazená-lo em banco de dados por opção.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Atenção !!!&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Corram porque, se não for adiado, o prazo final de adesão a esse programa é até Janeiro de 2012.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://guilhermebragaf1.blogspot.com/feeds/4118841627887299956/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://guilhermebragaf1.blogspot.com/2012/01/nota-da-gente.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/142520387185854483/posts/default/4118841627887299956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/142520387185854483/posts/default/4118841627887299956'/><link rel='alternate' type='text/html' href='http://guilhermebragaf1.blogspot.com/2012/01/nota-da-gente.html' title='Nota da Gente'/><author><name>Guilherme Braga</name><uri>http://www.blogger.com/profile/16830822452229257562</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhehJQRuxzziq-Qa9uchcLw1oPhef-c1Q3meO-lkFmuYVdEoIoRoVa41KSh2NDulpNVzqOQ0YLjgHPc_h-6sp0q2tFaxLDM103MqrFNP3NvMoMjB9spVL29kk2_ajtKxA/s220/SAM_4046.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-142520387185854483.post-7536065107764640177</id><published>2011-12-02T06:22:00.001-08:00</published><updated>2012-01-07T16:43:15.924-08:00</updated><title type='text'>ROTEIRO DE ANÁLISE FUNCIONAL PAF-ECF</title><content type='html'>&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Abaixo links para download de algumas versões do roteiro de análise funcional PAF-ECF:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;ROTEIRO DE ANÁLISE FUNCIONAL PAF-ECF 1.3 Aplicável à 1.04&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;color: orange;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;http://www.megaupload.com/?d=PMC246YW&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;http://www.megaupload.com/?d=&lt;wbr&gt;&lt;/wbr&gt;PMC246YW&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;ROTEIRO DE ANÁLISE FUNCIONAL PAF-ECF 1.4 Aplicável à 1.05&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;color: blue;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;http://www.megaupload.com/?d=EHQ6F9L7&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;http://www.megaupload.com/?d=&lt;wbr&gt;&lt;/wbr&gt;EHQ6F9L7&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;ROTEIRO DE ANÁLISE FUNCIONAL PAF-ECF 1.5 Aplicável à 1.07&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;color: blue;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;http://www.megaupload.com/?d=89RXLHFP&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;http://www.megaupload.com/?d=&lt;wbr&gt;&lt;/wbr&gt;89RXLHFP&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;ROTEIRO DE ANÁLISE FUNCIONAL PAF-ECF 1.6 Aplicável à 1.08&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;color: blue;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;http://www.megaupload.com/?d=VVW5X1BI&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;http://www.megaupload.com/?d=&lt;wbr&gt;&lt;/wbr&gt;VVW5X1BI&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;ROTEIRO DE ANÁLISE FUNCIONAL PAF-ECF 1.7 Aplicável à 1.09&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;color: blue;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;http://www.megaupload.com/?d=UQSEOZW2&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;http://www.megaupload.com/?d=&lt;wbr&gt;&lt;/wbr&gt;UQSEOZW2&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://guilhermebragaf1.blogspot.com/feeds/7536065107764640177/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://guilhermebragaf1.blogspot.com/2011/12/roteiro-de-analise-funcional-paf-ecf.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/142520387185854483/posts/default/7536065107764640177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/142520387185854483/posts/default/7536065107764640177'/><link rel='alternate' type='text/html' href='http://guilhermebragaf1.blogspot.com/2011/12/roteiro-de-analise-funcional-paf-ecf.html' title='ROTEIRO DE ANÁLISE FUNCIONAL PAF-ECF'/><author><name>Guilherme Braga</name><uri>http://www.blogger.com/profile/16830822452229257562</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhehJQRuxzziq-Qa9uchcLw1oPhef-c1Q3meO-lkFmuYVdEoIoRoVa41KSh2NDulpNVzqOQ0YLjgHPc_h-6sp0q2tFaxLDM103MqrFNP3NvMoMjB9spVL29kk2_ajtKxA/s220/SAM_4046.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-142520387185854483.post-6195226516240600378</id><published>2011-12-02T05:11:00.001-08:00</published><updated>2012-01-07T16:43:27.806-08:00</updated><title type='text'>ATO COTEPE/ICMS N° 6, DE 14 DE ABRIL DE 2008</title><content type='html'>&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Abaixo links para download de algumas versões da especificação de requisito do PAF-ECF:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;ATO COTEPE/ICMS 06.08 (ER-PAF-ECF Versão 01.02)&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;color: orange;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;http://www.megaupload.com/?d=HTQL3LO1&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;http://www.megaupload.com/?d=&lt;wbr&gt;&lt;/wbr&gt;HTQL3LO1&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;ATO COTEPE/ICMS 06.08 (ER-PAF-ECF Versão 01.05)&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;color: blue;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;http://www.megaupload.com/?d=6R97X5E6&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;http://www.megaupload.com/?d=&lt;wbr&gt;&lt;/wbr&gt;6R97X5E6&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;ATO COTEPE/ICMS 06.08 (ER-PAF-ECF Versão 01.06)&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;color: blue;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;http://www.megaupload.com/?d=OAFRM8B0&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;http://www.megaupload.com/?d=&lt;wbr&gt;&lt;/wbr&gt;OAFRM8B0&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;ATO COTEPE/ICMS 06.08 (ER-PAF-ECF Versão 01.07)&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;color: blue;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;http://www.megaupload.com/?d=DLH615Q9&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;http://www.megaupload.com/?d=&lt;wbr&gt;&lt;/wbr&gt;DLH615Q9&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;ATO COTEPE/ICMS 06.08 (ER-PAF-ECF Versão 01.08)&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;color: blue;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;http://www.megaupload.com/?d=WQEU3FLS&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;http://www.megaupload.com/?d=&lt;wbr&gt;&lt;/wbr&gt;WQEU3FLS&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;ATO COTEPE/ICMS 06.08 (ER-PAF-ECF Versão 01.09)&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;color: blue;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;http://www.megaupload.com/?d=DXWKVNQE&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;http://www.megaupload.com/?d=&lt;wbr&gt;&lt;/wbr&gt;DXWKVNQE&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://guilhermebragaf1.blogspot.com/feeds/6195226516240600378/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://guilhermebragaf1.blogspot.com/2011/12/ato-cotepeicms-n-6-de-14-de-abril-de.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/142520387185854483/posts/default/6195226516240600378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/142520387185854483/posts/default/6195226516240600378'/><link rel='alternate' type='text/html' href='http://guilhermebragaf1.blogspot.com/2011/12/ato-cotepeicms-n-6-de-14-de-abril-de.html' title='ATO COTEPE/ICMS N° 6, DE 14 DE ABRIL DE 2008'/><author><name>Guilherme Braga</name><uri>http://www.blogger.com/profile/16830822452229257562</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhehJQRuxzziq-Qa9uchcLw1oPhef-c1Q3meO-lkFmuYVdEoIoRoVa41KSh2NDulpNVzqOQ0YLjgHPc_h-6sp0q2tFaxLDM103MqrFNP3NvMoMjB9spVL29kk2_ajtKxA/s220/SAM_4046.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-142520387185854483.post-1175264405229917845</id><published>2011-08-24T19:39:00.000-07:00</published><updated>2011-08-24T19:49:48.006-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PAF-ECF"/><title type='text'>Exclusão de dados do Bloco VII do PAF-ECF</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Pessoal,&lt;br /&gt;
&lt;br /&gt;
No bloco VII da versão 01.08 do ER-PAF-ECF, vem com uma novidade que é tratar também a exclusão/inclusão de dados no banco de dados. Levando em consideração a lógica que passei no post anterior &quot;Bloco VII do PAF-ECF&quot; (&lt;a href=&quot;http://guilhermebragaf1.blogspot.com/2011/07/bloco-vii-do-paf-ecf.html&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;http://guilhermebragaf1.&lt;wbr&gt;&lt;/wbr&gt;blogspot.com/2011/07/bloco-&lt;wbr&gt;&lt;/wbr&gt;vii-do-paf-ecf.html&lt;/span&gt;&lt;/a&gt;), tratar a inclusão é fácil, é só utilizar a mesma lógica para tratar a alteração de dados, no entanto como tratar um registro excluído ?&lt;br /&gt;
&lt;br /&gt;
Utilizei a seguinte lógica:&lt;br /&gt;
&lt;br /&gt;
Criei uma trigger para cada tabela que faz parte dos registros dos arquivos que terão que evidenciar a exclusão de dados. Essa trigger identifica qual o programa que está executando a exclusão. Se a exclusão não for executada pela minha aplicação a trigger irá inclui esse registro, que está sendo excluído, em uma tabela auxiliar, criando assim uma tabela de log só para os registros excluídos da tabela principal. Quando minha aplicação gerar os arquivos eletrônicos, irá ler também essas tabelas auxiliares para identificar os registros que foram excluídos das suas tabelas principais para serem também contemplados no arquivo eletrônico.&lt;br /&gt;
&lt;br /&gt;
Abaixo mostro como fica mais ou menos a trigger utilizando uma aplicação feita em Visual Basic com banco de dados SQL Server:&lt;/span&gt; &lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000; font-family: Arial, Helvetica, sans-serif; font-size: xx-small;&quot;&gt;&lt;br /&gt;
&lt;i&gt;CREATE TRIGGER NOME_DA_TRIGGER&lt;br /&gt;
&amp;nbsp;&amp;nbsp; ON&amp;nbsp; NOME_DA_TABELA&lt;br /&gt;
&amp;nbsp;&amp;nbsp; AFTER DELETE&lt;br /&gt;
AS&lt;br /&gt;
BEGIN&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; DECLARE @PROGRAMA VARCHAR(300)&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT @PROGRAMA = PROGRAM_NAME FROM SYS.SYSPROCESSES WHERE SPID = @@SPID&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IF @PROGRAMA &amp;lt;&amp;gt; &#39;VISUAL BASIC&#39;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; BEGIN &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; -- AQUI SERÁ FEITO A INCLUSÃO DO REGISTRO QUE ESTÁ SENDO EXCLUÍDO NA TABELA AUXILIAR PARA &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000; font-family: Arial, Helvetica, sans-serif; font-size: xx-small;&quot;&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -- QUE SEJA INCLUÍDO COM O CARACTER &quot;?&quot; NA GERAÇÃO DO ARQUIVO ELETRÔNICO&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; END&lt;br /&gt;
END&lt;br /&gt;
GO&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000; font-family: arial; font-size: xx-small;&quot;&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://guilhermebragaf1.blogspot.com/feeds/1175264405229917845/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://guilhermebragaf1.blogspot.com/2011/08/exclusao-de-dados-do-bloco-vii-do-paf.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/142520387185854483/posts/default/1175264405229917845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/142520387185854483/posts/default/1175264405229917845'/><link rel='alternate' type='text/html' href='http://guilhermebragaf1.blogspot.com/2011/08/exclusao-de-dados-do-bloco-vii-do-paf.html' title='Exclusão de dados do Bloco VII do PAF-ECF'/><author><name>Guilherme Braga</name><uri>http://www.blogger.com/profile/16830822452229257562</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhehJQRuxzziq-Qa9uchcLw1oPhef-c1Q3meO-lkFmuYVdEoIoRoVa41KSh2NDulpNVzqOQ0YLjgHPc_h-6sp0q2tFaxLDM103MqrFNP3NvMoMjB9spVL29kk2_ajtKxA/s220/SAM_4046.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-142520387185854483.post-66440951072622490</id><published>2011-08-23T10:29:00.000-07:00</published><updated>2011-08-24T19:36:58.013-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PAF-ECF"/><title type='text'>Especificação de Requisitos do PAF-ECF versão 01.08</title><content type='html'>&lt;div class=&quot;ii gt&quot; id=&quot;:7j&quot;&gt;&lt;div id=&quot;:7i&quot;&gt;&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Pessoal,&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Listo abaixo os principais pontos da Especificação de Requisitos do PAF-ECF versão 01.08:&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Uma pré-venda ou 		um DAV que ainda não tiver sido impresso o seu cupom fiscal, 		poderá ser adicionado mais itens (Requisito V, Item 7 / Requisito 		VI Item 8);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Quando o 		consumidor desistir de algum item da Pré-venda ou do DAV, não 		poderá ser excluído. Nesse caso terá que marcar o item como 		cancelado para quando imprimir o cupom fiscal o mesmo ser impresso 		e cancelado. No caso de impressão do DAV, imprimir a expressão 		&quot;cancelado&quot; ao lado da descrição do item (Requisito V, 		Item 8 / Requisito VI Item 9);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Não será 		permitido alterar a quantidade de um item já registrado na 		Pré-venda ou DAV. Nesse caso terá que registrar um novo item 		(Requisito V, Item 9 / Requisito VI Item 10);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Não é permitido 		a alteração de DAV impresso (Requisito VI, Item 11);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;A  função  “Estoque”  não  se  aplica  ao  PAF-ECF  para  		uso  por  Prestador  de  Serviço Transporte de Passageiros 		(Requisito VII, Item 1, Teste 013);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&quot;ESTOQUE&quot;, 		criação de 2 categorias: &quot;ESTOQUE TOTAL&quot;, contendo 		todos os produtos e &quot;ESTOQUE PARCIAL&quot;, contendo só os 		produtos informado pelo usuário. Nesse caso terá que possibilitar 		ao usuário selecionar, tanto por código quanto por descrição, 		os produtos que irão contemplar o arquivo eletrônico (Requisito 		VII, Item 8);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&quot;DAV 		EMITIDOS&quot;, alteração na impressão e no leiaute (Requisito 		VII, Item 11);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;“ENCERRANTES”, 		alteração no leiaute (Requisito VII, Item 12);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&quot;Parâmetros 		de Configuração&quot;, Impressão em relatório gerencial 		contendo todas as configurações do PAF-ECF. Exemplo: &quot;Porta 		Pinpad = 02&quot;. Não existe leiaute para essa impressão 		(Requisito VII, Item 21);&lt;br&gt;&lt;br&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;ara 		estabelecimentos situado no estado de Minas Gerais,  imprimir o 		código composto por informações relativas ao respectivo cupom 		fiscal (Requisito VIII-A);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;A listagem dos 		executáveis e seus MD5 que é gerada na inicialização do 		PAF-ECF, terá que seguir o leiaute do anexo X (Requisito IX, Item 		1);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O PAF-ECF deve 		ser capaz de emitir, transmitir e armazenar a Nota Fiscal 		Eletrônica (NF-e), nos termos de Ajuste SINIEF, devendo imprimir, 		no campo reservado ao fisco, o mesmo código de MD5 que é impresso 		no Cupom Fiscal. Atenta para levar um token no dia da homologação 		para fazer os testes necessários desse requisito (Requisito 		XXVIII, Item 1A);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Ao final do dia 		de movimento imprimir um cupom fiscal para cada abastecimento 		pendente e finalizar em “dinheiro”. Imprimir também ao final 		do dia o volume (EF-EI-VTACF-VTANF-AFER) remanescente, maior do que 		zero, para cada bico/bomba um cupom fiscal e finalizar em 		“dinheiro”. Caso haja impossibilidade de emissão de redução 		z de todos os ECF, será possível imprimir esses cupons fiscais ao 		final do movimento do dia seguinte considerando os abastecimentos 		realizados e documentos fiscais emitidos no dia corrente e no dia 		anterior (Requisito XXXV, Item 1);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O PAF-ECF para 		uso por posto revendedor de combustível deve possuir parâmetro 		para, a critério da unidade federada, impedir o registro de 		operação de venda e a emissão de Cupom Fiscal, quando detectar 		estoque zero ou negativo do respectivo produto (Requisito XXXVI-A, 		Item 1);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;“&lt;span style=&quot;font-weight: normal;&quot;&gt;Identificação 		do PAF-ECF”, novas informações na impressão (Requisito VII, 		Item 17);&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;Em 		todos os documentos, relatórios, arquivos e comandos previstos 		neste anexo, a expressão DAV-OS pode ser substituída pelo termo 		Conta(s) de Cliente(s) (Requisito XLI-A, Todos os Itens);&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Teste de emissão de cupom fiscal com  arquivo auxiliar de 		configuração de ECF inexistente (Requisito XXII,  Teste 072-A);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Revisar o Bloco VII, pois agora o mesmo está levando em 		consideração exclusão e inclusão de dados no banco de dados dos 		arquivos eletrônicos (Bloco VII, “c”);&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Boa Sorte !!!&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guilhermebragaf1.blogspot.com/feeds/66440951072622490/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://guilhermebragaf1.blogspot.com/2011/08/especificacao-de-requisitos-do-paf-ecf.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/142520387185854483/posts/default/66440951072622490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/142520387185854483/posts/default/66440951072622490'/><link rel='alternate' type='text/html' href='http://guilhermebragaf1.blogspot.com/2011/08/especificacao-de-requisitos-do-paf-ecf.html' title='Especificação de Requisitos do PAF-ECF versão 01.08'/><author><name>Guilherme Braga</name><uri>http://www.blogger.com/profile/16830822452229257562</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhehJQRuxzziq-Qa9uchcLw1oPhef-c1Q3meO-lkFmuYVdEoIoRoVa41KSh2NDulpNVzqOQ0YLjgHPc_h-6sp0q2tFaxLDM103MqrFNP3NvMoMjB9spVL29kk2_ajtKxA/s220/SAM_4046.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-142520387185854483.post-4360817307211196466</id><published>2011-07-21T10:18:00.000-07:00</published><updated>2011-08-24T19:35:11.624-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PAF-ECF"/><title type='text'>Estorno de Cupom Fiscal Cancelado</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Por exigência do fisco, os ECFs (Emissores de cupons fiscais) só permitem o cancelamento do último cupom fiscal, se o cancelamento ocorrer imediatamente após a venda, isto é, sem que seja iniciada a emissão de qualquer outro documento pelo ECF, este poderá ser feito pelo próprio equipamento.&lt;/span&gt;&lt;br /&gt;
&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Muitos contribuintes não sabem como proceder quando não conseguem cancelar a venda. Um exemplo que ocorre muito é o estorno de uma venda que foi recebida com cartão, por ela ter um comprovante vinculado ao cupom fiscal o ECF não permite seu cancelamento.&lt;/span&gt;&lt;br /&gt;
&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Nesse caso o contribuinte deve emitir uma nota fiscal de entrada, a fim de poder se recuperar do imposto debitado na operação de saída ora cancelada e anexar o cupom fiscal a essa nota fiscal de entrada. Observar as demais disposições estabelecidas para essa emissão.&lt;/span&gt;&lt;br /&gt;
&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Essa orientação foi divulgada no site do Estado do Rio de Janeiro (www.receita.rj.gov.br), por intermédio dos esclarecimentos de 25 a 29/9/00, que sua utilização serve para qualquer estado.&lt;/span&gt;&lt;br /&gt;
&lt;br&gt;</content><link rel='replies' type='application/atom+xml' href='http://guilhermebragaf1.blogspot.com/feeds/4360817307211196466/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://guilhermebragaf1.blogspot.com/2011/07/estorno-de-cupom-fiscal-cancelado.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/142520387185854483/posts/default/4360817307211196466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/142520387185854483/posts/default/4360817307211196466'/><link rel='alternate' type='text/html' href='http://guilhermebragaf1.blogspot.com/2011/07/estorno-de-cupom-fiscal-cancelado.html' title='Estorno de Cupom Fiscal Cancelado'/><author><name>Guilherme Braga</name><uri>http://www.blogger.com/profile/16830822452229257562</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhehJQRuxzziq-Qa9uchcLw1oPhef-c1Q3meO-lkFmuYVdEoIoRoVa41KSh2NDulpNVzqOQ0YLjgHPc_h-6sp0q2tFaxLDM103MqrFNP3NvMoMjB9spVL29kk2_ajtKxA/s220/SAM_4046.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-142520387185854483.post-3185110567020781109</id><published>2011-07-14T09:50:00.000-07:00</published><updated>2011-07-28T10:28:46.915-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PAF-ECF"/><title type='text'>Bloco VII do PAF-ECF</title><content type='html'>&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;Esse bloco serve para que seja identificado na visualização dos arquivos  eletrônicos quais os registros que sofreram alterações que não foram  feitas pelo PAF-ECF, ou seja, se algum registro for alterado via banco  de dados ou por qualquer outro programa que não seja o PAF-ECF é para  ser identificado com o caracter &quot;?&quot; conforme o requisito &quot;b&quot;.&lt;br /&gt;
&lt;br /&gt;
Abaixo irei mostrar como implementei esse requisito utilizando o ER-PAF-ECF versão 01.07:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-4e_whWLqNQA/Th8e8O1yI7I/AAAAAAAABws/vpx3w6dwqlc/s1600/tabela.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;i&gt;BLOCO VII&lt;br /&gt;
DADOS TÉCNICOS PARA GERAÇÃO DA ASSINATURA DIGITAL DO&lt;br /&gt;
REGISTRO TIPO EAD&lt;br /&gt;
ANEXO VIII DO ATO COTEPE 06/08&lt;br /&gt;
&lt;br /&gt;
REQUISITO – Observações – “b”&lt;br /&gt;
&lt;br /&gt;
b) A alteração de dados no arquivo eletrônico assinado digitalmente deverá ser evidenciada,&lt;br /&gt;
apenas&amp;nbsp; nos&amp;nbsp; registros&amp;nbsp; alterados,&amp;nbsp; mediante&amp;nbsp; a&amp;nbsp; substituição&amp;nbsp; de&amp;nbsp; brancos&amp;nbsp; pelo&amp;nbsp; caractere&amp;nbsp; “?”&amp;nbsp; no&lt;br /&gt;
campo:&lt;br /&gt;
b.1) “Modelo do ECF” no caso do registro tipo D2 constante no Anexo III;&lt;br /&gt;
b.2) “Unidade” no caso do registro tipo E2 constante no Anexo IV;&lt;br /&gt;
b.3) “Unidade” no caso do registro tipo P2 constante no Anexo V;&lt;br /&gt;
b.4)&amp;nbsp; “Modelo&amp;nbsp; do&amp;nbsp; ECF”&amp;nbsp; no&amp;nbsp; caso&amp;nbsp; dos registros&amp;nbsp; tipo&amp;nbsp; R01,&amp;nbsp; R02, R03,&amp;nbsp; R04, R05,&amp;nbsp; R06&amp;nbsp; e&amp;nbsp; R07&lt;br /&gt;
constantes no Anexo VI;&lt;br /&gt;
b.5) “Tipo de documento” no caso do registro tipo T2 constante no Anexo VII.&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Vou fazer um exemplo da geração do arquivo E2 (Estoque) para demostrar a lógica que utilizei:&lt;br /&gt;
&lt;br /&gt;
No  banco de dados do PAF-ECF criei um campo chamado &quot;chave&quot; no final de  todas as tabelas envolvidas diretamente na construção dos arquivos  eletrônicos do requisito &quot;b&quot;. Esse campo &quot;chave&quot; guarda a combinação de  todos os dados do registro criptografado (estou utilizando o algoritmo  de criptografia do MD5, mas nesse caso pode utilizar qualquer  algoritmo).&lt;br /&gt;
&lt;br /&gt;
Vamos tomar como base a estrutura da tabela de produto abaixo:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-4e_whWLqNQA/Th8e8O1yI7I/AAAAAAAABws/vpx3w6dwqlc/s1600/tabela.JPG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-4e_whWLqNQA/Th8e8O1yI7I/AAAAAAAABws/vpx3w6dwqlc/s1600/tabela.JPG&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-KVrRSXNvfXM/Th8fU5U2fkI/AAAAAAAABww/_XEIwrEEHzY/s1600/tabela1.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-KVrRSXNvfXM/Th8fU5U2fkI/AAAAAAAABww/_XEIwrEEHzY/s1600/tabela1.JPG&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;br /&gt;
Toda  vez que inserir ou alterar os registros nessa tabela é feito a  criptografia dos campos desse registro e o resultado é colocado no campo  chave. Na prática, é gerar a criptografia da combinação dos campos  (Codigo, Descricao, Unidade, Estoque e DataEstoque) e colocar o  resultado no campo Chave, toda vez que incluir ou alterar o produto.&lt;br /&gt;
&lt;br /&gt;
Incluimos o seguinte produto:&lt;br /&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-KVrRSXNvfXM/Th8fU5U2fkI/AAAAAAAABww/_XEIwrEEHzY/s1600/tabela1.JPG&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;22&quot; src=&quot;http://4.bp.blogspot.com/-KVrRSXNvfXM/Th8fU5U2fkI/AAAAAAAABww/_XEIwrEEHzY/s400/tabela1.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Na  geração dos arquivos eletrônicos é feito uma validação desse campo  chave para verificar se os dados criptografado batem com o dado do campo  chave. Se não bater é porque o registro foi modificado fora do PAF-ECF,  nesse caso irá ser colocado o caracter &quot;?&quot;.&lt;br /&gt;
&lt;br /&gt;
Quando geramos o arquivo eletrônico de estoque, sem modificar esse registro fora do PAF-ECF, ele irá ficar assim:&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;E21137675300011200000000001001Blusa&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Un&amp;nbsp;&amp;nbsp;&amp;nbsp; +00000000020110518&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;Quando geramos o arquivo eletrônico de estoque modificando esse registro fora do PAF-ECF ele irá ficar assim: &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;E21137675300011200000000001001&lt;/span&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Blusa&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ??????+00001000020110518&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;Nesse caso alterei o valor do estoque, via banco de dados, para 100.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
E assim utilize essa lógica para as demais tabelas e os demais tipos de arquivos eletrônicos.&lt;br /&gt;
&lt;br /&gt;
Boa Sorte !!&lt;/span&gt;&lt;br /&gt;
&lt;div id=&quot;:4n&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guilhermebragaf1.blogspot.com/feeds/3185110567020781109/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://guilhermebragaf1.blogspot.com/2011/07/bloco-vii-do-paf-ecf.html#comment-form' title='7 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/142520387185854483/posts/default/3185110567020781109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/142520387185854483/posts/default/3185110567020781109'/><link rel='alternate' type='text/html' href='http://guilhermebragaf1.blogspot.com/2011/07/bloco-vii-do-paf-ecf.html' title='Bloco VII do PAF-ECF'/><author><name>Guilherme Braga</name><uri>http://www.blogger.com/profile/16830822452229257562</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhehJQRuxzziq-Qa9uchcLw1oPhef-c1Q3meO-lkFmuYVdEoIoRoVa41KSh2NDulpNVzqOQ0YLjgHPc_h-6sp0q2tFaxLDM103MqrFNP3NvMoMjB9spVL29kk2_ajtKxA/s220/SAM_4046.JPG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-4e_whWLqNQA/Th8e8O1yI7I/AAAAAAAABws/vpx3w6dwqlc/s72-c/tabela.JPG" height="72" width="72"/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-142520387185854483.post-9075182649560464749</id><published>2011-07-07T19:12:00.000-07:00</published><updated>2011-07-08T09:53:39.830-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PAF-ECF"/><title type='text'>Requisito IX do PAF-ECF</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Esse requisito tem como objetivo garantir que o PAF-ECF homologado não sofreu alteração, pois se o mesmo sofrer alguma alteração o MD5 que será impresso no cupom fiscal não vai ser mais o mesmo que foi homologado e registrado.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Ao implementar esse requisito cuidado para não utilizarem qualquer gerador de MD5 existente na web. Aconselho a utilizar o FSUM (&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;a href=&quot;http://www.slavasoft.com/fsum/&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;http://www.slavasoft.com/&lt;wbr&gt;&lt;/wbr&gt;fsum/&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;) que é o adotado pela Secretaria da Fazenda.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Abaixo mostro na prática como implementar esse requisito. Para isso irei mim basear na especificação de requisitos do PAF-ECF (ER-PAF-ECF) versão 01.07.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;ITEM 1: O PAF-ECF deve a cada inicialização:&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;a) gerar, por meio do algoritmo Message Digest-5 (MD-5), código de autenticação para&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;cada arquivo executável que realize os requisitos estabelecidos nesta especificação;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Vamos levar em consideração que o seu PAF-ECF tem os seguintes executáveis e a seguinte estrutura:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: Arial,Helvetica,sans-serif;&quot;&gt;C:\Sistema\Caixa.exe&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;C:\Sistema\Retaguarda.exe&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: Arial,Helvetica,sans-serif;&quot;&gt;Com o arquivo fsum.exe (que nesse caso vamos colocá-lo na pasta C:\Sistema), execute o seguinte comando para gerar o MD5 de cada executável:&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: Arial,Helvetica,sans-serif;&quot;&gt;C:\Sistema\fsum.exe -md5 -r -dC:\Sistema Caixa.exe &amp;gt;c:\md5_exe1.txt&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;C:\Sistema\fsum.exe -md5 -r -dC:\Sistema Retaguarda.exe &amp;gt;c:\md5_exe2.txt&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;b) gerar um arquivo texto, conforme o leiaute estabelecido no Anexo X do Ato&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;COTEPE/ICMS 06/08, contendo a lista de arquivos autenticados, e seus respectivos&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;códigos MD-5;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Exemplo desse arquivo texto:&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;C:\Sistema\Caixa.exe&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B7FAB699933E6FD3D3B3C449FDBBB6&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;6B&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;C:\Sistema\Retaguarda.exe&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp; 6BFDAE60F5C91449A6297B36EBAF71&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;DE&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Vamos chamar esse arquivo de Lista.txt&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;c) gerar, por meio do algoritmo Message Digest-5 (MD-5), código de autenticação do&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;arquivo TXT a que se refere a alínea “b” e gravar o resultado no arquivo auxiliar&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;criptografado e inacessível ao estabelecimento usuário de que trata o item 4 do Requisito&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;XXII, sobrepondo à gravação anteriormente realizada, devendo este código ser impresso&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;no Cupom Fiscal, no campo:&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Aqui vamos gerar o MD5 do arquivo Lista.txt:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;C:\Sistema\fsum.exe -md5 -r -dC:\Sistema Lista.txt &amp;gt;c:\Assinatura.txt&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;c1) &quot;informações complementares&quot;, no caso de ECF que disponibilize este campo, devendo&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;utilizar este campo para esta informação e iniciando a impressão na primeira coluna,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;disponibilizada pelo software básico do ECF, da primeira linha, precedido pela mensagem&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;“MD-5:”&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt; &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;c2) &quot;mensagens promocionais&quot;, no caso de ECF que não disponibilize o campo&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&quot;informações complementares&quot;, devendo utilizar a primeira linha para esta informação e&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;iniciando a impressão na primeira coluna disponibilizada pelo software básico do ECF,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;precedido pela mensagem “MD-5:”&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Agora é só ler o arquivo Assinatura.txt a cada cupom fiscal e colocar a seguinte informação em &quot;mensagens promocionais&quot; ou &quot;informações complementares&quot;, dependendo da impressora fiscal.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Exemplo:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;MD5:&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 14px; white-space: pre;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;1055d3e698d289f2af8663725127bd4b&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 14px; white-space: pre;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://guilhermebragaf1.blogspot.com/feeds/9075182649560464749/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://guilhermebragaf1.blogspot.com/2011/07/requisito-ix-do-paf-ecf.html#comment-form' title='8 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/142520387185854483/posts/default/9075182649560464749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/142520387185854483/posts/default/9075182649560464749'/><link rel='alternate' type='text/html' href='http://guilhermebragaf1.blogspot.com/2011/07/requisito-ix-do-paf-ecf.html' title='Requisito IX do PAF-ECF'/><author><name>Guilherme Braga</name><uri>http://www.blogger.com/profile/16830822452229257562</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhehJQRuxzziq-Qa9uchcLw1oPhef-c1Q3meO-lkFmuYVdEoIoRoVa41KSh2NDulpNVzqOQ0YLjgHPc_h-6sp0q2tFaxLDM103MqrFNP3NvMoMjB9spVL29kk2_ajtKxA/s220/SAM_4046.JPG'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-142520387185854483.post-4621048473193042637</id><published>2011-07-06T10:21:00.000-07:00</published><updated>2011-07-07T19:48:17.204-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Visual Basic"/><title type='text'>Exemplo Rede Neural (Inteligência Artificial)</title><content type='html'>&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Quando paguei a disciplina de Inteligência Artificial na faculdade, tive que fazer um pequeno projeto para treinar uma rede neural usando o modelo perceptron para reconhecer a assinatura de um usuário a partir de um desenho. Abaixo disponibilizo o código-fonte desse projeto que fiz em visual basic.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Download: &lt;a href=&quot;http://www.megaupload.com/?d=MSU2D579&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;http://www.megaupload.com/?d=MSU2D579&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guilhermebragaf1.blogspot.com/feeds/4621048473193042637/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://guilhermebragaf1.blogspot.com/2011/07/exemplo-rede-neural-inteligencia.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/142520387185854483/posts/default/4621048473193042637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/142520387185854483/posts/default/4621048473193042637'/><link rel='alternate' type='text/html' href='http://guilhermebragaf1.blogspot.com/2011/07/exemplo-rede-neural-inteligencia.html' title='Exemplo Rede Neural (Inteligência Artificial)'/><author><name>Guilherme Braga</name><uri>http://www.blogger.com/profile/16830822452229257562</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhehJQRuxzziq-Qa9uchcLw1oPhef-c1Q3meO-lkFmuYVdEoIoRoVa41KSh2NDulpNVzqOQ0YLjgHPc_h-6sp0q2tFaxLDM103MqrFNP3NvMoMjB9spVL29kk2_ajtKxA/s220/SAM_4046.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-142520387185854483.post-1389355321792410410</id><published>2011-07-05T18:47:00.000-07:00</published><updated>2011-07-07T19:48:40.935-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Visual Basic"/><title type='text'>Alterando resolução do Monitor</title><content type='html'>&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;Abaixo disponibilizo um projeto que mostra como alterar a resolução do monitor.&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;Download:&amp;nbsp;&lt;a href=&quot;http://www.megaupload.com/?d=9FP7CK0Y&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;http://www.megaupload.com/?d=9FP7CK0Y&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guilhermebragaf1.blogspot.com/feeds/1389355321792410410/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://guilhermebragaf1.blogspot.com/2011/07/alterando-resolucao-do-monitor.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/142520387185854483/posts/default/1389355321792410410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/142520387185854483/posts/default/1389355321792410410'/><link rel='alternate' type='text/html' href='http://guilhermebragaf1.blogspot.com/2011/07/alterando-resolucao-do-monitor.html' title='Alterando resolução do Monitor'/><author><name>Guilherme Braga</name><uri>http://www.blogger.com/profile/16830822452229257562</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhehJQRuxzziq-Qa9uchcLw1oPhef-c1Q3meO-lkFmuYVdEoIoRoVa41KSh2NDulpNVzqOQ0YLjgHPc_h-6sp0q2tFaxLDM103MqrFNP3NvMoMjB9spVL29kk2_ajtKxA/s220/SAM_4046.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-142520387185854483.post-8577884310460472118</id><published>2011-07-05T18:18:00.000-07:00</published><updated>2011-07-08T09:55:18.252-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Visual Basic"/><title type='text'>Cursores de um Recordset ADO</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: Arial,Helvetica,sans-serif;&quot;&gt;O que são Cursores?&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;No ADO, quando nós falamos em cursores, estamos falamos sobre uma linha.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Quando você executa uma consulta que retorna vários registros, por exemplo SELECT * FROM Tabela, o resultado usa um cursor para navegar nos registros. O cursor pode ser usado no cliente com o argumento AdUseCliente, ou no servidor com o argumento AdUseServer.Os 4 tipos de cursores são:&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;AdOpenForwardOnly&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;AdOpenStatic&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;AdOpenDynamic&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;AdOpenKeyset.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Cursor Local (CursorLocation)&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;O objeto ADODB.Connection (O objeto ADO usado para as trocas de dados entre a aplicação VB e o MySQL Server) tem uma propriedade chamada CursorLocation que é usada para enviar/receber a posição do cursor que será usado por qualquer objeto RecordSet que acessará seus dados através do objeto Connection. As duas opções possíveis para essa propriedade são AdUseServer (padrão) e AdUseCliente .&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;AdUseServer&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Quando você usa o AdUseServer, a responsabilidade para manipulação dos dados gerados pela consulta fica com o banco de dados no servidor. O próprio MySQL não suporta cursores no servidor, então o manipulador dos dados é o Driver ODBC.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;O benefício do cursor no lado do servidor é que nós ganhamos acesso ao tipo de cursor dinâmico. Isso permite que nós vemos qualquer as mudanças nos dados que são feitas por outros usuários nos dados que sua aplicação está acessando.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Por exemplo: vamos dizer que você esteja vendendo bilhetes para um concerto com sua aplicação, você precisa saber qual assento está disponível para venda no tempo real para que não seja vendido duas vezes.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Com o cursor no lado do servidor, você tem certeza que os dados que está sendo manipulado é o mais atual. Além que você tem a possibilidade de travar os dados que você está trabalhando quando é editado, para certificar que as mudanças ser gravadas com sucesso no banco de dados.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Com o cursor no lado do servidor (AdUseServer), nós temos acesso aos cursores AdOpenDynamic e AdOpenForwardOnly, e todos os quatro tipos de travamento do RecordSet, que será discutido ao longo do artigo.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Deve-se observar que usando um cursor no lado do cliente, e o cursor AdOpenDynamic em particular, resultará em perda significativa do desempenho, e deve ser evitado quando possível. Além disso, certas funcionalidades, como a propriedade RecordCount do Recordset e as funções GetChunk e AppendChunk para manipulação de campos BLOB, falhará ou retornará resultados anormais quando é usado o cursor no lado do servidor.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;AdUseClient&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Cursores no lado do cliente, especificado com a palavra-chave AdUseCliente, a manipulação é interna do ADO. Estes cursores oferece mais funcionalidade do que o cursor no lado do servidor e resulta em menos carga ocupada no servidor. A maioria da funcionalidade avançada do ADO é projetado para uso com o cursor no cliente.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;E eu pessoalmente uso o cursor do cliente para minhas aplicações (com algumas exceções).&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Quando é usado o cursor do cliente (AdUseClient), apenas o cursor AdOpenStatic é disponível, e nós não podemos usar tipo de travamento(LockType) AdLockPessimistic.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;O cursor do cliente diminui a carga no servidor do MySQL, desde que com o dado de cursor estático é enviado ao cliente, então o servidor não tem nenhuma comunicação adicional com o cliente. Isso permite que seu servidor escale muito melhor do que com o cursor no lado do servidor.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Tipos de Cursor (CursorTypes)&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Além dos dois cursor locais(AdUseServer e AdUseClient), existe quatro tipos de cursor, três são suportados pelo ODBC:&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;AdOpenStatic (lado do cliente)&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;AdOpenForwardOnly (lado do servidor)&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;AdOpenDynamic (lado do servidor)&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Os tipos de cursor tem características e funcionalidades diferentes e eu irei discutir isso com mais detalhes. O quarto tipo de cursor, adOpenKeyset, não é suportado pelo MySQL e MyODBC.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;AdOpenStatic&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;O cursor estático é o único cursor disponível quando se usa o adUseClient. Com o cursor estático, o servidor emitirá o resultado ajustado no cliente, depois não haverá nenhuma mais nenhuma comunicação adicional do servidor ao cliente.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;O cliente pode comunicar-se devolta com o servidor para enviar as mudanças no servidor. A maioria dos recursos vai para o cliente do que o servidor com o cursor estático, ou seja, o resultado é armazenado na memória do cliente ao invés do servidor.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Se um cliente diferente fizer mudanças nos dados do servidor depois que uma consulta é enviado, o outro cliente não reberá nenhuma notificação das mudanças. O cursor estático é bi-direcional , isso significa que a sua aplicação pode mover o anterior e o próximo registro do RecordSet.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Os seguintes métodos são disponíveis ao RecordSet usando o cursor estático e o tipo de travamento adLockOptmistic (breve mais tipos de travamento)&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;AddNew&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Delete&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Find&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;MoveFirst&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;MovePrevious&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;MoveNext&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;MoveLast&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Resync&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Update&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;UpdateBatch&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;O cursor estático mostrará também um valor exato para a propriedade RecordCount do seu RecordSet, e suporte aos métodos GetChunk e AppendChunk para tratar campos BLOB.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Uma característica do cursor estático é a capacidade buscar dados asynchronously. Quando os dados buscados forem asynchronously, uma linha separada segura a recuperação dos registros, e sua aplicação VB pode retornar registros automaticamente.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Este assunto fica pendente, mas se você quiser testar essa característica, use o adFetchAsync durante a chamada do método RecordSet.Open. Se você especificar qualquer outro tipo de cursor que não seja adOpenStatic usando o adUseClient, será automaticamente convertido para cursor estático.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;AdOpenForwardOnly&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;O adOpenForwardOnly é o tipo de cursor mais rápido de todos, mas tem algumas limitações. O adOpenForwarOnly não suporta a propriedade RecordCount e o método MovePrevious do objeto RecordSet.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;A forma mais eficiente de se fazer uma consulta é usando o adOpenForwardOnly com o cursor de travamento adLockReadOnly. Apenas os métodos seguintes do RecordSet são suportados por um cursor adOpenForwardOnly e um travamento Optimistic:&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;AddNew&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Delete&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Find&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Update&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;UpdateBatch&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Com o MySQL e MyODBC, nós podemos especificar a opção 1048576 na sua string de conexão ou indicar a opção &quot;Don&#39;t Cache Results&quot; no gerente de conexão ODBC. Com essa opção, o uso da memória no cliente é limitado e apenas um registro é alocado na memória.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Com cada chamada no método MoveNext do RecordSet, o registro é discartado e o próximo registro é requerido pelo servidor.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;AdOpenDynamic&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Enquanto o adOpenForwardOnly é o mais rápidos dos tipos de cursores, o cursor dinâmico é o menos eficiente. O cursor dinâmico suporta a ativação manual usando a opção 32 na sua string de conexão, ou marcando a opção &quot;Enable Dynamic Cursor&quot; no gerenciador ODBC.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Sem essa opção, qualquer outro tipo de cursor do que forward-only pode ser convertido automaticamente para cursor estático, com a opção ativada, todos os cursores fora forward-only irá se converter para dinâmico.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Por que o cursor dinâmico é tão lento? Por que não há nenhum suporte nativo para cursor dinâmico, cursor no lado do servidor no MySQL, todas as chamadas para movimentação de registro(MoveNext, MovePrevious, etc.) o driver MyODBC converte seu método para uma consulta SQL, fixa a consulta, e retorna o registro.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Isso significa também que para um cursor dinâmico trabalhar corretamente, você precisará de um campo com chave primária para determinar anterior e próximo. Por isso, os cursores dinâmicos não são recomendados a menos que seja muito necessário.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;O cursor dinâmico suporta os seguintes métodos do RecordSet aberto com cursor de travamento Optimistic:&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;AddNew&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Delete&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Find&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;MoveFirst&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;MovePrevious&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Update&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;UpdateBatch&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;O cursor dinâmico pode ser benéfico para aplicações multi-usuários, é melhor evitá-lo quando possível, e trabalhar com aplicações multi-usuários quando possível chamando os métodos resync e requery quando possível, e executando comando UPDATE somando e diminuindo valores usando Count do que usar recordsets para atualizar.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Tipos de Travamento (LockType)&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Quando as posições do cursor e os tipos do cursor especificam como nossos dados estão sendo segurados, a propriedade do tipo do travamento especifica como vamos travar os dados para proteger todas as mudanças que você fizer e assegurarmos que foram processados.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Existe quatro tipos de travamento, e o tipo de travamento é indicado no método Open do objeto RecordSet (pode ser também indicado usando a propriedade LockType do objeto RecordSet). Os quatros tipos de travamento são:&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;adLockReadyOnly (padrão)&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;adLockOptimistic&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;adLockPessimistic&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;adLockBatchOptimistic&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Todos os quatros tipos pode ser usado com o cursor no lado do servidor, e o adLockPessimistic não é hablitado para o cursor no lado do cliente.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;adLockReadyOnly&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;O tipo de travamento padrão é AdLockReadyOnly. O travamento de apenas-leitura é o travamento mais eficiente para acessar um dado, porque ele não verifica se o dado mudou na hora da consulta e consequentemente não há nenhum tráfego extra entre o servidor de carregar os registros.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Como o nome implica, usando um travamento apenas-leitura não enxerga qualquer mudança feita na tabela. Se você ver algum erro como &quot;Current recordset does not support updating&quot;, entao você precisa mudar seu tipo de travamento para adLockReadyOnly.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;adLockOptimistic&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;O travamento otimista é usado para modificações que acontecem simultaneamente, ou onde tem múltiplos usuários fazendo mudanças nos mesmos registros. Com um bloqueio opmistic, a tabela ou o registro bloqueado quando o método Update do RecordSet é chamado.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Isso assegurará que a mudança foi feita com sucesso, mas não impede que outros usuários mudem os dados que você mudou pelo VB.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;O tipo de bloqueio adLockOptimistic é tipicamente sua melhor escolha ao decidir-se em um bloqueio da tabela para uma situação que não seja de apenas-leitura. Na maioria das aplicações, os dois tipos de bloqueio que eu uso são adLockReadyOnly e adLockOptmistic.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;adLockBatchOptimistic&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Quando é usado o bloqueio adBatchOptmistic, as mudanças será alocada no cache até que o método UpdateBatch do RecordSet seja chamado. Quando o UpdateBatch é chamado, todas as mudanças serão feitas no servidor em grupo.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Isso pode fazer a inserção de um grande número registros mais eficiente. (Detalhe: chamando um &quot;ALTER TABLE mytable DISABLE KEYS&quot; depois de uma longa pacote de inclusão, seguido por &quot;ALTER TABLE mytable ENABLE KEYS&quot; depois do pacote completo, pode melhorar muito a velocidade do processo de inclusão por pacote, enquanto MySQL pode reconstruir um índice mais rapidamente do que adicionar uma entrada de cada vez.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;adLockPessimistic&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Em uma situação de simultaniedade elevada, com os vários usuários modificando os mesmos dados, você irá precisar de um tipo de bloqueio pessimistic. Com o adLockPessimistic, os registros (ou a tabela) serão bloqueados assim que você começar a fazer mudanças no registro atual, e não será desbloqueado até que o método uUdate seja chamado.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Isso assegurará que você não tenha mudado um registro junto com outros usuários, especialmente com uma tabela MyISAM, com características de bloqueio somente nível de tabela.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Certifique-se de que as mudanças estão seguindo imediatamente pelo método do Update do Recordset, e que não tenha nenhuma ruptura para o usuário entrar com uma mudança e o update a fim de não assegurar nenhuma longa ruptura (e melhorar os bloqueios cancelados pelo banco de dados) na operação do banco de dados&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Evite usar o adLockPessimistc quando possível, porque é muito recurso intensivo e envolve muito mais o trabalho no lado do cliente e do servidor.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Conclusão&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Quando tiver um grande número de combinações de CursorType e CursorLocation, os únicos que estão disponível para o programador VB/MySQL são:&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;adUseClient - adOpenStatic&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;adUseServer - adOpenForwardOnly&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;adUseServer - adOpenDynamic&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Para maioria dos usuários, adUseClient com adOpenStatic é a melhor escolha, com o bloqueio adLockReadyOnly para qualquer operação de somente leitura (exportar para um arquivo, carregar registros em um ListView, ComboBox, etc.) e adLockOptmistic para qualquer operação de leitura/gravação.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;adOpenDynamic e adLockPessimistic é a melhor solução para situações onde você precisa assegurar que vários usuários não corrompe cada outros dados.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;A combinação do adUseServer, adOpenForwardOnly e adLockReadyOnly oferece a melhor performance para operações de preechimento de controles e exportação de arquivos.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Quando combinado com a opção 1048576 (Don&#39;t cache query results), adOpenForwardOnly fornece também uma excelente performance de memória, já que apenas um registro é carregado na memória.&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Artigo traduzido por João Carlos C. Silva&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;Artigo original escrito por Mike Hillyer (&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;a href=&quot;http://www.vbmysql.com/&quot; style=&quot;background-color: white;&quot; target=&quot;_blank&quot;&gt;http://www.vbmysql.com&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://guilhermebragaf1.blogspot.com/feeds/8577884310460472118/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://guilhermebragaf1.blogspot.com/2011/07/cursores-de-um-recordset-ado.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/142520387185854483/posts/default/8577884310460472118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/142520387185854483/posts/default/8577884310460472118'/><link rel='alternate' type='text/html' href='http://guilhermebragaf1.blogspot.com/2011/07/cursores-de-um-recordset-ado.html' title='Cursores de um Recordset ADO'/><author><name>Guilherme Braga</name><uri>http://www.blogger.com/profile/16830822452229257562</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhehJQRuxzziq-Qa9uchcLw1oPhef-c1Q3meO-lkFmuYVdEoIoRoVa41KSh2NDulpNVzqOQ0YLjgHPc_h-6sp0q2tFaxLDM103MqrFNP3NvMoMjB9spVL29kk2_ajtKxA/s220/SAM_4046.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-142520387185854483.post-7078245037998691182</id><published>2011-07-02T11:58:00.000-07:00</published><updated>2011-07-08T09:52:37.338-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Banco de Dados"/><category scheme="http://www.blogger.com/atom/ns#" term="Visual Basic"/><title type='text'>Camada de acesso a Banco de Dados - Visual Basic</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;Visando facilitar o dia-a-dia dos desenvolvedores estou disponibilizando essa camada de acesso a banco de dados Sql Server.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;Download:&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;a href=&quot;http://www.megaupload.com/?d=5NITFTPZ&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;http://www.megaupload.com/?d=&lt;wbr&gt;&lt;/wbr&gt;5NITFTPZ&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;Todas os métodos retornam um type com as seguintes informações:&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000;&quot;&gt;Situacao &lt;/span&gt;(&quot;0&quot; - OK; &quot;1&quot; - Duplicado; &quot;2&quot; - Inexistente; 9 - &quot;Erro&quot;)&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000;&quot;&gt;Mensagem &lt;/span&gt;(Quando situação = &quot;9&quot;, retorna a mensagem do erro)&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000;&quot;&gt;rsDadosRetorno&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt; &lt;/span&gt;(Recordset com os dados retornado)&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000;&quot;&gt;CaminhoDownloadArquivo&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt; &lt;/span&gt;(Caminho onde o arquivo foi baixado do banco de dados)&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;Abaixo listo as assinaturas dos métodos que constam nessa camada:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;[Estabelece conexão com o Banco de Dados]&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #cc0000; font-family: Arial,Helvetica,sans-serif;&quot;&gt;Public Function AbreConexao(ByVal p_sServidor As String, ByVal p_sBanco As String, ByVal p_sUsuario As String, ByVal p_sSenha As String, ByVal p_iConexao As Integer, Optional ByVal p_iTimeOutConexao As Integer = 30, Optional ByVal p_iTimeOutComando As Integer = 360) As Variant&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000;&quot;&gt;p_sServidor&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;&amp;nbsp; &lt;/span&gt;= Nome ou Ip do Servidor&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000;&quot;&gt;p_sBanco&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;=&amp;nbsp;&lt;/i&gt;&lt;i&gt;Nome do Banco de Dados&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000;&quot;&gt;p_sUsuario&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;=&amp;nbsp;&lt;/i&gt;&lt;i&gt;Nome do Usuário do Banco de Dados&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000;&quot;&gt;p_sSenha &amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;=&amp;nbsp;&lt;/i&gt;&lt;i&gt;Senha do Usuário do Banco de Dados&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000;&quot;&gt;p_iConexao&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;=&amp;nbsp;&lt;/i&gt;&lt;i&gt;Número da Instância da Conexão&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;p_iTimeOutConexao &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;i&gt;= Tempo limite para estabelecer conexão em segundos (Valor padrão: 30)&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;p_iTimeOutComando &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;i&gt;= Tempo limite para executar um comando em segundos &lt;/i&gt;&lt;i&gt; (Valor padrão: 360)&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;[Fecha a conexão com o Banco de Dados]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000; font-family: Arial,Helvetica,sans-serif;&quot;&gt;Public Function FechaConexao (ByVal p_iConexao As Integer)&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000;&quot;&gt;p_iConexao&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;=&amp;nbsp;&lt;/i&gt;&lt;i&gt;Número da Instância da Conexão&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;[Executa um comando]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000; font-family: Arial,Helvetica,sans-serif;&quot;&gt;Public Function ExecutaComando(ByVal p_iConexao As Integer, ByVal p_sSQL As String, Optional ByVal p_bUsaBeginTran As Boolean = True,&amp;nbsp;Optional ByVal p_TipoCursorRecordset As Integer = 3) As Variant&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000;&quot;&gt;p_iConexao&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;=&amp;nbsp;&lt;/i&gt;&lt;i&gt;Número da Instância da Conexão&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000;&quot;&gt;p_sSQL&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;=&amp;nbsp;&lt;/i&gt;&lt;i&gt;Comando a ser executado (INSERT, SELECT, UPDATE, STORED PROCEDURE,&amp;nbsp;&lt;/i&gt;&lt;i&gt;CREATE, DROP entre outros)&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000;&quot;&gt;p_bUsaBeginTran&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;= True (-1) abre uma transação (Valor Padrão); False (0) não abre uma transação&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000;&quot;&gt;p_TipoCursorRecordset&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;= Tipo de Cursor do Recordset (0 - Somente Leitura; 1 - Não Visualiza&amp;nbsp;&lt;/i&gt;&lt;i&gt;Registros excluídos por outros usuários; 2 -Dinâmico; 3 - Estático)&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;[Confirma a execução do comando&amp;nbsp;se existir uma transação aberta]&lt;/span&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000; font-family: Arial,Helvetica,sans-serif;&quot;&gt;Public Function Commit(ByVal p_iConexao As Integer) As Variant&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000;&quot;&gt;p_iConexao&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;=&amp;nbsp;&lt;/i&gt;&lt;i&gt;Número da Instância da Conexão&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;[Desfaz a execução do comando se existir uma transação aberta]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000; font-family: Arial,Helvetica,sans-serif;&quot;&gt;Public Function Rollback(ByVal p_iConexao As Integer) As Variant&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000;&quot;&gt;p_iConexao&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;=&amp;nbsp;&lt;/i&gt;&lt;i&gt;Número da Instância da Conexão&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;[Grava um arquivo no banco de dados]&lt;/span&gt;&lt;/div&gt;&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000; font-family: Arial,Helvetica,sans-serif;&quot;&gt;Public Function GravaArquivo(ByVal p_iConexao As Integer, ByVal p_sSQL As String, ByVal p_sNomeCampo As String, ByVal p_sCaminhoArquivo As String) As Variant&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000;&quot;&gt;p_iConexao&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;=&amp;nbsp;&lt;/i&gt;&lt;i&gt;Número da Instância da Conexão&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;p_sSQL &lt;/span&gt;&lt;/i&gt;&lt;i&gt;= Consulta (Select) apontando para o registro onde será salvo o arquivo&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;p_sNomeCampo&lt;/span&gt;&lt;/i&gt; &lt;i&gt;= Nome do campo onde será gravado o arquivo&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;p_sCaminhoArquivo &lt;/span&gt;&lt;/i&gt;&lt;i&gt;= Caminho completo do arquivo que será salvo&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;[Baixa o arquivo do banco de dados]&lt;i&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;color: #cc0000;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;i&gt;Public Function BaixaArquivo(ByVal p_iConexao As Integer, ByVal p_sSQL As String, ByVal p_sNomeCampo As String, ByVal &lt;/i&gt;&lt;i&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;p_sCaminhoArquivoDownload&lt;/span&gt;&lt;/i&gt;&lt;i&gt; As String) As Variant&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #cc0000;&quot;&gt;p_iConexao&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i style=&quot;color: black;&quot;&gt;=&amp;nbsp;&lt;/i&gt;&lt;i style=&quot;color: black;&quot;&gt;Número da Instância da Conexão&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;p_sSQL &lt;/span&gt;&lt;/i&gt;&lt;i&gt;= Consulta (Select) apontando para o registro onde será salvo o arquivo&lt;span style=&quot;color: #cc0000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;p_sNomeCampo&lt;/span&gt;&lt;/i&gt; &lt;i&gt;= Nome do campo onde será gravado o arquivo&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;p_sCaminhoArquivoDownload &lt;/span&gt;&lt;/i&gt;&lt;i&gt;= Caminho completo do arquivo que será baixado. Poderá recer outro nome&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;Exemplo em Visual Basic:&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;color: #cc0000;&quot;&gt;&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace; font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim vRetorno As Variant&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim objBanco As New BancoDeDados.SqlServer&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim iConexao As Integer&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; iConexao = 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;Abertura de Conexao&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; vRetorno = objBanco.AbreConexao(&quot;localhost&quot;, &quot;master&quot;, &quot;sa&quot;, &quot;&quot;, iConexao)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; If vRetorno.Situacao = 0 Then&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox &quot;Banco de Dados conectado&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Else&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox &quot;Problema na Conexao. Erro = &quot; &amp;amp; vRetorno.Mensagem&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exit Sub&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Set vRetorno = Nothing&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;Criacao de Tabela&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; vRetorno = objBanco.ExecutaComando(iConexao, &quot;CREATE TABLE USUARIO (ID INT &amp;nbsp;PRIMARY KEY, NOME VARCHAR(50), FOTO IMAGE)&quot;, False)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; If vRetorno.Situacao = 0 Then&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox &quot;Tabela criada com sucesso&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Else&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox &quot;Problema na criacao da tabela. Erro = &quot; &amp;amp; vRetorno.Mensagem&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Set vRetorno = Nothing&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;Inclui registro&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; vRetorno = objBanco.ExecutaComando(iConexao, &quot;INSERT INTO USUARIO (ID,NOME) VALUES (1, &#39;JOAO&#39;)&quot;)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; If vRetorno.Situacao = 0 Then&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Call objBanco.Commit(iConexao)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox &quot;Usuario incluido com sucesso&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ElseIf vRetorno.Situacao = 1 Then&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox &quot;Usuario ja existe&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Else&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox &quot;Problema na inclusao. Erro = &quot; &amp;amp; vRetorno.Mensagem&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Set vRetorno = Nothing&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;Grava arquivo no banco&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; vRetorno = objBanco.GravaArquivo(iConexao, &quot;SELECT FOTO FROM USUARIO WHERE NOME = &#39;JOAO&#39;&quot;, &quot;FOTO&quot;, &quot;C:\IMAGEM.JPG&quot;)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; If vRetorno.Situacao = 0 Then&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox &quot;Arquivo gravado com sucesso&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ElseIf vRetorno.Situacao = 2 Then&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox &quot;Usuario nao encontrado&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Else&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox &quot;Problema no upload do arquivo. Erro = &quot; &amp;amp; vRetorno.Mensagem&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Set vRetorno = Nothing&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;Consulta os dados da Tabela&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; vRetorno = objBanco.ExecutaComando(iConexao, &quot;SELECT * FROM USUARIO&quot;, False, 0)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; If vRetorno.Situacao = 0 Then&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Do While Not vRetorno.rsDadosRetorno.EOF&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox vRetorno.rsDadosRetorno.fields(&quot;NOME&quot;)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vRetorno.rsDadosRetorno.MoveNext&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Loop&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ElseIf vRetorno.Situacao = 2 Then&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox &quot;Usuario nao encontrado&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Else&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox &quot;Problema na Consulta. Erro = &quot; &amp;amp; vRetorno.Mensagem&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Set vRetorno = Nothing&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;Grava arquivo no banco&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; vRetorno = objBanco.BaixaArquivo(iConexao, &quot;SELECT FOTO FROM USUARIO WHERE NOME = &#39;JOAO&#39;&quot;, &quot;FOTO&quot;, &quot;C:\FOTO_BAIXADA.JPG&quot;)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; If vRetorno.Situacao = 0 Then&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox &quot;Arquivo baixado do banco de dados com sucesso&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ElseIf vRetorno.Situacao = 2 Then&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox &quot;Usuario nao encontrado&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Else&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox &quot;Problema no upload do arquivo. Erro = &quot; &amp;amp; vRetorno.Mensagem&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Set vRetorno = Nothing&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;Fecha conexao&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Call objBanco.FechaConexao(iConexao)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox &quot;Banco de dados desconectado&quot;&lt;br /&gt;
&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style=&quot;color: #cc0000;&quot;&gt;&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style=&quot;color: #cc0000;&quot;&gt;&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;,Courier,monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guilhermebragaf1.blogspot.com/feeds/7078245037998691182/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://guilhermebragaf1.blogspot.com/2011/07/classe-de-conexao-ado-visual-basic-60.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/142520387185854483/posts/default/7078245037998691182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/142520387185854483/posts/default/7078245037998691182'/><link rel='alternate' type='text/html' href='http://guilhermebragaf1.blogspot.com/2011/07/classe-de-conexao-ado-visual-basic-60.html' title='Camada de acesso a Banco de Dados - Visual Basic'/><author><name>Guilherme Braga</name><uri>http://www.blogger.com/profile/16830822452229257562</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhehJQRuxzziq-Qa9uchcLw1oPhef-c1Q3meO-lkFmuYVdEoIoRoVa41KSh2NDulpNVzqOQ0YLjgHPc_h-6sp0q2tFaxLDM103MqrFNP3NvMoMjB9spVL29kk2_ajtKxA/s220/SAM_4046.JPG'/></author><thr:total>0</thr:total></entry></feed>