<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Debugando.com &#187; ASP</title>
	<atom:link href="http://www.debugando.com/categoria/programacao/asp/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.debugando.com</link>
	<description>Noticias, dicas e tutorias do mundo da Tecnologia.</description>
	<lastBuildDate>Thu, 01 Dec 2011 23:44:46 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>jQuery e ASP para cadastrar dados</title>
		<link>http://www.debugando.com/jquery-e-asp-para-cadastrar-dados/</link>
		<comments>http://www.debugando.com/jquery-e-asp-para-cadastrar-dados/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 22:04:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[JavaScript/Ajax]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=554</guid>
		<description><![CDATA[


Usar o jQuery é uma forma mais fácil de criar funcionalidades extras em seus sistemas, de animações básicas a grandes galerias de fotos, mas vamos para o nosso foco que é inserir no banco.
Criei um arquivo chamado funcao_jquery.js para colocar a função de efeito do jQuery. Para nossa aplicação usei o efeito fadeIn().
O Fade in [...]]]></description>
			<content:encoded><![CDATA[<p>Usar o jQuery é uma forma mais fácil de criar funcionalidades extras em seus sistemas, de animações básicas a grandes galerias de fotos, mas vamos para o nosso foco que é inserir no banco.</p>
<p>Criei um arquivo chamado funcao_jquery.js para colocar a função de efeito do jQuery. Para nossa aplicação usei o efeito fadeIn().</p>
<p>O <strong>Fade in</strong> (a função fadeIn()) serve para dar opacidade, e pode ser ajustado para ter animação. Existem três strings de velocidade predefinidas (&#8220;slow&#8221;, &#8220;def&#8221;, e &#8220;fast&#8221;), usei a slow em nossa aplicação;</p>
<p><em><kbd>fadeIn("slow");</kbd></em></p>
<p>Criei dois campos de exemplo (Nome e E-Mail) e um botão &#8220;<strong>submit</strong>&#8220;. Podem ser criados quantos necessários:</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;</span><span class="tag">form</span><span class="pln"> </span><span class="atn">action</span><span class="pun">=</span><span class="atv">"Cadastro_JQuery.asp?Cadastrar=Ok"</span><span class="pln"> </span><span class="atn">method</span><span class="pun">=</span><span class="atv">"post"</span><span class="pun">&gt;</span><span class="pln">
    Nome: </span><span class="pun">&lt;</span><span class="tag">input</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"Nome"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"text"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"Nome"</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="tag">br</span><span class="pun">&gt;</span><span class="pln">
    E-Mail: </span><span class="pun">&lt;</span><span class="tag">input</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"EMail"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"text"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"EMail"</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="tag">input</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"btAdd"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"submit"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"Adicionar"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"btn_enviar"</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="tag">form</span><span class="pun">&gt;</span></code></em></pre>
</div>
<p>No <strong>action </strong>do formulário coloquei uma <strong>Query &#8220;Cadastrar&#8221;</strong> com valor ok para ativar a ação do ASP (usando JScript) que segue abaixo:</p>
<div class="codigo">
<pre><code><span class="pln">
</span><em><span class="pun">&lt;%</span><span class="pln">
</span><span class="com">// Função para cadastrar no banco</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="typ">Request</span><span class="pun">.</span><span class="typ">QueryString</span><span class="pun">(</span><span class="str">"Cadastrar"</span><span class="pun">)</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="str">"Ok"</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">

    </span><span class="kwd">var</span><span class="pln"> nome </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Request</span><span class="pun">.</span><span class="typ">Form</span><span class="pun">(</span><span class="str">"Nome"</span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">var</span><span class="pln"> email </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Request</span><span class="pun">.</span><span class="typ">Form</span><span class="pun">(</span><span class="str">"EMail"</span><span class="pun">);</span><span class="pln">

    </span><span class="typ">Conexao</span><span class="pun">.</span><span class="typ">Execute</span><span class="pun">(</span><span class="str">"Insert Into Newsletter (Nome, EMail)
                     Values ('"</span><span class="pun">+</span><span class="pln">nome</span><span class="pun">+</span><span class="str">"', '"</span><span class="pun">+</span><span class="pln">email</span><span class="pun">+</span><span class="str">"')"</span><span class="pun">);</span><span class="pln">
    </span><span class="typ">Response</span><span class="pun">.</span><span class="typ">Write</span><span class="pun">(</span><span class="str">""</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
%&gt;</span></em></code></pre>
</div>
<p>Usando listas (UL&gt;LI) eu pego as informações do banco e organizo tudo para ser mostrado ao usuário:</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;%</span><span class="pln">
</span><span class="kwd">var</span><span class="pln"> rs </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Conexao</span><span class="pun">.</span><span class="typ">Execute</span><span class="pun">(</span><span class="str">"Select * From Teste"</span><span class="pun">);</span><span class="pln"> </span><span class="com">// SQL para listar os dados</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">rs </span><span class="pun">==</span><span class="pln"> </span><span class="kwd">null</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="typ">Response</span><span class="pun">.</span><span class="typ">Write</span><span class="pun">(</span><span class="str">"NADA ENCONTRADO"</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">while</span><span class="pln"> </span><span class="pun">(!</span><span class="pln">rs</span><span class="pun">.</span><span class="pln">EOF</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        </span><span class="typ">Response</span><span class="pun">.</span><span class="typ">Write</span><span class="pun">(</span><span class="str">"&lt;li&gt;"</span><span class="pun">+</span><span class="pln">rs</span><span class="pun">(</span><span class="str">"Nome"</span><span class="pun">)+</span><span class="str">" : "</span><span class="pun">+</span><span class="pln">rs</span><span class="pun">(</span><span class="str">"EMail"</span><span class="pun">)+</span><span class="str">"&lt;/li&gt;"</span><span class="pun">)</span><span class="pln"> </span><span class="com">
        // Lista todos os cadastrados do banco</span><span class="pln">
    rs</span><span class="pun">.</span><span class="typ">MoveNext</span><span class="pun">();</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
%&gt;</span></code></em></pre>
</div>
<p>No ASP, com JScript para verificar se existe algo no banco, eu pego o <strong>RecordSet</strong> e comparo ele com <strong>&#8220;null&#8221;</strong> e o <strong>&#8220;else&#8221;</strong> caso encontre;</p>
<p><em><kbd>if (rs == null) {</kbd></em></p>
<p><em><em>&#8230; continua o resto do código&#8230;</em></em></p>
<p>A mesma idéia temos para o &#8220;loop&#8221;, só que uso o <em>End Of File</em> (.EOF)</p>
<p><em><kbd>while (!rs.EOF) {</kbd></em></p>
<p><em> &#8230; continua o resto do código &#8230; </em></p>
<p>Em seqüência imprimo na tela o que foi encontrado.</p>
<p>O jQuery vai agir da seguinte maneira:</p>
<p><em>No botão de tipo <strong>&#8220;submit&#8221;</strong> coloquei uma <strong>ID </strong>de nome <strong>&#8220;btn_enviar&#8221;</strong>, quando o botão for clicado será enviado os parâmetros via POST para o jQuery.</em></p>
<div class="codigo">
<pre><em><code><span class="pln">$</span><span class="pun">(</span><span class="str">'#btn_enviar'</span><span class="pun">).</span><span class="pln">click</span><span class="pun">(</span><span class="kwd">function</span><span class="pun">(){</span><span class="pln">

    </span><span class="kwd">var</span><span class="pln"> nome_post </span><span class="pun">=</span><span class="pln"> $</span><span class="pun">(</span><span class="str">'#Nome'</span><span class="pun">).</span><span class="pln">val</span><span class="pun">();</span><span class="pln">
    </span><span class="kwd">var</span><span class="pln"> email_post </span><span class="pun">=</span><span class="pln"> $</span><span class="pun">(</span><span class="str">'#EMail'</span><span class="pun">).</span><span class="pln">val</span><span class="pun">();</span><span class="pln">

$</span><span class="pun">.</span><span class="pln">post</span><span class="pun">(</span><span class="str">"Cadastro_JQuery.asp?Cadastrar=Ok"</span><span class="pun">,{</span><span class="pln">nome</span><span class="pun">:</span><span class="pln"> nome_post</span><span class="pun">,</span><span class="pln"> email</span><span class="pun">:</span><span class="pln"> email_post</span><span class="pun">}</span></code></em></pre>
</div>
<p>Logo em seguida jogo dentro da lista (UL&gt;LI).</p>
<div class="codigo">
<pre><em><code><span class="pln">$</span><span class="pun">(</span><span class="str">"ul li:last"</span><span class="pun">).</span><span class="pln">after</span><span class="pun">(</span><span class="str">"&lt;li&gt;"</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> nome_post </span><span class="pun">+</span><span class="pln"> </span><span class="str">" : "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> email_post </span><span class="pun">+</span><span class="pln"> </span><span class="str">"&lt;/li&gt;"</span><span class="pun">).</span><span class="kwd">next</span><span class="pun">().</span><span class="pln">fadeIn</span><span class="pun">(</span><span class="str">"slow"</span><span class="pun">);</span><span class="pln">
</span><span class="pun">});</span></code></em></pre>
</div>
<p>E finalizo limpando os campos. Veja na imagem abaixo:</p>
<p><img src="http://conteudo.imasters.uol.com.br/11377/2008_11_19_usando-jquery-cadastro_02.gif" alt="" /></p>
<p>Segue o link da página com o código completo e o arquivo jQuery!</p>
<p><em><a class="ext" href="http://conteudo.imasters.uol.com.br/11377/jquery_asp_jscript.asp">Código completo</a></em></p>
<p><em><a class="ext" href="http://conteudo.imasters.uol.com.br/11377/jquery.js">Arquivo jQuery</a></em></p>
<p><em>Fonte: <a onclick="javascript:urchinTracker ('/outbound/article/www.pplware.com');" href="http://imasters.uol.com.br/artigo/11377/asp/jquery_e_asp_para_cadastrar_dados/" target="_blank">Imasters</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/jquery-e-asp-para-cadastrar-dados/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programação orientada a eventos e lambda function em ASP/VBScript</title>
		<link>http://www.debugando.com/programacao-orientada-a-eventos-e-lambda-function-em-aspvbscript/</link>
		<comments>http://www.debugando.com/programacao-orientada-a-eventos-e-lambda-function-em-aspvbscript/#comments</comments>
		<pubDate>Thu, 12 Feb 2009 23:16:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[VBScript]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=506</guid>
		<description><![CDATA[Programação orientada a eventos
A programação orientada a eventos, também conhecida como programação baseada em eventos, é um paradigma de programação, isto é, um estilo fundamental de se programar, no qual a execução do programa é afetada por eventos(geralmente detectados por sensores).
Esta forma de se programar é, na minha humilde opinião, a base de todos os [...]]]></description>
			<content:encoded><![CDATA[<h4>Programação orientada a eventos</h4>
<p>A programação orientada a eventos, também conhecida como programação baseada em eventos, é um paradigma de programação, isto é, um estilo fundamental de se programar, no qual a execução do programa é afetada por eventos(geralmente detectados por sensores).</p>
<p>Esta forma de se programar é, na minha humilde opinião, a base de todos os sistemas de <em>UI(User Interface)</em> sofisticados. Por exemplo, aquela barrinha do MAC OSX que todos adoram e suas similares:</p>
<p>RocketDock</p>
<p>Ela nunca abre uma janela solicitando &#8220;Vá com o mouse para cima de um ícone e clique&#8221;, ela simplesmente possui um sensor que avisa &#8220;Olha, programa, detectei que o mouse entrou na posição (x,y) da barra&#8221;, ao receber esta mensagem o programa faz o <em>zoom </em>e mostra o <em>label </em>dos ícones na posição. Este parece um exemplo bobo, mas acho que ilustra bem a diferença entre a programação em lote e a programação orientada a eventos.</p>
<p>É importante para um programador web conhecer a programação orientada a eventos, pois uma das características mais marcantes da Web 2.0 é a grande quantidade de widgets que fazem parte das chamadas <em>RIA(Rich Application Interface)</em> que são aqueles programas com telas que você pensa &#8220;Que legal isso aqui!&#8221;.</p>
<p>Uma outra coisa importante a ser notada é que os paradigmas de programação não são mutuamente exclusivos, isto é, uma linguagem, e por conseqüência um programa, pode suportar múltiplos paradigmas. Um programa pode ser puramente em lote, puramente orientado a eventos, ou conter trechos de ambos os paradigmas. Pode-se, portanto, criar programas meio orientado a objetos/procedurais, meio orientado a eventos/lote. Um arquiteto de software experiente saberá qual o melhor paradigma a ser seguido para construir um determinado feature do programa.</p>
<p>Apesar desta forma de se programar poder ser executada em qualquer linguagem de programação, ela é facilitada por linguagens com noções funcionais como JScript, Lisp (a segunda linguagem mais antiga da nossa história), Haskell entre outras. Nos exemplos a seguir mostrarei como programar:</p>
<ol>
<li>Utilizando-se apenas VBScript.</li>
<li>Fazendo um bridge simples com JScript para utilizar a noção de lambda que ela possui (um bom exercícío aqui é utilizar a noção de lambda do <a class="ext" href="http://www.python.org/">Python </a>para alcançar o mesmo objetivo).</li>
</ol>
<p>Nota: O segundo exemplo é um dos motivos pelos quais julgo o ASP extremamente versátil, pois ele mostra uma aplicação do conceito exposto no primeiro artigo.</p>
<h4>Função lambda</h4>
<p>Para aqueles que ainda não foram apresentados, a função lambda é um feature interessante que nasceu com o <a class="ext" href="http://www-formal.stanford.edu/jmc/history/lisp/lisp.html">Lisp </a>e permite você definir e utilizar funções em tempo de execução. Esta é uma das características que facilitaram o desenvolvimento de <em>AI(Artificial Intelligence)</em> (pense em um algorítimo recursivo que gera, interpreta e executa funções para gerar, interpretar e executar funções e vai aprendendo alguma coisa importante durante o processo).</p>
<h4>Mãos à massa</h4>
<p>Utilizando-se a classe CustomEvent(versão sem comentários) que escrevi para o <em>AXE(ASP Xtreme Evolution)</em>, mas que funciona <em>out-of-the-box </em>e tem licensa MIT:</p>
<pre><em><code>&lt;%

class CustomEvent

    public classType
    public classVersion

    public Owner
    private Handlers
    public Arguments

    private sub Class_initialize()
        classType    = typename(Me)
        classVersion = "1.0.0"

        set Handlers  = Server.createObject("Scripting.Dictionary")
        set Arguments = Server.createObject("Scripting.Dictionary")
    end sub

    private sub Class_terminate()
        Handlers.removeAll()
        Arguments.removeAll()
        set Handlers  = nothing
        set Arguments = nothing
    end sub

    public sub addHandler(fn)
        select case typename(fn)
            case "JScriptTypeInfo"
                set Handlers.item(fn.toString()) = fn
            case else
                set Handlers.item(fn) = getRef(fn)
        end select
    end sub

    public sub removeHandler(fn)
        set Handlers.item(fn) = nothing
        Handlers.remove(fn)
    end sub

    public sub fire()
        dim fn : for each fn in Handlers
            Handlers.item(fn)(Me)
        next
    end sub

    public function revealArguments()
        revealArguments = ""
        dim arg : for each arg in Arguments
            revealArguments = revealArguments &amp; ", " &amp; arg
        next
        revealArguments = mid(revealArguments, 3)
    end function

end class

%&gt;
&lt;script language="javascript" runat="server"&gt;
function lambda(f) {
    if(/^function\s*\([ a-z0-9.$_,]*\)\s*{[\S\s]*}$/gim.test(f)) {
        eval("f = " + f.replace(/\r/g, '').replace(/\n/g, ''));
        return f;
    } else {
        return function() {};
    }
}
&lt;/script&gt;

</code></em>Você pode criar eventos nas suas classes como no exemplo de classe abaixo,
que será utilizada nos exemplos 1 e 2:

<em><code>&lt;%

class ClassWithEvents
    public classType
    public classVersion

    public onComplimentBefore' [1]
    public onComplimentAfter

    private sub Class_initialize()
        classType    = typename(Me)
        classVersion = "1.0.0"

        set onComplimentBefore = new CustomEvent : set onComplimentBefore.Owner = Me' [2]
        set onComplimentAfter = new CustomEvent : set onComplimentAfter.Owner = Me
    end sub

    private sub Class_terminate()
        set onComplimentBefore = nothing' [3]
        set onComplimentAfter = nothing
    end sub

    public sub compliment(firstname, lastname, nickname)
        onComplimentBefore.Arguments.item("firstname") = firstname' [4]
        onComplimentBefore.Arguments.item("lastname")  = lastname
        onComplimentBefore.Arguments.item("nickname")  = nickname

        call onComplimentBefore.fire()' [5]
        Response.write("Method compliment called." &amp; vbNewline)
        call onComplimentAfter.fire()
    end sub

end class

%&gt;</code></em></pre>
<h4>Exemplo 1</h4>
<p>Utilizando a classe que possui eventos para criar objetos com eventos em VBScript:</p>
<div class="codigo">
<pre><em><code>&lt;code&gt;&lt;pre&gt;&lt;%

sub ev_onComplimentBefore(ev)' [6]
    Response.write("Event onComplimentBefore has been fired.
I was really expecting this method to say:
'Hello World " &amp; ev.Arguments.item("firstname") &amp; " " &amp;
ev.Arguments.item("lastname") &amp; " (" &amp; ev.Arguments.item("nickname") &amp; ")'" &amp; vbNewline)
end sub

sub ev_onComplimentAfter(ev)
    Response.write("Event onComplimentAfter has been fired" &amp; vbNewline)
end sub

dim CwE : set CwE = new ClassWithEvents
call CwE.onComplimentBefore.addHandler("ev_onComplimentBefore")' [7]
call CwE.onComplimentAfter.addHandler("ev_onComplimentAfter")
call CwE.compliment("Fabio", "Nagao", "nagaozen")
set CwE = nothing

%&gt;&lt;/pre&gt;&lt;/code&gt;</code></em></pre>
</div>
<p>O código acima deve escrever na tela do seu navegador:</p>
<p>Event onComplimentBefore has been fired. I was really expecting this method to say: &#8216;Hello World Fabio Nagao (nagaozen)&#8217;</p>
<p>Method compliment called.</p>
<p>Event onComplimentAfter has been fired</p>
<p>Seguem abaixo as notas de rodapé [#] que deixei no código fonte:</p>
<ol>
<li>Definindo os eventos.</li>
<li>Inicializando os eventos como tipo CustomEvent e atribuindo um ponteiro à instância da classe através da propriedade Owner.</li>
<li>Liberando os eventos criados na etapa 2 da memória.</li>
<li>Definindo os argumentos do evento.</li>
<li>Avisando o sensor que ocorreu um evento.</li>
<li>Configurando ações para um determinado evento.</li>
<li>Configurando o sensor para observar um evento.</li>
</ol>
<h4>Exemplo 2</h4>
<p>Ok, o exemplo 1 foi legal, mas a maioria das pessoas acostumadas com programação orientada a eventos vai reclamar daquelas subrotinas da nota [6]. O que é natural, pois aquilo é pouquíssimo intuitivo. Afinal de contas, se os eventos estão relacionados ao objeto e somente a ele, porque não os definir dentro do próprio objeto? Bom, isso é verdade, o problema é que o VBScript não possui nenhum método para fazer isso dentro do objeto. Aqui, novamente IMHO(In My Humble Opinion), as alternativas naturais seriam:</p>
<p>* ou extender a classe ClassWithEvents para outra classe que possuísse as definições das ações do evento e depois criar uma instância dessa nova classe, o que é impossível pela noção de objetos do VBScript;</p>
<p>* ou utilizar a noção de lambda function, que também não existe no VBScript.</p>
<p>Então, o que fazer? Se render às limitações expressivas da linguagem? Jamais! Afinal de contas, não adianta mudar de linguagem, pois qualquer linguagem sempre tem limitações, não é verdade?</p>
<p>A solução, dentro do ASP, é mais fácil do que se imagina. Você fala JScript? Python? Haskell? Nossa, o ASP também! Essas linguagens possuem uma capacidade expressiva funcional? Siiim! Pronto, resolvido o problema!</p>
<p>Explicando melhor: Para aqueles que ainda não perceberam, juntamente com a definição da classe CustomEvent, criei também uma função global em javascript (que é a mesma coisa que JScript) chamada lambda. Essa função recebe a definição de uma função, interpreta e retorna a função interpretada. Javascript é uma linguagem tão bonita que incorporou o conceito de lambda ao seu núcleo e portanto ela usa lambda sem ter uma palavra reservada para isso (diferentemente do Python). Esta função, dentro do ASP, não é global apenas para o JScript, ela é global para a aplicação inteira, isto é, você pode invocar ela do VBScript. Com essa nova função em mãos, podemos transformar o exemplo 1 no seguinte:</p>
<div class="codigo">
<pre><em><code>&lt;%

dim CwE : set CwE = new ClassWithEvents
call CwE.onComplimentBefore.addHandler(lambda("function(ev){ Response.write('Event onComplimentBefore has been fired. I
was really expecting this method to say: \'Hello World ' + ev.Arguments.item('firstname') + ' ' +
ev.Arguments.item('lastname') + ' (' + ev.Arguments.item('nickname') + ')\'\r\n') }"))
call CwE.onComplimentAfter.addHandler(lambda("function(ev){ Response.write('Event onComplimentAfter has been fired') }"))
call CwE.compliment("Fabio", "Nagao", "nagaozen")
set CwE = nothing

%&gt;</code></em></pre>
</div>
<p>Que também imprime a mesma mensagem do exemplo 1 na tela do navegador. Convenhamos, ficou bem melhor agora, não? Muito mais intuitívo também.</p>
<h4>Resumo da história</h4>
<p>O paradigma de programação orientada a objetos aplicado juntamente com o de programação orientado a eventos, permite ao programador criar ambientes que se assemelham muito à forma que compreendemos os objetos e eventos no nosso mundo físico. Por exemplo, estamos acostumados a atravessar a rua quando o semáforo está verde e a parar quando está vermelho. Um programador, ao tentar modelar este ambiente, pode criar, por exemplo, as classes &#8220;Pedestre&#8221; e &#8220;Semáforo&#8221;. O &#8220;Pedestre&#8221; tem um método &#8220;.andarPara(local)&#8221; que diz para ele ir para algum local. Este método, possui um sensor &#8220;onSemáfaroVermelho&#8221; que aciona o procedimento &#8220;.parar&#8221;, quando o sensor do pedestre receber &#8220;onSemáfaroVerde&#8221; do &#8220;Semáforo&#8221;, então ele chama &#8220;.andarPara(local)&#8221; novamente.</p>
<pre></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/programacao-orientada-a-eventos-e-lambda-function-em-aspvbscript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP: Excluindo arquivos de forma inteligente</title>
		<link>http://www.debugando.com/asp-excluindo-arquivos-de-forma-inteligente/</link>
		<comments>http://www.debugando.com/asp-excluindo-arquivos-de-forma-inteligente/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 23:20:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=458</guid>
		<description><![CDATA[Caros, por esses dias precisei gerar um arquivo PDF para o usuário baixar, mas enfrentei um problema. Ao gerar o PDF diretamente no navegador utilizando BinaryWrite e alterando o ContentType da página, encontrei muitos erros devido às configurações em navegadores distintos.
Para não depender do navegador do usuário, resolvi gerar os arquivos em uma determinada pasta [...]]]></description>
			<content:encoded><![CDATA[<p>Caros, por esses dias precisei gerar um arquivo PDF para o usuário baixar, mas enfrentei um problema. Ao gerar o PDF diretamente no navegador utilizando <em>BinaryWrite </em>e alterando o <em>ContentType </em>da página, encontrei muitos erros devido às configurações em navegadores distintos.</p>
<p>Para não depender do navegador do usuário, resolvi gerar os arquivos em uma determinada pasta no servidor, redirecionar a página para o usuário baixar o arquivo e executar uma rotina que apagasse os arquivos de tempos em tempos.</p>
<p>Desenvolvi essa página ASP onde determinei em constantes o &#8220;tempo de vida&#8221; dos arquivos. É necessário agendar essa rotina para ser executada no servidor.</p>
<p>Segue abaixo o código ASP utilizado:</p>
<pre><em><code>&lt;%
´Constante que determina o "tempo de vida" dos arquivos
const TEMPO_DE_VIDA = 20

´Constante que determina a unidade do "tempo de vida"
´yyyy - Year´
´q - Quarter
´m - Month
´y - Day of year
´d - Day
´w - Weekday
´ww - Week of year
´h - Hour
´n - Minute
´s - Second
const TEMPO_DE_VIDA_UN = "n"

´variável para
dim pasta
pasta = Server.MapPath("./arquivos/")

´Declara o File System Object
set fso = server.CreateObject("Scripting.FileSystemObject")

´GetFolder retorna a pasta passada por parâmetro
set fsoP = fso.getFolder(pasta)

´fsoP.files contem todos os arquivos da pasta
for each arq in fsoP.files
	´Escreve na tela o nome do arquivo e sua data de criação.
	Response.Write(arq.name&amp;" - criado em "&amp;arq.dateCreated&amp;".&lt;br /&gt;")

	´Caso o "tempo de vida" do arquivo tenha passado o tempo permitido, o arquivo é deletado
	if DateDiff(TEMPO_DE_VIDA_UN,arq.dateCreated,now) &gt; TEMPO_DE_VIDA then
		´Escreve na tela o nome do arquivo deletado
		Response.Write(arq.name&amp;" deletado.&lt;br/&gt;")

		´Deleta o arquivo
		arq.Delete
	end if
next

´Libera variáveis da memória
set pasta = nothing
set arq = nothing
set fsoP = nothing
set fso = nothing
%&gt;

</code></em></pre>
<p>Seguem alguns dos atributos do file (arq) que podem ajudá-los no critério para exclusão dos arquivos.</p>
<p><strong>Attributes (pode ser setado)</strong></p>
<p>Atributos do arquivo. Pode ser um ou mais dos seguintes valores:</p>
<ul>
<li>0 = Arquivo normal</li>
<li>1 = Arquivo somente leitura</li>
<li>2 = Arquivo oculto</li>
<li>4 = Arquivo de sistema</li>
<li>16 = Pasta ou diretório</li>
<li>32 = Arquivos alterados desde o último backup</li>
<li>1024 = Link ou atalho</li>
<li>2048 = Arquivo compactado</li>
</ul>
<p><strong>DateCreated</strong></p>
<p>Retorna a data e a hora em que o arquivo foi criado.</p>
<p><strong>DateLastAccessed </strong></p>
<p>Retorna a data e a hora em que o arquivo foi acessado.</p>
<p><strong>DateLastModified </strong></p>
<p>Retorna a data e a hora da última vez que o arquivo foi modificado.</p>
<p><strong>Drive</strong></p>
<p>Retorna a letra do drive em que o arquivo está.</p>
<p><strong>Name (pode ser setado)</strong></p>
<p>Nome do arquivo.</p>
<p><strong>ParentFolder</strong></p>
<p>Retorna o caminho complete da pasta onde o arquivo está.</p>
<p><strong>Path</strong></p>
<p>Retorna o caminho complete do arquivo no servidor.</p>
<p><strong>Size</strong></p>
<p>Retorna o tamanho, em bytes, do arquivo.</p>
<p><strong>Type</strong></p>
<p>Retorna o tipo do arquivo.</p>
<pre></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/asp-excluindo-arquivos-de-forma-inteligente/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP: Paginação estilo wp-PageNavi (Plugin do WordPress)</title>
		<link>http://www.debugando.com/asp-paginacao-estilo-wp-pagenavi-plugin-do-wordpress/</link>
		<comments>http://www.debugando.com/asp-paginacao-estilo-wp-pagenavi-plugin-do-wordpress/#comments</comments>
		<pubDate>Sun, 11 Jan 2009 16:06:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=428</guid>
		<description><![CDATA[Sabemos que existem várias formas de paginação com ASP, mas consegui, de um modo extremamente compacto, desenvolver uma paginação estilo a wp-PageNavi, que é um Plugin que uso e que vários blogueiros usam no WordPress. Usei um pouco de CSS, mas que não vem ao caso, e banco MySQL. Vamos lá, então!!
O banco MySQL fica [...]]]></description>
			<content:encoded><![CDATA[<p>Sabemos que existem várias formas de paginação com ASP, mas consegui, de um modo extremamente compacto, desenvolver uma paginação estilo a wp-PageNavi, que é um Plugin que uso e que vários blogueiros usam no WordPress. Usei um pouco de CSS, mas que não vem ao caso, e banco MySQL. Vamos lá, então!!</p>
<p>O banco MySQL fica assim:</p>
<p>Nome da Tabela: TabelaDados</p>
<p>Coluna 01: Codigo &#8211; INT(1) NOT NULL, PRIMARY, AUTO</p>
<p>Coluna 02: Unidade &#8211; VARCHAR(5) NULL</p>
<p>Coluna 03: Nome &#8211; VARCHAR(100) NULL</p>
<p>Criamos uma estrutura simples de página HTML para receber as informações, ficando assim:</p>
<pre><code><em>&lt;%@ Language="VBScript" %&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;
&lt;title&gt;Paginando Dados&lt;/title&gt;
&lt;/head&gt;
&lt;style type="text/css"&gt;
.table {border: 1px solid #FF9933;}
.table td {border: 1px solid #FF9933;}
.pagNumberMark {background: #B5C905; font: 12px Arial; color: #FFFFFF;}
.pagNumber {background: #333333; font: 12px Arial; color: #FFFFFF;}
.fonteBr {font: 14px Arial; color: #FFFFFF;}
.fontePr {font: 12px Arial; color: #000000;}
.fontePontos {border: 1px solid #333333; font: 14px Arial; color: #000000;
 background: #FFFFFF;}
a {text-decoration: none;}
.fonte {font: 12px Arial; color: #FFFFFF;}
&lt;/style&gt;</em>
&lt;body&gt;

</code></pre>
<p>Abaixo da tag &lt;body&gt; vamos criar as tabelas necessárias. Em particular criei uma tabela com duas linhas e, na primeira linha, criei uma tabela com duas linhas e 3 colunas para colocar as informações do banco. Façam como acharem melhor.</p>
<p>Fiz minha conexão com o banco e logo abaixo criei um RecordSet para meu SQL, limitei 15 linhas por página e usei o CursorLocation = 3.</p>
<p>Usei o PageCount para saber quantas páginas foram criadas, assim posso usar essa informação em qualquer lugar da aplicação.</p>
<pre><code>&lt;table width="600" border="0" align="center" cellpadding="0" cellspacing="0"&gt;
&lt;%
Dim Conexao
Set Conexao = Server.CreateObject("Adodb.Connection")
Conexao.ConnectionString = "Driver=MySQL ODBC 3.51 Driver; DataBase=xxxxxxx;
Server=xxxxxx; Uid=xxxx; PassWord=xxxxx;"
Conexao.Open

<em>Dim Rs_DADOS, PagNav, TotalPag
Dim Anterior, Proximo, Jo, PaginaVisita
Set Rs_DADOS = Server.CreateObject("Adodb.RecordSet")

Conexao.CursorLocation = 3
Rs_DADOS.PageSize = 15
Rs_DADOS.Open "Select Codigo, Unidade, Nome From TabelaDados Order By Nome Desc",Conexao

If Rs_DADOS.Eof Then
	Response.Write("&lt;tr&gt;&lt;td height=""28"" align=""center""&gt;LISTA VAZIA&lt;/td&gt;&lt;/tr&gt;")
Else
    PagNav = CInt(Request.QueryString("Pages"))

    If (PagNav = 0) Then : PagNav = 1 : End If

    Rs_DADOS.AbsolutePage = PagNav
    TotalPag = Rs_DADOS.PageCount
%&gt;
&lt;tr&gt;
&lt;td&gt;&lt;table class="table" width="600" border="0" cellspacing="0" cellpadding="0"&gt;
    &lt;tr class="fonteBr"&gt;
      &lt;td width="145" height="36" align="center" bgcolor="#FFBA75"&gt;&lt;strong&gt;CÓDIGO&lt;/strong&gt;&lt;/td&gt;
      &lt;td width="334" align="center" bgcolor="#FFBA75"&gt;&lt;strong&gt;NOME&lt;/strong&gt;&lt;/td&gt;
      &lt;td width="119" align="center" bgcolor="#FFBA75"&gt;&lt;strong&gt;UNIDADE&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;</em></code></pre>
<pre>Criei um While baseado na função AbsolutePage, assim posso ter controle
também das páginas, para quando eu quiser voltar ou avançar. A variável
PagNav está tendo o valor da página atual.
<em>
</em><code><em>&lt;% While Not Rs_DADOS.Eof And Rs_DADOS.AbsolutePage = PagNav %&gt;
    &lt;tr class="fontePr"&gt;
      &lt;td height="27" align="center"&gt;&lt;% Response.Write(Rs_DADOS("Codigo")) %&gt;&lt;/td&gt;
      &lt;td align="center"&gt;&lt;% Response.Write(Rs_DADOS("Nome")) %&gt;&lt;/td&gt;
      &lt;td align="center"&gt;&lt;% Response.Write(Rs_DADOS("Unidade")) %&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;%
    Rs_DADOS.MoveNext : Wend

    Anterior = PagNav - 1
    Proximo = PagNav + 1
    If (Anterior &lt;= 0) Then : Anterior = 1 : End If
    If (Proximo &gt; TotalPag) Then : Proximo = TotalPag : End If
    %&gt;
  &lt;/table&gt;&lt;/td&gt;</em>
<em>&lt;/tr&gt;</em></code>

Agora abaixo tem a arte mais complicada e chata de se aplicar.

<em><code>&lt;tr&gt;
&lt;td height="28"&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="center"&gt;&lt;table width="457" height="41" border="0" cellpadding="0" cellspacing="4"&gt;
&lt;tr&gt;
  &lt;td width="300" height="30" align="center" class="fontePr"&gt;&lt;%
If Request.QueryString("Pages") = "" Then
    Response.Write("Página 1 de "&amp;TotalPag)
Else
    Response.Write("Página "&amp;Request.QueryString("Pages")&amp;" de "&amp;TotalPag)
End If
%&gt;&lt;/td&gt;
  &lt;td width="42" align="center" class="pagNumber"&gt;&lt;a href="?Pages=1" class="fonte"&gt; « Início &lt;/a&gt;
&lt;%
PaginaVisita = CInt(Request.QueryString("Pages"))

If PagNav &gt; 1 Then
    Response.Write("&lt;td width=""36"" align=""center"" "&amp; _
    "class=""pagNumberMark""&gt;&lt;a href=""?Pages="&amp;Anterior&amp;""" "&amp; _
    "style=""font: 12px Arial; color: #FFFFFF;""&gt; « &lt;/a&gt;&lt;/td&gt;")
End If

If PagNav &gt; 5 Then
    Response.Write("&lt;td width=""28"" align=""center"" class=""fontePontos""&gt; ... &lt;/td&gt;")
End If
%&gt;</code></em></pre>
<p>Eu limitei para aparecer cinco links por, [1] [2] [3] [4] [5], isso logo nos primeiros IF&#8217;s, os outros são para quando for uma menor quantidade de registro, exemplo [19] [20] [21], que não tem cinco links.</p>
<p>Segue o final do código:</p>
<p>Caso o conteúdo fique com 5 páginas ou abaixo</p>
<pre><em><code>&lt;%
If PagNav &lt;= 5 Then
If TotalPag &gt;= 5 Then
For Jo = 1 To 5
	If PagNav = Jo Then
		Response.Write("&lt;td width=""36"" align=""center"" class=""pagNumberMark""&gt; "&amp; _
		" &lt;strong&gt;"&amp;Jo&amp;"&lt;/strong&gt; &lt;/td&gt;")
	Else
		Response.Write("&lt;td width=""36"" align=""center"" class=""pagNumber""&gt; "&amp; _
		"&lt;a href=""?Pages="&amp;Jo&amp;""" class=""fonte""&gt; "&amp;Jo&amp;" &lt;/a&gt;&lt;/td&gt;")
	End If
Next
Else
For Jo = 1 To TotalPag
	If PagNav = Jo Then
		Response.Write("&lt;td width=""36"" align=""center"" class=""pagNumberMark""&gt; "&amp; _
		" &lt;strong&gt;"&amp;Jo&amp;"&lt;/strong&gt; &lt;/td&gt;")
	Else
		Response.Write("&lt;td width=""36"" align=""center"" class=""pagNumber""&gt; "&amp; _
		"&lt;a href=""?Pages="&amp;Jo&amp;""" class=""fonte""&gt; "&amp;Jo&amp;" &lt;/a&gt;&lt;/td&gt;")
	End If
Next
End If
End If
%&gt;</code></em></pre>
<pre>Aqui é caso fique mais de 5 páginas ele vai colocando o seletor de páginas no meio e abrindo a paginação

<em><code>&lt;%
If PagNav &gt; 5 Then
	PagNav = PagNav + 4
	Pg = PagNav
	MaxB = Request.QueryString("Pages") - 1

	If (MaxB + 1) = TotalPag Then
	For Jo = MaxB To (Pg - 4)
		If PaginaVisita = Jo Then
			Response.Write("&lt;td width=""36"" align=""center"" class=""pagNumberMark""&gt; "&amp; _
			" &lt;strong&gt;"&amp;Jo&amp;"&lt;/strong&gt; &lt;/td&gt;")
		Else
			Response.Write("&lt;td width=""36"" align=""center"" class=""pagNumber""&gt; "&amp; _
			"&lt;a href=""?Pages="&amp;Jo&amp;""" class=""fonte""&gt; "&amp;Jo&amp;" &lt;/a&gt;&lt;/td&gt;")
		End If
	Next
	ElseIf (MaxB + 2) = TotalPag Then
	For Jo = MaxB To (Pg - 3)
		If PaginaVisita = Jo Then
			Response.Write("&lt;td width=""36"" align=""center"" class=""pagNumberMark""&gt; "&amp; _
			" &lt;strong&gt;"&amp;Jo&amp;"&lt;/strong&gt; &lt;/td&gt;")
		Else
			Response.Write("&lt;td width=""36"" align=""center"" class=""pagNumber""&gt; "&amp; _
			"&lt;a href=""?Pages="&amp;Jo&amp;""" class=""fonte""&gt; "&amp;Jo&amp;" &lt;/a&gt;&lt;/td&gt;")
		End If
	Next
	Else
	For Jo = (MaxB - 1) To (Pg - 2)
		If PaginaVisita = Jo Then
			Response.Write("&lt;td width=""36"" align=""center"" class=""pagNumberMark""&gt; "&amp; _
			" &lt;strong&gt;"&amp;Jo&amp;"&lt;/strong&gt; &lt;/td&gt;")
		Else
			Response.Write("&lt;td width=""36"" align=""center"" class=""pagNumber""&gt; "&amp; _
			"&lt;a href=""?Pages="&amp;Jo&amp;""" class=""fonte""&gt; "&amp;Jo&amp;" &lt;/a&gt;&lt;/td&gt;")
		End If
	Next
	End If
End If

If (TotalPag &lt;&gt; PaginaVisita) And (TotalPag &gt;= 5) Then
	Response.Write("&lt;td width=""28"" align=""center"" class=""fontePontos""&gt; ... &lt;/td&gt;")
End If
%&gt;
  &lt;td width="34" align="center" class="pagNumberMark"&gt;&lt;a href="?Pages=&lt;% Response.Write(Proximo) %&gt;
  " class="fonte"&gt; » &lt;/a&gt;&lt;/td&gt;
  &lt;td width="42" align="center" class="pagNumber"&gt;&lt;a href="?Pages=&lt;% Response.Write(TotalPag) %&gt;
  " class="fonte"&gt; Final » &lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;%
End If
Set Rs_DADOS = Nothing
%&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;</code></em></pre>
<p>O resultado final é:</p>
<p><img src="http://conteudo.imasters.uol.com.br/11163/imagem.gif" alt="" /></p>
<p>Repare que uso muito os IF&#8217;s para saber se é menor que 5, maior que 5 e por aí vai.</p>
<p>O código não é tão difícil quando você começa a utilizar ele com frequência, aprenderá com o tempo!!</p>
<p>Baixe <a class="ext" href="http://conteudo.imasters.uol.com.br/11163/codigo.asp">aqui</a>o código completo!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/asp-paginacao-estilo-wp-pagenavi-plugin-do-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP: Bloqueando endereços IP</title>
		<link>http://www.debugando.com/asp-bloqueando-enderecos-ip/</link>
		<comments>http://www.debugando.com/asp-bloqueando-enderecos-ip/#comments</comments>
		<pubDate>Sun, 11 Jan 2009 16:00:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=426</guid>
		<description><![CDATA[Para bloquear IP, antes iremos verificar o endereço IP de um visitante, que é um processo muito simples, já que existem duas variáveis de servidor que nos oferecerão diretamente esta informação.
Existem dois modos de navegação do usuário. Ele pode ter vindo de um Proxy ou em um browser que não usa Proxy. No primeiro caso [...]]]></description>
			<content:encoded><![CDATA[<p>Para bloquear IP, antes iremos verificar o endereço IP de um visitante, que é um processo muito simples, já que existem duas variáveis de servidor que nos oferecerão diretamente esta informação.</p>
<p>Existem dois modos de navegação do usuário. Ele pode ter vindo de um <strong>Proxy</strong> ou em um browser que não usa Proxy. No primeiro caso sabemos que ele está vindo de um Proxy, através do HTTP_X_FORWARDED_FOR do objeto Request da coleção servervariaveis.</p>
<pre><code><em>' recupera  IP do visitante
'O visitante pode acessar por proxy, então pego a IP que estiver utilizando
ip = request.ServerVariables("HTTP_X_FORWARDED_FOR")
'Se não vier do proxy, recupera ip do visitante
if ip ="" then
   ip = Request.ServerVariables("REMOTE_ADDR")
end if</em> 

</code>Se quisermos evitar que um visitante navegue em nossas páginas com um
IP, simplesmente temos que verificar com um IF que esse IP que queremos
bloquear não é o do visitante.

<code><em>if ip = "127.0.0.1" then
   response.write ("bloqueio")
end if</em> </code></pre>
<p>A variável <strong>REMOTE_ADDR</strong> devolve o endereço IP do Host remoto que faz a requisição, já o <strong>HTTP_X_FORWARDED_FOR</strong> irá dizer se usuário está atrás de um servidor proxy. Você deve usar este primeiro e se os resultados forem valor nulo ou &#8220;desconhecido&#8221;, então use Request.ServerVariables ["REMOTE_ADDR"] para determinar o endereço IP.</p>
<p>Imagine uma lista de IPs que desejamos bloquear. Inserimos um simples array contendo os IPs que queremos bloquear e faremos um loop para percorrê-lo, de modo que possamos verificar se o IP do usuário está na lista de IP´s a serem bloqueados.</p>
<pre><code><em>'lista de  ips bloqueados
dim ip_bloqueados(5)
ip_bloqueados(0) = "61.254.40.22"
ip_bloqueados(1) = "62.454.40.25"
ip_bloqueados(2) = "62.254.40.17"
ip_bloqueados(3) = "65.105.61.13"
ip_bloqueados(4) = "108.210.161.1" 

for each ip_atual in ips_bloqueadas
   'se o ip do visitante ,estiver na lista
   if ip = ip_atual then
      response.redirect " no_access. asp"
end if </em>
<em>next

</em></code>O código abaixo irá detectar endereço de IP do visitante e verificar se
deve fazer o bloqueio de endereços IP. Se o endereço corresponde a
qualquer um de nossa matriz, o nosso visitante será redirecionado para
a página "no_access.asp".</pre>
<pre><em><code>&lt;%
'declara variaveis
Dim sIP
Dim sIParray(5)
'endereços IP k serão bloqueados no array
sIParray(0) = "61.254.40.22"
sIParray(1) = "62.454.40.25"
sIParray(2) = "62.254.40.17"
sIParray (3) = "65.105.61.13"
sIParray (4) = "108.210.161.1"
'Recupera o endereço IP dos visitantes
sIP = Request.ServerVariables("REMOTE_ADDR") 

' Loop através dos IPs banidos usando a função UBound
For i = 0 to UBound(sIParray)
'Verifica se o endereço IP corresponde a qualquer dos IPs bloqueados
If sIP = sIParray(i) Then
Response.Redirect "no_access.asp"
End If
Next
%&gt;</code></em></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/asp-bloqueando-enderecos-ip/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cadastrar, Listar, Editar e Excluir dados de um XML com ASP</title>
		<link>http://www.debugando.com/cadastrar-listar-editar-e-excluir-dados-de-um-xml-com-asp/</link>
		<comments>http://www.debugando.com/cadastrar-listar-editar-e-excluir-dados-de-um-xml-com-asp/#comments</comments>
		<pubDate>Thu, 18 Dec 2008 17:57:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=274</guid>
		<description><![CDATA[Cadastrando
Primeiro temos que ter o XML pronto, como um Banco de Dados com suas &#8220;Colunas&#8221; já estruturadas. Adicionei três tags a ele e uma principal, as tags são nome, email e telefone, junto com a tag usuario, que fecha o registro e junto com a tag cadastro que chega o &#8220;pacote&#8221;. Então vamos lá:
Banco.xml
&#60;?xml version=&#8221;1.0&#8243; [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Cadastrando</strong></p>
<p>Primeiro temos que ter o XML pronto, como um Banco de Dados com suas &#8220;Colunas&#8221; já estruturadas. Adicionei três tags a ele e uma principal, as tags são <span class="c2"><span style="color: #006699;">nome</span></span>, <span class="c2"><span style="color: #006699;">email </span></span>e <span class="c2"><span style="color: #006699;">telefone</span></span>, junto com a tag <span class="c2"><span style="color: #006699;">usuario</span></span>, que fecha o registro e junto com a tag <span class="c2"><span style="color: #006699;">cadastro </span></span>que chega o &#8220;pacote&#8221;. Então vamos lá:</p>
<p><strong>Banco.xml</strong></p>
<p><em>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;<br />
&lt;cadastro&gt;<br />
&lt;usuario&gt;<br />
&lt;nome&gt;teste nome&lt;/nome&gt;<br />
&lt;email&gt;teste email&lt;/email&gt;<br />
&lt;telefone&gt;teste telefone&lt;/telefone&gt;<br />
&lt;/usuario&gt;<br />
&lt;/cadastro&gt;</em></p>
<p>Deixei a estrutura fixa, já com as tags <span class="c2"><span style="color: #006699;">nome</span></span>, <span class="c2"><span style="color: #006699;">email </span></span>e <span class="c2"><span style="color: #006699;">telefone</span></span>, já preenchidas para só seguirem a base, saber do que cada elemento é composto.</p>
<p>XML criado então é só criar uma página chamada <strong>Cadastro.asp</strong>, dentro dela criar um formulário com os campos de Nome, E-Mail e Telefone e um botão para salvar, tudo em tags HTML mesmo.</p>
<p>Na mesma página fiz uma otimização, coloquei o código de cadastramento em ASP dentro da mesma página e ativei o <span class="c2"><span style="color: #006699;">script</span></span> através do click do botão &#8220;Enviar&#8221;, finalizando fica assim:</p>
<p><strong>Cadastro.asp</strong></p>
<p><em>&lt;%@ Language=”VBScript” %&gt;<br />
&lt;html&gt;<br />
&lt;body&gt;<br />
&lt;a href=”Cadastro.asp”&gt;CADASTRAR&lt;/a&gt; &#8211; &lt;a href=”Listar.asp”&gt;LISTAR&lt;/a&gt;<br />
&lt;br&gt;&lt;br&gt;<br />
&lt;form action=”Cadastro.asp” method=”post”&gt;<br />
&lt;b&gt;Nome: &lt;/b&gt;&lt;input type=”text” name=”Nome”&gt;&lt;br&gt;<br />
&lt;b&gt;E-Mail: &lt;/b&gt;&lt;input type=”text” name=”EMail”&gt;&lt;br&gt;<br />
&lt;b&gt;Telefone: &lt;/b&gt;&lt;input type=”text” name=”Telefone”&gt;&lt;br&gt;<br />
&lt;input type=”submit” value=”Cadastrar” name=”btCad”&gt;<br />
&lt;/form&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
&lt;%<br />
‘ Cadastrando dentro do arquivo XML<br />
If Request.Form(”btCad”) = “Cadastrar” Then<br />
Dim Nome, EMail, Telefone, Banco<br />
Nome = Request.Form(”Nome”)<br />
EMail = Request.Form(”EMail”)<br />
Telefone = Request.Form(”Telefone”)<br />
Banco = Server.MapPath(”Banco.xml”)<br />
Set DocMT = Server.CreateObject(”Microsoft.XMLDOM”) ‘ Criando Objeto<br />
DocMT.Load(Banco)<br />
Set RaizXML = DocMT.documentElement<br />
Set CriarReg = DocMT.createElement(”usuario”)<br />
RaizXML.appendChild(CriarReg)<br />
‘ Funcção para criar objetos dentro do XML</em></p>
<p><em>Function AlimentarXML(NomeElemento, NomeVariavel)<br />
Set Campo = DocMT.createElement(”&#8221;&amp;NomeElemento&amp;”&#8221;)<br />
Campo.Text = NomeVariavel<br />
CriarReg.appendChild(Campo) ‘ Linha de criação de Objetos<br />
End Function</em></p>
<p><em>Call AlimentarXML(”nome”, Nome)<br />
Call AlimentarXML(”email”, EMail)<br />
Call AlimentarXML(”telefone”, Telefone)</em></p>
<p><em>DocMT.Save(Banco)<br />
Response.Write(”&lt;script&gt;alert(’Cadastrado com Sucesso!’);location=’Cadastro.asp’&lt;/script&gt;”)<br />
Set DocMT = Nothing<br />
End If<br />
%&gt;</em><br />
Para ficar mais fácil, deixei o código todo comentado, mas algumas linhas serão esclarecidas:</p>
<p>Para inserir dados no XML, usei o Microsoft.XMLDOM para conexão. Em cada inserção adiciono uma tag <span class="c2"><span style="color: #006699;">usuario </span></span>com essa linha abaixo:</p>
<p><em>Set CriarReg = DocMT.createElement(&#8220;usuario&#8221;)</em></p>
<p>Como são três tags para ser alimentadas usei uma função de minha autoria para fazer esse trabalho, a <span class="c2"><span style="color: #006699;">[cor2]AlimentarXML</span></span>[/cor2] e adiciono com a linha <span class="c2"><em><span style="color: #006699;">Call AlimentarXML(&#8220;nome&#8221;, Nome)</span></em></span> e salvo tudo através do <span class="c2"><span style="color: #006699;">DocMT.Save(Banco)</span></span> e pronto, é só testar e ver se o XML está sendo manipulado corretamente:</p>
<p><em>OBS: Quando testei no meu localhost, o arquivo <strong>Cadastro.asp</strong> deu erro de acesso. Teste ele em um servidor web e funcionou, caso isso aconteçam com vocês também.</em></p>
<p>De primeira, vamos organizar o arquivo <strong>Visualizar.xsl</strong>:</p>
<p><strong>Visualizar.xsl</strong></p>
<p><em>&lt;?xml version=&#8221;1.0&#8243;?&gt;<br />
&lt;xsl:stylesheet xmlns:xsl=&#8221;http://www.w3.org/TR/WD-xsl&#8221;&gt;<br />
&lt;xsl:template match=&#8221;/&#8221;&gt;<br />
&lt;center&gt;<br />
&lt;font color=&#8221;#000000&#8243; size=&#8221;2&#8243; face=&#8221;MS Sans Serif&#8221;&gt;Visualizando Dados&lt;/font&gt;<br />
&lt;table width=&#8221;465&#8243; border=&#8221;1&#8243; cellspacing=&#8221;0&#8243; cellpadding=&#8221;0&#8243;&gt;<br />
&lt;tr&gt;<br />
&lt;td width=&#8221;117&#8243; height=&#8221;22&#8243;&gt;&lt;div align=&#8221;center&#8221;&gt;&lt;strong&gt;Nome&lt;/strong&gt;&lt;/div&gt;&lt;/td&gt;<br />
&lt;td width=&#8221;125&#8243;&gt;&lt;div align=&#8221;center&#8221;&gt;&lt;strong&gt;E-mail&lt;/strong&gt;&lt;/div&gt;&lt;/td&gt;<br />
&lt;td width=&#8221;107&#8243;&gt;&lt;div align=&#8221;center&#8221;&gt;&lt;strong&gt;Telefone&lt;/strong&gt;&lt;/div&gt;&lt;/td&gt;<br />
&lt;td width=&#8221;106&#8243;&gt;&lt;div align=&#8221;center&#8221;&gt;&lt;strong&gt;Ações&lt;/strong&gt;&lt;/div&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;xsl:for-each select=&#8221;cadastro/usuario&#8221;&gt;<br />
&lt;tr align=&#8221;center&#8221;&gt;<br />
&lt;td height=&#8221;22&#8243;&gt;&lt;xsl:value-of select=&#8221;nome&#8221;/&gt;&lt;/td&gt;<br />
&lt;td&gt;&lt;xsl:value-of select=&#8221;email&#8221;/&gt;&lt;/td&gt;<br />
&lt;td&gt;&lt;xsl:value-of select=&#8221;telefone&#8221;/&gt;&lt;/td&gt;<br />
&lt;td&gt;&lt;a&gt;&lt;xsl:attribute name=&#8221;href&#8221;&gt;Editar.asp?nome=&lt;xsl:value-of select=&#8221;nome&#8221;/&gt;&lt;xsl:value-of select=&#8221;link&#8221;/&gt;&lt;/xsl:attribute&gt;Editar&lt;/a&gt;/&lt;a&gt;&lt;xsl:attribute name=&#8221;href&#8221;&gt;Listar.asp?nome=&lt;xsl:value-of select=&#8221;nome&#8221;/&gt;&lt;xsl:value-of select=&#8221;link&#8221;/&gt;&lt;/xsl:attribute&gt;Apagar&lt;/a&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/xsl:for-each&gt;<br />
&lt;/table&gt;<br />
&lt;/center&gt;<br />
&lt;/xsl:template&gt;<br />
&lt;/xsl:stylesheet&gt;<br />
</em></p>
<p>Com o <span class="c2"><span style="color: #006699;">stylesheet </span></span>(que não vem ao caso explicar no momento) vamos fazendo a estrutura de visualização de todos os elementos da tag <span class="c2"><span style="color: #006699;">usuario </span></span>através de um <span class="c2"><span style="color: #006699;">for-each</span></span> assim:</p>
<p><em><span class="c2"><span style="color: #006699;">&lt;xsl:for-each select=&#8221;cadastro/usuario&#8221;&gt;</span></span> e fechando com <span class="c2"><span style="color: #006699;">&lt;/xsl:for-each&gt;</span></span></em></p>
<p>Pegamos o valor dos elementos com essa estrutura aqui: &lt;xsl:value-of select=&#8221;nome_da_tag&#8221;/&gt;.</p>
<p>Usamos o atributo &lt;xsl:attribute name=&#8221;href&#8221;&gt; para gerar links, no nosso caso para excluir e editar (que não será mostrado nesse artigo).</p>
<p>Em uma página chamada Listar.asp criamos os objetos para chamar o XML e o XSL e integrá-los com o transformNode:</p>
<div><em>Set XSLDOC = Server.CreateObject(&#8220;Microsoft.XMLDOM&#8221;)<br />
Set XMLDOC = Server.CreateObject(&#8220;Microsoft.XMLDOM&#8221;)</em></div>
<div><em>XMLDOC.Load(Server.MapPath(&#8220;Banco.xml&#8221;))<br />
XSLDOC.Load(Server.MapPath(&#8220;Visualizar.xsl&#8221;))<br />
Response.Write(XMLDOC.transformNode(XSLDOC))</em></div>
<div><em><br />
</em></div>
<div><em> </em></div>
<div><em> </em>Para deletar é simples, criamos um XMLDOC.documentElement para escolher qual nó vamos deletar e chamamos por querystring como tem no &lt;xsl:attribute name=&#8221;href&#8221;&gt; do Visualizar.xsl, que no caso usamos o select=&#8221;nome&#8221;, deletando com o removeChild, segue abaixo o código completo de Listar.asp</div>
<div></div>
<div></div>
<p><strong>Listar.asp</strong></p>
<p><code><em>&lt;%@ Language="VBScript" %&gt;<br />
&lt;html&gt;<br />
&lt;body&gt;<br />
&lt;a href="Cadastro.asp"&gt;CADASTRAR&lt;/a&gt; - &lt;a href="Listar.asp"&gt;LISTAR&lt;/a&gt;<br />
&lt;br&gt;&lt;br&gt;<br />
&lt;%<br />
Set XSLDOC = Server.CreateObject("Microsoft.XMLDOM") ' Criando Objeto<br />
Set XMLDOC = Server.CreateObject("Microsoft.XMLDOM") ' Criando Objeto</em></code></p>
<p><code><strong>Listando Dados</strong></code></p>
<p><code><em>XMLDOC.Load(Server.MapPath("Banco.xml"))<br />
XSLDOC.Load(Server.MapPath("Visualizar.xsl"))<br />
Response.Write(XMLDOC.transformNode(XSLDOC))</em></code></p>
<p><code><strong>Deletando Dados</strong></code></p>
<div><code><em>If CStr(Request.QueryString("Nome")) &lt;&gt; "" Then<br />
Banco = Server.MapPath("Banco.xml") ' Chamando o Arquivo XML para sofrer alteração<br />
XMLDOC.Load(Banco)</em></code></div>
<div><code><em>Set RaizXML = XMLDOC.documentElement<br />
Set AlterarReg = RaizXML.selectSingleNode("usuario[nome='"&amp;Request.QueryString("nome")&amp;"']")<br />
RaizXML.removeChild(AlterarReg) ' Linha de remoção de Objetos</em></code></div>
<div><code><em>XMLDOC.Save(Banco)<br />
Response.Write("&lt;script&gt;alert('Deletado com Sucesso!');location='Listar.asp'&lt;/script&gt;")<br />
End If</em></code></div>
<div><code><em>Set XSLDOC = Nothing<br />
Set XMLDOC = Nothing<br />
%&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</em></code></div>
<div><code><em> </em></code><code><em> </em></code></div>
<p><code><em><strong>Uma observação:</strong> tentei fazer o mais fácil possível para garantir um bom entendimento na hora da programação. Qualquer alteração no código para facilitar os comandos será bem-vinda, então vamos lá.</em></code></p>
<div><code>Criem um arquivo chamado <strong>Editar.asp</strong> e nele serão lidas todas as tags que contém no arquivo <strong>Banco.xml </strong>, mas com a querystring passada pelo arquivo <strong>Ler.asp</strong> que criamos no artigo anterior. Vamos só alterar uma única tag, um único nó do XML. Lembrando que usei uma tag "nome": mas vocês poderiam criar uma tag "id" e colocar números seqüenciais ou randômicos, a escolha fica a critério.</code></div>
<div><code>Vamos primeiro listar todos os registros.</code></div>
<div></div>
<div></div>
<div><code><em>&lt;%@ Language="VBScript" %&gt;</em></code></div>
<div><code><em>&lt;%</em></code></div>
<div><code><em> Dim Banco : Banco = Server.MapPath("Banco.xml")</em><br />
<em> Set XMLDOC = Server.CreateObject("Microsoft.XMLDOM")</em></code></div>
<div><code><em> Set objLER = Server.CreateObject("Microsoft.XMLDOM")</em></code></div>
<div><code><em> XMLDOC.Load(Banco)</em></code></div>
<div><code><em> Set objLER = XMLDOC.getElementsByTagName("*")</em></code></div>
<p><code><em>%&gt;</em></code></p>
<p>Logo abaixo desse script vamos criar o formulário com um &#8220;<em>for</em>&#8221; fazendo a varredura nas tags para pegar só o valor de tag citado na <em>querystring </em>passada:</p>
<div><em>&lt;html&gt;</em></div>
<div><em>&lt;body&gt;</em></div>
<div><em>&lt;a href=&#8221;Cadastro.asp&#8221;&gt;CADASTRAR&lt;/a&gt; &#8211; &lt;a href=&#8221;Listar.asp&#8221;&gt;LISTAR&lt;/a&gt;</em></div>
<div><em>&lt;br&gt;&lt;br&gt;</em></div>
<div><em>&lt;form action=&#8221;Editar.asp?nome=&lt;%=Request.QueryString(&#8220;nome&#8221;)%&gt;&#8221; method=&#8221;post&#8221;&gt;</em></div>
<div><em> &lt;input type=&#8221;hidden&#8221; name=&#8221;CampoUpdate&#8221; value=&#8221;&lt;%=Request.QueryString(&#8220;nome&#8221;)%&gt;&#8221;&gt;</em></div>
<div><em> &lt;%</em></div>
<div><em> For i = 0 To (objLER.length &#8211; 1)</em></div>
<div><em> If objLER.Item(i).Text = &#8220;&#8221;&amp;Request.QueryString(&#8220;nome&#8221;)&amp;&#8221;" Then</em></div>
<p><em> %&gt;</em></p>
<p><em> &lt;b&gt;Nome: &lt;/b&gt;&lt;input type=&#8221;text&#8221; name=&#8221;Nome&#8221; value=&#8221;&lt;% Response.Write(objLER.Item(i).Text) %&gt;&#8221;&gt;&lt;br&gt;</em></p>
<p><em> &lt;b&gt;E-Mail: &lt;/b&gt;&lt;input type=&#8221;text&#8221; name=&#8221;EMail&#8221; value=&#8221;&lt;% Response.Write(objLER.Item(i+1).Text) %&gt;&#8221;&gt;&lt;br&gt;</em></p>
<p><em> &lt;b&gt;Telefone: &lt;/b&gt;&lt;input type=&#8221;text&#8221; name=&#8221;Telefone&#8221; value=&#8221;&lt;% Response.Write(objLER.Item(i+2).Text) %&gt;&#8221;&gt;&lt;br&gt;</em></p>
<p><em> &lt;%</em></p>
<p><em> End If</em></p>
<p><em> Next</em></p>
<p><em> %&gt;</em></p>
<p><em>&lt;input type=&#8221;submit&#8221; value=&#8221;Editar&#8221; name=&#8221;btEdt&#8221;&gt;</em></p>
<p><em>&lt;/form&gt;</em></p>
<p><em>&lt;/body&gt;</em></p>
<p><em>&lt;/html&gt;</em></p>
<p><em>Reparem a linha onde temos <span class="c1"><span style="color: #cc3300;">If objLER.Item(i).Text = &#8220;&#8221;&amp;Request.QueryString(&#8220;nome&#8221;)&amp;&#8221;" Then, é ela que está &#8220;selecionando&#8221; a tag que quero mostrar.</span></span></em></p>
<p><em></em></p>
<p><strong>E por fim a edição:</strong></p>
<div><em>&lt;%</em></div>
<div><em>If Request.Form(&#8220;btEdt&#8221;) = &#8220;Editar&#8221; Then</em></div>
<div><em> Dim Nome, EMail, Telefone, CampoUpdate, i</em></div>
<div><em> Nome             = Request.Form(&#8220;Nome&#8221;)</em></div>
<div><em> EMail              = Request.Form(&#8220;EMail&#8221;)</em></div>
<div><em> Telefone          = Request.Form(&#8220;Telefone&#8221;)</em></div>
<div><em> CampoUpdate = Request.Form(&#8220;CampoUpdate&#8221;)</em></div>
<div><em> </em><em> Set objLER_upDate = XMLDOC.getElementsByTagName(&#8220;*&#8221;)</em></div>
<p>For i = 0 To (objLER.length &#8211; 1)</p>
<p>If objLER.Item(i).Text = &#8220;&#8221;&amp;CampoUpdate&amp;&#8221;" Then</p>
<p>objLER.Item(i).Text    = Nome</p>
<p>objLER.Item(i+1).Text            = EMail</p>
<p>objLER.Item(i+2).Text            = Telefone</p>
<p>End If</p>
<p>Next</p>
<p>XMLDOC.Save(Banco)</p>
<p>Response.Write(&#8220;&lt;script&gt;alert(&#8216;Editado com Sucesso!&#8217;);location=&#8217;Listar.asp&#8217;&lt;/script&gt;&#8221;)</p>
<p>Set objLER_upDate = Nothing</p>
<p>End If</p>
<p>Set objLER = Nothing</p>
<p>Set XMLDOC = Nothing</p>
<p>%&gt;</p>
<p>Coloquei a <em>querystring </em>passada em um campo <em>hidden</em> e joguei ele dentro de um &#8220;<em>for</em>&#8220;, como fiz no formulário, em seguida troquei os valores pelas variáveis em seqüência, Nome, EMail e Telefone, salvei com o método XMLDOC.Save e passei um alert em JavaScript e pronto!!</p>
<p>Esse tipo de utilização do XML serve para coisas pequenas, por exemplo, um combo de país, cidades de um determinado estado, cores, dentre outros.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/cadastrar-listar-editar-e-excluir-dados-de-um-xml-com-asp/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Trabalhando com sessions no ASP</title>
		<link>http://www.debugando.com/trabalhando-com-sessions-no-asp/</link>
		<comments>http://www.debugando.com/trabalhando-com-sessions-no-asp/#comments</comments>
		<pubDate>Thu, 04 Dec 2008 14:11:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Sessions]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=59</guid>
		<description><![CDATA[Uma session serve para armazenar informações que serão posteriormente utilizadas/manipuladas no site. O ASP possibilita o uso de sessions através do objeto session.
Um exemplo de uso de sessions são sites com controle de login e senha, onde quando você realiza o login, você permanecerá logado enquanto continuar navegando no site.
Veja como é fácil trabalhar com [...]]]></description>
			<content:encoded><![CDATA[<p>Uma session serve para armazenar informações que serão posteriormente utilizadas/manipuladas no site. O ASP possibilita o uso de sessions através do objeto session.</p>
<p>Um exemplo de uso de sessions são sites com controle de login e senha, onde quando você realiza o login, você permanecerá logado enquanto continuar navegando no site.</p>
<p>Veja como é fácil trabalhar com sessions no ASP:</p>
<p>Criando uma session:</p>
<pre><em>session("htmlstaff") = "OK"</em></pre>
<p>Neste exemplo, a session recebe o nome de &#8220;htmlstaff&#8221;.</p>
<p>Na página, recuperariamos esta session da seguinte forma:</p>
<pre><em>htmlstaff = session("htmlstaff")

response.write htmlstaff</em></pre>
<p>Criando uma session com data/hora para expiração:</p>
<pre><em>session.timeout = 10

session("htmlstaff") = "OK"</em></pre>
<p>Neste exemplo, a session expiraria em 10 minutos.</p>
<p>Obs.: Por padrão, caso não seja declarado o session.timeout, a expiração de uma session demorará 20 minutos.</p>
<p>Deletando uma session específica:</p>
<pre><em>session.contents.remove("htmlstaff")</em></pre>
<p>Ou você pode deletar todas as sessions de uma só vez usando o método abandon:</p>
<pre><em>session.abandon</em></pre>
<p>Para maiores informações sobre o objeto session, acesse:</p>
<p><a rel="nofollow" href="http://www.w3schools.com/ASP/asp_sessions.asp" target="_blank">http://www.w3schools.com/ASP/asp_sessions.asp</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/trabalhando-com-sessions-no-asp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Condicionais if, elseif e else no ASP</title>
		<link>http://www.debugando.com/condicionais-if-elseif-e-else-no-asp/</link>
		<comments>http://www.debugando.com/condicionais-if-elseif-e-else-no-asp/#comments</comments>
		<pubDate>Thu, 04 Dec 2008 14:08:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Condicionais]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=57</guid>
		<description><![CDATA[Os condicionais if, elseif e else servem para checar se uma determinada condição é satisfeita pela script. Pode parecer difícil de entender, mas vejamos alguns exemplos práticos para ver que é bem simples o uso dos mesmos:
&#60;%
variavel = "1"

if variavel="1" then
	response.write "Verdadeiro"
end if
%&#62;
No exemplo acima é utilizado o if (que em português quer dizer &#8220;se&#8221;) [...]]]></description>
			<content:encoded><![CDATA[<p>Os condicionais if, elseif e else servem para checar se uma determinada condição é satisfeita pela script. Pode parecer difícil de entender, mas vejamos alguns exemplos práticos para ver que é bem simples o uso dos mesmos:</p>
<pre><em>&lt;%
variavel = "1"

if variavel="1" then
	response.write "Verdadeiro"
end if
%&gt;</em></pre>
<p>No exemplo acima é utilizado o if (que em português quer dizer &#8220;se&#8221;) para checar se variável é igual a 1. Neste caso, temos exibido como resultado na página: &#8220;Verdadeiro&#8221;.</p>
<pre><em>&lt;%
variavel = "1"

if variavel="2" then
	response.write "Verdadeiro"
else
	response.write "Falso"
end if
%&gt;</em></pre>
<p>No exemplo acima é utilizado o if para checar se variável é igual a 2, caso ela não seja, ela caí então na condição else (que em português quer dizer &#8220;senão&#8221;). Neste caso, temos exibido como resultado na página: &#8220;Falso&#8221;.</p>
<pre><em>&lt;%
variavel = "2"

if variavel="1" then
	response.write "Variável = 1"
elseif variavel="2" then
	response.write "Variável = 2"
else
	response.write "Variável diferente de 1 e 2"
end if
%&gt;</em></pre>
<p>No exemplo acima é utilizado o if para checar se variável é igual a 1, caso ela não seja, é então checado na condição elseif (que em português quer dizer &#8220;senão se&#8221;) se ela é igual a 2, caso ela não seja, ela caí então na condição else. Neste caso, temos exibido como resultado na página: &#8220;Variável = 2&#8243;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/condicionais-if-elseif-e-else-no-asp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

