<rss version="2.0" xmlns:a10="http://www.w3.org/2005/Atom"><channel><title>Dicas Técnicas BufaloInfo</title><link>http://www.bufaloinfo.com.br/</link><description>Dicas Técnicas Produzidas pela Búfalo Informática</description><item><link>http://www.bufaloinfo.com.br/dicas.asp?cod=566</link><title>ASP : Gerando uma planilha do excel a partir do ASP</title><description>&lt;br&gt;Alguns truques simples podem ser utilizados para gerar uma planilha do Excel atrav&amp;#233;s do ASP :&lt;br&gt;&lt;br&gt;O Excel consegue interpretar c&amp;#243;digo HTML. Assim sendo, ele &amp;#233; capaz de entender uma tabela em HTML.&lt;br&gt;&lt;br&gt;A propriedade contenttype do objeto Response indica o tipo de conte&amp;#250;do que ser&amp;#225; gerado. O padr&amp;#227;o &amp;#233; gera&amp;#231;&amp;#227;o de HTML, mas podemos alterar o contenttype e dizer que estamos gerando uma planilha do excel. &lt;br&gt;&lt;br&gt;Desta forma, alterando o contenttype, podemos simplesmente imprimir uma tabela, em HTML mesmo, exatamente como sempre fazemos, e o browser ir&amp;#225; se encarregar de abrir o excel para interpreta-la. Veja a instru&amp;#231;&amp;#227;o :&lt;br&gt;&lt;br&gt;Response.ContentType = &amp;quot;application/vnd.ms-excel&amp;quot;&lt;br&gt;&lt;br&gt;Al&amp;#233;m disso podemos pedir ao browser que grave o arquivo, como um download, ao inv&amp;#233;s de exibi-lo. Para isso devemos adicionar um item ao cabe&amp;#231;alho http que estaremos enviando para o client. Veja :&lt;br&gt;&lt;br&gt;Response.AddHeader &amp;quot;content-disposition&amp;quot;,&amp;quot;attachment;filename=entidades.xls&amp;quot;&lt;br&gt;&lt;br&gt;Observe que isso tudo serve n&amp;#227;o apenas para o Excel, mas tamb&amp;#233;m outros tipos de arquivo, bastando apenas alterar o contentType&lt;br&gt;</description></item><item><link>http://www.bufaloinfo.com.br/dicas.asp?cod=529</link><title>ASP : Manipulando Coleções</title><description>A instru&amp;#231;&amp;#227;o for/each do VB tamb&amp;#233;m pode ser utilizada em VBScript e costuma resolver grandes problemas.&lt;br&gt;&lt;br&gt;O objetivo desta instru&amp;#231;&amp;#227;o &amp;#233; manipular uma cole&amp;#231;&amp;#227;o de informa&amp;#231;&amp;#245;es. Assim sendo, ao inv&amp;#233;s de manipular item a item pode-se montar um la&amp;#231;o para manipular todos.&lt;br&gt;&lt;br&gt;A s&amp;#237;ntaxe &amp;#233; :&lt;br&gt;&lt;br&gt;for each &amp;lt;variavel&amp;gt; in &amp;lt;colecao&amp;gt;&lt;br&gt;&amp;lt;codigo&amp;gt;&lt;br&gt;next&lt;br&gt;&lt;br&gt;O c&amp;#243;digo que existir entre o for/each e o next ser&amp;#225; executado para cada item existente na colecao. A cada execu&amp;#231;&amp;#227;o a vari&amp;#225;vel utilizada no FOR recebe um item da cole&amp;#231;&amp;#227;o. Assim sendo, dentro do c&amp;#243;digo do FOR utiliza-se essa vari&amp;#225;vel para realizar opera&amp;#231;&amp;#245;es diversas.&lt;br&gt;&lt;br&gt;Veja algumas cole&amp;#231;&amp;#245;es existentes :&lt;br&gt;&lt;br&gt;Request.Form  - Vari&amp;#225;veis transmitidas via POST&lt;br&gt;Request.Querystring - Vari&amp;#225;veis transmitidas via GET&lt;br&gt;Applications.Contents - Vari&amp;#225;veis de aplica&amp;#231;&amp;#227;o&lt;br&gt;Session.Contents - Vari&amp;#225;veis de sess&amp;#227;o&lt;br&gt;Request.Servervariables - Vari&amp;#225;veis do servidor&lt;br&gt;RecordSet.Fields - Campos de um Recordset&lt;br&gt;Command.Parameters - Parametros de um objeto COMMAND&lt;br&gt;&lt;br&gt;Existem ainda diversas outras.&lt;br&gt;&lt;br&gt;Veja um pequeno exemplo :&lt;br&gt;&lt;br&gt;for each x in rs.fields&lt;br&gt;    response.write(&amp;quot;&amp;lt;td&amp;gt;&amp;quot;)&lt;br&gt;    response.write(x.name)&lt;br&gt;    response.write(&amp;quot;&amp;lt;/td&amp;gt;&amp;quot;)&lt;br&gt;next&lt;br&gt;&lt;br&gt;Estas poucas linhas de c&amp;#243;digo est&amp;#227;o montando o t&amp;#237;tulo de uma tabela com o nome de todos os campos da base de dados, independentemente de quantos sejam.&lt;br&gt;&lt;br&gt;</description></item><item><link>http://www.bufaloinfo.com.br/dicas.asp?cod=373</link><title>ASP : Ler chaves de registry</title><description>&lt;br&gt;Mais uma vez utilizando o Windows Script Host podemos realizar leituras de chaves de registry atrav&amp;#233;s do ASP. Isso nos tr&amp;#225;s um novo e seguro local para guardarmos strings de conex&amp;#227;o com o banco. Veja um exemplo :&lt;br&gt;&lt;br&gt;&amp;lt;% &lt;br&gt;Set objShell = CreateObject(&amp;quot;WScript.Shell&amp;quot;)&lt;br&gt; Response.Write “Registry Value: “ &amp;amp; objShell.RegRead(&amp;quot;RegistryPath&amp;quot;) %&amp;gt; &lt;br&gt;&lt;br&gt;O caminho do registry deve ser montado utilizando a \ como delimitadora e deve come&amp;#231;ar em um dos roots v&amp;#225;lidos, que s&amp;#227;o codificados com 4 letras, da seguinte forma :&lt;br&gt;&lt;br&gt;HKCU - HKEY_CURRENT_USER &lt;br&gt;HKLM - HKEY_LOCAL_MACHINE &lt;br&gt;HKCR - HKEY_CLASSES_ROOT &lt;br&gt;&lt;br&gt;</description></item><item><link>http://www.bufaloinfo.com.br/dicas.asp?cod=369</link><title>ASP : Gravando erros no log do sistema operacional</title><description>&lt;br&gt;O WSH (Windows Script HOST) fornece um objeto SHELL que pode ser utilizado atrav&amp;#233;s do ASP e um dos recursos que ele possui &amp;#233; gravar log de erros no evet viewer do sistema operacional.&lt;br&gt;&lt;br&gt;Veja um exemplo :&lt;br&gt;&lt;br&gt;&amp;lt;% Set objShell = CreateObject(&amp;quot;WScript.Shell&amp;quot;) &lt;br&gt;ObjShell.LogEvent 1, &amp;quot;Ocorreram erros no arquivo Login.asp.&amp;quot; &lt;br&gt;Set objShell = Nothing %&amp;gt; &lt;br&gt;&lt;br&gt;O primeiro par&amp;#226;metro &amp;#233; o tipo de log sendo gravado :&lt;br&gt;&lt;br&gt;0 – Successo&lt;br&gt;1 – Erro&lt;br&gt;2 – Warning&lt;br&gt;4 – Informa&amp;#231;&amp;#227;o&lt;br&gt;&lt;br&gt;O segundo par&amp;#226;metro &amp;#233; a mensagem sendo gravada.&lt;br&gt;&lt;br&gt;</description></item><item><link>http://www.bufaloinfo.com.br/dicas.asp?cod=368</link><title>ASP : Download de arquivos</title><description>&lt;br&gt;Em alguns artigos que temos aqui no site mostramos como utilizar o response.binarywrite para imprimir uma imagem que esteja contida no banco de dados.&lt;br&gt;&lt;br&gt;Essa t&amp;#233;cnica do binarywrite &amp;#233; utilizada tamb&amp;#233;m para a realiza&amp;#231;&amp;#227;o de downloads. &amp;#201; claro que se voc&amp;#234; simplesmente fizer um link para o arquivo o download ocorre, mas para voc&amp;#234; ter maior controle sobre o processo de donwload, como por exemplo, registrar o volume de downloads e controlar quem pode ou n&amp;#227;o fazer o download, voc&amp;#234; pode provocar o download via c&amp;#243;digo asp, utilizando o binarywrite exatamente como no exemplo da recupera&amp;#231;&amp;#227;o de imagens.&lt;br&gt;&lt;br&gt;Mas fica um problema : O nome do arquivo. O browser ir&amp;#225; entender como nome do arquivo a p&amp;#225;gina que est&amp;#225; sendo chamada, com extens&amp;#227;o e tudo (.asp). Para mudar isso &amp;#233; necess&amp;#225;rio adicionar um cabe&amp;#231;alho na resposta enviada ao browser, veja um pequeno trecho de exemplo :&lt;br&gt;&lt;br&gt;&amp;lt;% &lt;br&gt;fn = 'MyDoc.doc' &lt;br&gt;Response.AddHeader 'Content-Disposition','attachment;filename=' &amp;amp; fn &lt;br&gt;... &lt;br&gt;response.binarywrite(binarydata) &lt;br&gt;%&amp;gt;&lt;br&gt;&lt;br&gt;Desta forma podemos especificar o nome do arquivo que ser&amp;#225; downloadeado.&lt;br&gt;&lt;br&gt;</description></item><item><link>http://www.bufaloinfo.com.br/dicas.asp?cod=353</link><title>ASP : Facilitando a edição no notepad</title><description>&lt;br&gt;Mesmo que n&amp;#227;o gostemos, &amp;#233; inevit&amp;#225;vel que uma hora ou outra tenhamos que resolver um problema usando o notepad.&lt;br&gt;&lt;br&gt;Uma das principais reclama&amp;#231;&amp;#245;es a respeito dele &amp;#233; n&amp;#227;o ter numera&amp;#231;&amp;#227;o de linha, o que dificulta a localiza&amp;#231;&amp;#227;o de erros.&lt;br&gt;&lt;br&gt;Mas existe uma solu&amp;#231;&amp;#227;o simples para esse problema : O notepad possui uma combina&amp;#231;&amp;#227;o de teclas, ctrl+g, que abre uma caixa nos perguntando um n&amp;#250;mero de linha. Ao indicarmos o n&amp;#250;mero o notepad posiciona o cursor nesta linha.&lt;br&gt;&lt;br&gt;Solu&amp;#231;&amp;#227;o r&amp;#225;pida para identificar onde encontra-se um erro dentro de uma p&amp;#225;gina ASP sem ter que ficar contando as linhas.&lt;br&gt;&lt;br&gt;</description></item><item><link>http://www.bufaloinfo.com.br/dicas.asp?cod=336</link><title>ASP : Upload sem componentes</title><description/></item><item><link>http://www.bufaloinfo.com.br/dicas.asp?cod=332</link><title>ASP : Um pouco mais sobre o pooling de conexões</title><description>&lt;br&gt;&amp;#201; muito f&amp;#225;cil encontrar no site da Microsoft informa&amp;#231;&amp;#245;es sobre pooling de conex&amp;#245;es com ODBC. Chega a dar a impress&amp;#227;o para alguns que s&amp;#243; existe pooling de conex&amp;#245;es com ODBC.&lt;br&gt;&lt;br&gt;Mas existe sim pooling de conex&amp;#245;es com OLEDB e em geral ele &amp;#233; habilitado por default. A quest&amp;#227;o &amp;#233; onde encontrar informa&amp;#231;&amp;#245;es t&amp;#233;cnicas mais precisas sobre ele. Veja :&lt;br&gt;&lt;br&gt;O artigo contido em http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnproasp/html/enablingconnectionpooling.asp deixa claro que o ASP por default n&amp;#227;o utiliza connection pooling quando est&amp;#225; fazendo acessos diretos a banco, sendo necess&amp;#225;rio a altera&amp;#231;&amp;#227;o das chaves de registry indicadas pelo artigo para que o connection pooling possa ser habilitado.&lt;br&gt;&lt;br&gt;J&amp;#225; neste outro artigo http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q191572&amp;amp; observa-se que as m&amp;#250;ltiplas formas de se utilizar os objetos do ADO podem, sim, afetar o pooling de conex&amp;#245;es. Por exemplo, conex&amp;#245;es criadas implicitamente n&amp;#227;o entram no pooling.&lt;br&gt;&lt;br&gt;O artigo http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q320700&amp;amp; fala sobre um bug de 100% de uso de CPU que o pooling pode causar eventualmente. &amp;#201; bom estar atento...&lt;br&gt;&lt;br&gt;Por sua vez o artigo em http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q237977&amp;amp; explica as configura&amp;#231;&amp;#245;es de timeout do pooling. Achei este especialmente importante pois a conex&amp;#227;o (login/logout) &amp;#233; um processo pesado e atrav&amp;#233;s da configura&amp;#231;&amp;#227;o dessas chaves de registry foi poss&amp;#237;vel reduzir o volume de logins e logouts que estavam ocorrendo em um determinado ambiente, tudo devido a ajustes sobre quanto tempo uma conex&amp;#227;o seria mantida antes de ser descartada.&lt;br&gt;&lt;br&gt;O artigo em http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q245267&amp;amp; fala sobre o controle do pooling (em geral desativa-lo, o que n&amp;#227;o &amp;#233; uma boa id&amp;#233;ia) via string de conex&amp;#227;o).&lt;br&gt;&lt;br&gt;Por sua vez o artigo em http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnmdac/html/pooling2.asp &amp;#233; bem detalhista nas explica&amp;#231;&amp;#245;es sobre o pooling tanto com ODBC como com OLEDB.&lt;br&gt;&lt;br&gt;Espero que estes artigos ajudem a controlar um pouco melhor o pooling de conex&amp;#245;es via ADO, configurando o registry corretamente e deixando que ele fa&amp;#231;a o restante.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</description></item><item><link>http://www.bufaloinfo.com.br/dicas.asp?cod=318</link><title>ASP : Utilizando ContentBase e ContentLocation para simplificar e-mails em HTML</title><description>&lt;br&gt;Ao enviarmos e-mails em HTML &amp;#233; comum montarmos uma tag de imagem da seguinte forma :&lt;br&gt;&lt;br&gt;&amp;lt;IMG SRC=HTTP://www.microsoft.com/graphs/Feb1998/21Jul98/today.gif&amp;gt; &lt;br&gt;&lt;br&gt;Por&amp;#233;m a utiliza&amp;#231;&amp;#227;o do endere&amp;#231;o completo desta forma muitas vezes se torna inc&amp;#244;moda, especialmente quando o endere&amp;#231;o est&amp;#225; sujeito a mudan&amp;#231;as, o que poderia gerar uma grande altera&amp;#231;&amp;#227;o em todo o c&amp;#243;digo HTML.&lt;br&gt;&lt;br&gt;Uma forma de contornar isso para o envio de e-mails em HTML &amp;#233; utilizando as propriedades contentBase e contentLocation. &lt;br&gt;&lt;br&gt;No exemplo acima contentLocation pode ser definida da seguinte forma :&lt;br&gt;&lt;br&gt;objNewMail.ContentLocation = &amp;quot;HTTP://www.microsoft.com/graphs/Jul1998/21Jul98&amp;quot;&lt;br&gt;&lt;br&gt;O que permite que a imagem seja montada apenas com o nome do arquivo :&lt;br&gt;&lt;br&gt;&amp;lt;IMG SRC=today.gif&amp;gt; &lt;br&gt;&lt;br&gt;ContentLocation pode ainda receber um caminho relativo :&lt;br&gt;&lt;br&gt;objNewMail.ContentLocation = &amp;quot;Jul1998/21Jul98/&amp;quot; &lt;br&gt;&lt;br&gt;Neste caso o caminho absoluto &amp;#233; definido por ContentBase :&lt;br&gt;&lt;br&gt;objNewMail.ContentBase = &amp;quot;HTTP://www.microsoft.com/graphs/&amp;quot; &lt;br&gt;&lt;br&gt;Esses recursos facilitam para que voc&amp;#234; possa enviar por e-mail o mesmo c&amp;#243;digo em HTML que tem em uma p&amp;#225;gina do seu site. Normalmente as p&amp;#225;ginas do site s&amp;#227;o montadas com endere&amp;#231;os relativos, ent&amp;#227;o ao enviar seu c&amp;#243;digo por e-mail voc&amp;#234; pode configurar o contentlocation para que os endere&amp;#231;os relativos se tornem absolutos em rela&amp;#231;&amp;#227;o a seu site e o e-mail possa ser lido.&lt;br&gt;&lt;br&gt;</description></item><item><link>http://www.bufaloinfo.com.br/dicas.asp?cod=317</link><title>ASP : Attachando imagens em e-mails em HTML</title><description>&lt;br&gt;Uma forma t&amp;#237;pica de enviar e-mails em HTML &amp;#233; montar o c&amp;#243;digo HTML com imagens apontando para URLs no seu pr&amp;#243;prio site.&lt;br&gt;&lt;br&gt;Por&amp;#233;m isso faz com que o e-mail s&amp;#243; possa ser lido on-line, pois as imagens ter&amp;#227;o que ser recuperadas do seu site quando o e-mail for aberto. Para resolver este problema temos o m&amp;#233;todo attachURL do objeto newmail.&lt;br&gt;&lt;br&gt;Esse m&amp;#233;todo funciona de forma semelhante ao m&amp;#233;todo attachFile, mas permite que o arquivo attachado seja utilizado dentro do c&amp;#243;digo HTML, como se houvesse uma URL para ele. &lt;br&gt;&lt;br&gt;Veja abaixo um exemplo obtido no site da Microsoft. Observe como a imagem &amp;#233; referenciada a partir da tag IMG :&lt;br&gt;&lt;br&gt;Dim myMail &lt;br&gt;Set myMail = CreateObject(&amp;quot;CDONTS.NewMail&amp;quot;) &lt;br&gt; &lt;br&gt;HTML = &amp;quot;&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;&amp;quot;-//IETF//DTD HTML//EN&amp;quot;&amp;quot;&amp;gt;&amp;quot; &amp;amp; NL &lt;br&gt;HTML = HTML &amp;amp; &amp;quot;&amp;lt;html&amp;gt;&amp;quot; &lt;br&gt;HTML = HTML &amp;amp; &amp;quot;&amp;lt;head&amp;gt;&amp;quot; &lt;br&gt;HTML = HTML &amp;amp; &amp;quot;&amp;lt;meta http-equiv=&amp;quot;&amp;quot;Content-Type&amp;quot;&amp;quot;&amp;quot; &lt;br&gt;HTML = HTML &amp;amp; &amp;quot;content=&amp;quot;&amp;quot;text/html; charset=iso-8859-1&amp;quot;&amp;quot;&amp;gt;&amp;quot; &lt;br&gt;HTML = HTML &amp;amp; &amp;quot;&amp;lt;meta name=&amp;quot;&amp;quot;GENERATOR&amp;quot;&amp;quot; content=&amp;quot;&amp;quot;Microsoft FrontPage 2.0&amp;quot;&amp;quot;&amp;gt;&amp;quot; &lt;br&gt;HTML = HTML &amp;amp; &amp;quot;&amp;lt;title&amp;gt;Exchange CDO Example&amp;lt;/title&amp;gt;&amp;quot; &lt;br&gt;HTML = HTML &amp;amp; &amp;quot;&amp;lt;/head&amp;gt;&amp;quot; &lt;br&gt;HTML = HTML &amp;amp; &amp;quot;&amp;lt;body bgcolor=&amp;quot;&amp;quot;#FFFFFF&amp;quot;&amp;quot;&amp;gt;&amp;quot; &lt;br&gt;HTML = HTML &amp;amp; &amp;quot;&amp;lt;p&amp;gt;&amp;lt;font size=&amp;quot;&amp;quot;6&amp;quot;&amp;quot; face=&amp;quot;&amp;quot;Arial Black&amp;quot;&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;Exchange CDO &amp;quot; &lt;br&gt;HTML = HTML &amp;amp; &amp;quot;Sample&amp;lt;img src=CDO.gif&amp;gt;&amp;quot; &lt;br&gt;HTML = HTML &amp;amp; &amp;quot;&amp;lt;/strong&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;quot; &lt;br&gt;HTML = HTML &amp;amp; &amp;quot;&amp;lt;p&amp;gt;CDO for NTS allows an easy way to send mail.&amp;quot; &lt;br&gt;HTML = HTML &amp;amp; &amp;quot;This example shows how the content can be an HTML page&amp;quot; &lt;br&gt;HTML = HTML &amp;amp; &amp;quot;which allows you to send rich text and inline graphics.&amp;lt;/p&amp;gt;&amp;quot; &lt;br&gt;HTML = HTML &amp;amp; &amp;quot;&amp;lt;/body&amp;gt;&amp;quot; &lt;br&gt;HTML = HTML &amp;amp; &amp;quot;&amp;lt;/html&amp;gt;&amp;quot; &lt;br&gt; &lt;br&gt;myMail.AttachURL &amp;quot;D:\wwwroot\CDO.gif&amp;quot;, &amp;quot;CDO.gif&amp;quot; &lt;br&gt;myMail.From = &amp;quot;Example@microsoft.com&amp;quot; &lt;br&gt;myMail.To = &amp;quot;Someone@microsoft.com&amp;quot; &lt;br&gt;myMail.Subject = &amp;quot;Sample Message&amp;quot; &lt;br&gt;myMail.BodyFormat = 0 &lt;br&gt;myMail.MailFormat = 0 &lt;br&gt;myMail.Body = HTML &lt;br&gt;myMail.Send &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</description></item></channel></rss>