<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<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/"
	>

<channel>
	<title>sa110-06001 &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/sa110-06001/</link>
	<description>Feed of posts on WordPress.com tagged "sa110-06001"</description>
	<pubDate>Mon, 07 Dec 2009 06:07:36 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[Cronograma para entrega de projeto - SA110-06001]]></title>
<link>http://iranrodrigues.wordpress.com/2008/06/14/cronograma-para-entrega-de-projeto-sa110-06001/</link>
<pubDate>Sat, 14 Jun 2008 15:06:05 +0000</pubDate>
<dc:creator>Iran Rodrigues</dc:creator>
<guid>http://iranrodrigues.wordpress.com/2008/06/14/cronograma-para-entrega-de-projeto-sa110-06001/</guid>
<description><![CDATA[Pessoal, abaixo estão listadas as datas para a realização de cada uma das atividades que integram a ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Pessoal, abaixo estão listadas as datas para a realização de cada uma das atividades que integram a elaboração do projeto da turma SA110-06001, conforme combinado na aula do dia 14/06/2008:</p>
<p>Definição de metas e prazos: hoje;</p>
<p>[elaboração da proposta]</p>
<p>Entrega da proposta: 21/06/2008;</p>
<p>[mão na massa]</p>
<p>Plantão (inicial) de dúvidas: 12/07/2008;</p>
<p>[mais mão na massa]</p>
<p>Plantão (final) de dúvidas: 26/07/2008;</p>
<p>[conclusão do site]</p>
<p>Hospedagem do site: 09/08/2008;</p>
<p>Avaliação: 16/08/2008.</p>
<p>As aulas só ocorrerão nas datas supracitadas. Quaisquer dúvidas também poderão ser esclarecidas por e-mail (iran@microcamp.com.br).</p>
<p>Alunos faltantes, contatem-me por e-mail para maiores esclarecimentos.</p>
<p>Atenciosamente,</p>
<p>Iran Rodrigues</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Conectando-se a um banco de dados Access através do ASP - Parte 2]]></title>
<link>http://iranrodrigues.wordpress.com/2008/02/20/conectando-se-a-um-banco-de-dados-access-atraves-do-asp-parte-2/</link>
<pubDate>Wed, 20 Feb 2008 22:28:35 +0000</pubDate>
<dc:creator>Iran Rodrigues</dc:creator>
<guid>http://iranrodrigues.wordpress.com/2008/02/20/conectando-se-a-um-banco-de-dados-access-atraves-do-asp-parte-2/</guid>
<description><![CDATA[Aprenda a realizar operações básicas envolvendo bancos de dados com o ASP. Continuando o post anteri]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><h3>Aprenda a realizar operações básicas envolvendo bancos de dados com o ASP.</h3>
<p>Continuando o <a href="http://iranrodrigues.wordpress.com/2008/02/18/conectando-se-a-um-banco-de-dados-access-atraves-do-asp-parte-1/" title="Parte 1" target="_blank">post anterior</a>, veremos como listar os registros existentes em uma tabela no banco. Antes de qualquer coisa, verifique se você baixou o <a href="http://arquivos.iranrodrigues.com/arquivos/SA110-06001/banco.mdb" title="Banco de dados de exemplo" target="_blank">banco de dados de exemplo</a> citado no post anterior, pois ele será necessário agora.</p>
<p>A última coisa que fizemos foi a criação de um novo arquivo &#8220;ASP VBScript&#8221; no Dreamweaver, o qual acrescentamos as seguintes linhas no topo (a primeira já existe):</p>
<pre class="brush: vb;">
&lt;%@LANGUAGE=&quot;VBSCRIPT&quot; CODEPAGE=&quot;1252&quot;%&gt;
&lt;%
set conexao = Server.CreateObject(&quot;ADODB.Connection&quot;)
conexao.Open &quot;Provider=Microsoft.Jet.OLEDB.4.0;DataSource=&quot;&amp;Server.MapPath(&quot;banco.mdb&quot;)&amp;&quot;;&quot;
Set registros = Server.CreateObject (&quot;ADODB.Recordset&quot;)
registros.Open &quot;usuarios&quot;,conexao,3,3
%&gt;
</pre>
<p>Com a utilização do método &#8220;Open&#8221; do objeto &#8220;registros&#8221;, este passa a se comportar como um <i>array</i>, ou seja, pode ter seus valores acessados através de índices. Mas que índices são esses? E quais seriam os valores? Resposta: os índices correspondem aos nomes dos campos existentes na tabela de nome &#8220;usuarios&#8221;. E os valores armazenados no <i>array</i> são os valores do registro para cada campo. Veja na prática, acrescentando as seguintes linhas ao <i>body</i> do documento:</p>
<p><!--more-->
<pre class="brush: vb;">
&lt;body&gt;
&lt;%=registros(&quot;codigo&quot;) &amp; &quot; &quot;%&gt;
&lt;%=registros(&quot;nome&quot;) &amp; &quot; &quot;%&gt;
&lt;%=registros(&quot;email&quot;) &amp; &quot; &quot;%&gt;
&lt;%=registros(&quot;datanasc&quot;)%&gt;
&lt;/body&gt;
</pre>
<p>O que fizemos foi escrever o conteúdo de cada um dos campos especificados. Perceba que os valores exibidos correspondem a apenas um registro. Na verdade, o primeiro registro da tabela. Podemos exibir os demais utilizando um método existente para o objeto &#8220;registros&#8221;: o <i>MoveNext</i>. Vejamos seu funcionamento:</p>
<pre class="brush: vb;">
&lt;body&gt;
&lt;%=registros(&quot;codigo&quot;) &amp; &quot; &quot;%&gt;
&lt;%=registros(&quot;nome&quot;) &amp; &quot; &quot;%&gt;
&lt;%=registros(&quot;email&quot;) &amp; &quot; &quot;%&gt;
&lt;%=registros(&quot;datanasc&quot;)%&gt;
&lt;% registros.MoveNext %&gt;
&lt;%=&quot;&lt;br /&gt;&quot;%&gt;
&lt;%=registros(&quot;codigo&quot;) &amp; &quot; &quot;%&gt;
&lt;%=registros(&quot;nome&quot;) &amp; &quot; &quot;%&gt;
&lt;%=registros(&quot;email&quot;) &amp; &quot; &quot;%&gt;
&lt;%=registros(&quot;datanasc&quot;)%&gt;
&lt;% registros.MoveNext %&gt;
&lt;%=&quot;&lt;br /&gt;&quot;%&gt;
&lt;%=registros(&quot;codigo&quot;) &amp; &quot; &quot;%&gt;
&lt;%=registros(&quot;nome&quot;) &amp; &quot; &quot;%&gt;
&lt;%=registros(&quot;email&quot;) &amp; &quot; &quot;%&gt;
&lt;%=registros(&quot;datanasc&quot;)%&gt;
&lt;/body&gt;
</pre>
<p>Perceba que a cada uso do MoveNext, passamos a trabalhar com o próximo registro. Logo, apesar de estarmos apenas repetindo os mesmos comandos, a cada repetição exibimos os valores de um registro diferente.</p>
<p>É claro que nem de longe este código está prático. Da forma como foi criado, seria necessário copiar e colar os blocos de código repetidos tantas vezes quantos fossem os registros &#8211; portanto o código poderia crescer indefinidamente. Bom, é para isso que servem as estruturas de repetição. Podemos repetir os blocos de código até que atinjamos o fim dos registros. Como isso é possível? Através da propriedade EOF, também presente no objeto &#8220;registros&#8221;. Esta é um propriedade booleana: é verdadeira quando se chega ao fim da tabela e falsa em caso contrário. Logo, o código final poderia ficar assim:</p>
<pre class="brush: vb;">
&lt;body&gt;
&lt;%
' Até chegarmos ao fim da tabela...
Do Until registros.EOF
' ...escreveremos os dados do registro atual
%&gt;
&lt;%=registros(&quot;codigo&quot;) &amp; &quot; &quot;%&gt;
&lt;%=registros(&quot;nome&quot;) &amp; &quot; &quot;%&gt;
&lt;%=registros(&quot;email&quot;) &amp; &quot; &quot;%&gt;
&lt;%=registros(&quot;datanasc&quot;)%&gt;
&lt;%=&quot;&lt;br /&gt;&quot;%&gt;
&lt;% registros.MoveNext %&gt;
&lt;% Loop %&gt;
&lt;/body&gt;
</pre>
<p>Exercício: organize os dados dos registros exibindo-os dentro de uma tabela (&#60;table&#62;). Dica: substitua os espaços em branco e a quebra de linha pelas tags <i>&#60;td&#62;</i> e <i>&#60;tr&#62;</i> (abra-as e feche-as corretamente).</p>
<p>Por hoje é só, pessoal. Em breve continuarei este artigo demonstrando como inserir novos registros em uma tabela.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Conectando-se a um banco de dados Access através do ASP - Parte 1]]></title>
<link>http://iranrodrigues.wordpress.com/2008/02/18/conectando-se-a-um-banco-de-dados-access-atraves-do-asp-parte-1/</link>
<pubDate>Mon, 18 Feb 2008 22:48:16 +0000</pubDate>
<dc:creator>Iran Rodrigues</dc:creator>
<guid>http://iranrodrigues.wordpress.com/2008/02/18/conectando-se-a-um-banco-de-dados-access-atraves-do-asp-parte-1/</guid>
<description><![CDATA[Aprenda a realizar as operações básicas envolvendo bancos de dados com o ASP. Ao pensarmos em sites ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><h3>Aprenda a realizar as operações básicas envolvendo bancos de dados com o ASP.</h3>
<p>Ao pensarmos em sites que acessam bancos de dados, a primeira coisa que vem à cabeça são grandes sites, como um site de comércio eletrônico, com cadastros de produtos, clientes, fornecedores e etc. Apesar destes grandes sites utilizarem (grandes) bancos de dados, existem muitos outros pequenos sites que também os utilizam (ou poderiam utilizá-los).</p>
<p>Hoje em dia, sites que acessam bancos de dados são cada vez mais comuns. Um exemplo: suponha um simples site institucional. Este site possui uma página descrevendo a empresa, seus serviços, um formulário de contato, etc. Para tanto, digamos que ao total existam cinco diferentes páginas. Até aí, tudo bem. Mas vamos além: imagine ainda que o responsável pelo conteúdo do site na empresa não entenda de HTML (que dirá de ASP). Como ele fará para atualizar informações em seu site sem precisar contatar um profissional? A resposta: atráves de um sistema de administração de conteúdo. O site poderia conter uma área, protegida por senha, onde a pessoa responsável possa alterar o conteúdo de cada uma das páginas, como por exemplo, atualizar um telefone, ou acrescentar uma informação, sem ver nenhuma tag HTML ou comando de ASP. Para que isso seja possível, tais informações (o conteúdo de cada página) devem estar em um banco de dados.</p>
<p><!--more-->O ASP permite trabalhar com qualquer banco de dados popular, como o SQL Server, Oracle, MySQL, PostgreSQL, Access, MSQL&#8230; peraí? Access? Isso mesmo!</p>
<p>O Access é conhecido por ser um banco de dados limitado, voltado ao uso doméstico ou em pequenas empresas; mas isso não impede de ser utilizado em um site. De fato, se o site não fizer operações complexas envolvendo o banco de dados e nem tiver muitos acessos simultâneos, é possível usar o Access normalmente. Se for necessário um banco robusto, é melhor esquecê-lo. <a href="http://databases.aspfaq.com/database/what-are-the-limitations-of-ms-access.html" title="Limitações do Access" target="_blank">Nesta página</a> (em inglês) vocês podem encontrar uma relação das limitações do Access como banco de dados para a web.</p>
<p>De qualquer forma, veremos o uso do Access apenas para fins didáticos, pois uma de suas vantagens é a simplicidade na criação de um banco de dados e a facilidade para carregá-lo para qualquer lugar, pois ocupa um único arquivo (de extensão .mdb).</p>
<p><b>Antes de qualquer coisa</b>, baixem o banco de dados usado como exemplo: <a href="http://arquivos.iranrodrigues.com/arquivos/SA110-06001/banco.mdb" title="Banco de dados de exemplo">aqui</a>.</p>
<p><b>Começando&#8230;</b></p>
<p>Assim como fizemos no módulo de PHP, qualquer tarefa envolvendo o uso de um banco de dados requer alguns comandos essenciais: a conexão com o banco e a definição da tabela a ser usada.</p>
<p>Para tanto, criem um novo arquivo ASP VBScript  no Dreamweaver e acrescentem as linhas a seguir (percebam que a primeira linha já existe no código da nova página):</p>
<pre class="brush: vb;">
&lt;%@LANGUAGE=&quot;VBSCRIPT&quot; CODEPAGE=&quot;1252&quot;%&gt;
&lt;%
set conexao = Server.CreateObject(&quot;ADODB.Connection&quot;)
conexao.Open &quot;Provider=Microsoft.Jet.OLEDB.4.0;DataSource=&quot;&amp;Server.MapPath(&quot;banco.mdb&quot;)&amp;&quot;;&quot;
Set registros = Server.CreateObject (&quot;ADODB.Recordset&quot;)
registros.Open &quot;usuarios&quot;,conexao,3,3
%&gt;
</pre>
<p>Complicado? Nem tanto. À primeira vista assusta, mas com o uso você decora&#8230;</p>
<p>Veja que uma palavra se repete: ADODB. &#8220;DB&#8221; sabemos que vem de &#8220;database&#8221; (banco de dados), já o ADO é uma tecnologia proprietária da Microsoft que provê uma interface para o acesso aos dados armazenados em um banco de dados. Ele é instalado junto com o IIS.</p>
<p>Voltando a analisar o código: a linha que inicia com &#8220;set conexao&#8221; cria uma instância chamada de &#8220;conexao&#8221; a partir do objeto &#8220;ADODB.Connection&#8221;. Lembram-se de que vimos por alto o uso do método CreateObject do objeto Server? Olha ele aí instanciando um objeto&#8230;</p>
<p>O objeto ADODB.Connection estabelece uma conexão a um banco de dados. Seu uso é fundamental para que realizemos qualquer operação com o banco.</p>
<p>Após a criação do objeto &#8220;conexao&#8221;, utilizamos o seu método &#8220;Open&#8221; para inicializar a conexão com o banco. Nesta etapa, qual é o banco de dados que iremos utilizar e onde ele se localiza. O parâmetro passado à função é chamado de string de conexão. No exemplo acima, a string de conexão contém o &#8220;provider&#8221; e o &#8220;data source&#8221; a serem usados. O primeiro é o provedor, que indica o mecanismo que lidará com o banco (este em questão é o provedor que lida com o Access e o Excel). O data source (fonte de dados) especifica o local do arquivo do banco de dados. O método &#8220;Server.MapPath&#8221; foi usado para obter o caminho completo do arquivo (que poderia ser, por exemplo, &#8220;C:\Inetpub\wwwroot\site\banco.mdb&#8221;).</p>
<p>Após o uso do método &#8220;Open&#8221; do objeto &#8220;conexao&#8221;, instanciamos um objeto a que chamamos &#8220;registros&#8221; (do tipo ADODB.Recordset). Este objeto armazenará os dados do banco, normalmente de uma tabela por vez.</p>
<p>O método &#8220;Open&#8221; para o objeto &#8220;registros&#8221; tem a função de associar o objeto a um conjunto de registros (ex.: uma tabela). No exemplo acima, &#8220;abrimos&#8221; a tabela chamada &#8220;usuarios&#8221; através da conexão definida no objeto &#8220;conexao&#8221;. O &#8220;3,3&#8243; no final indica o tipo de cursor e o modo de travamento. O primeiro, com valor &#8220;3&#8243;, indica que a movimentação por entre os registros será feita apenas para a frente, o que aumenta a performance. O segundo &#8220;3&#8243; indica que o registro ficará travado para não permitir alterações por outros usuários enquanto estiver sendo usado. Estes parâmetros são opcionais, podendo ser omitidos. Mais detalhes sobre o <a href="http://www.w3schools.com/ado/met_rs_open.asp#CursorTypeEnum" title="Tipos de cursor" target="_blank">tipo de cursor</a> e o <a href="http://www.w3schools.com/ado/met_rs_open.asp#LockTypeEnum" title="Modo de travamento">modo de travamento</a> no site da W3 Schools (em inglês).</p>
<p>Até aqui o que fizemos foi apenas nos conectar a um banco e selecionar uma tabela. Portanto, nenhuma informação do banco estará ainda visível. Em breve continuarei este artigo, colocando um exemplo prático, onde poderemos listar os registros já armazenados no banco. Até.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[O objeto Server]]></title>
<link>http://iranrodrigues.wordpress.com/2008/02/09/o-objeto-server/</link>
<pubDate>Sat, 09 Feb 2008 13:24:13 +0000</pubDate>
<dc:creator>Iran Rodrigues</dc:creator>
<guid>http://iranrodrigues.wordpress.com/2008/02/09/o-objeto-server/</guid>
<description><![CDATA[Continuando a sequência de artigos sobre os objetos do ASP, veremos aqui como utilizar o objeto Serv]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><h3>Continuando a sequência de artigos sobre os objetos do ASP, veremos aqui como utilizar o objeto Server.</h3>
<p>Olá. Agora que <strike>o ano começou</strike> o carnaval acabou, vou correr para atualizar o conteúdo das aulas &#8211; que estão quase todas atrasadas. Devido a este atraso, o conteúdo deste e dos próximos posts serão levemente resumidos (volto a lembrar que o objetivo é reforçar/relembrar o que foi visto em aula).</p>
<p>Continuando a falar dos objetos do ASP, chega a vez do Server. Este objeto serve basicamente para acessar funções gerais no servidor web. O Server possui uma propriedade e sete métodos, a saber:</p>
<ul>
<li>ScriptTimeout (propriedade)</li>
<li>CreateObject* (método)</li>
<li>Execute (método)</li>
<li>GetLastError** (método)</li>
<li>MapPath* (método)</li>
<li>HTMLEncode (método)</li>
<li>Transfer (método)</li>
<li>URLEncode (método)</li>
</ul>
<p><!--more-->* Seu uso será exemplificado em aulas posteriores;<br />
** Não será visto em aula.</p>
<p><b>ScriptTimeout</b></p>
<p>Propriedade que define o tempo máximo de espera para o processamento de um script no servidor. O valor padrão é 90 (segundos), o que quer dizer que uma página que contenha um código que leve a um looping infinito, por exemplo, será executada por no máximo 90 segundos, para então resultar em erro.</p>
<p>Setando um novo valor para ScriptTimeout:</p>
<pre class="brush: vb;">
Server.ScriptTimeout = 45
' Exibição do valor
Response.Write(Server.ScriptTimeout)
</pre>
<p><b>CreateObject</b></p>
<p>Instancia um objeto. Em outras palavras, cria um objeto do tipo especificado. Veremos mais detalhes ao trabalharmos com bancos de dados.</p>
<p><b>Execute</b></p>
<p>Executa um script contido em um arquivo ASP externo. Equivale ao <i>include</i> do PHP.</p>
<p>Exemplo:</p>
<p>arquivo1.asp</p>
<pre class="brush: vb;">
Response.Write(&quot;Comando 1 do arquivo1.asp&lt;br&gt;&quot;)
Server.Execute(&quot;arquivo2.asp&quot;)
Response.Write(&quot;Comando 2 do arquivo1.asp&lt;br&gt;&quot;)
</pre>
<p>arquivo2.asp</p>
<pre class="brush: vb;">
Response.Write(&quot;Comando 1 do arquivo2.asp&lt;br&gt;&quot;)
Response.Write(&quot;Comando 2 do arquivo2.asp&lt;br&gt;&quot;)
Response.Write(&quot;Comando 3 do arquivo2.asp&lt;br&gt;&quot;)
</pre>
<p>Resultado da execução do arquivo1.asp:</p>
<p>Comando 1 do arquivo1.asp<br />
Comando 1 do arquivo2.asp<br />
Comando 2 do arquivo2.asp<br />
Comando 3 do arquivo2.asp<br />
Comando 2 do arquivo1.asp</p>
<p>Percebam que após a execução dos comandos no arquivo2.asp, os comandos restantes do arquivo1.asp são executados.</p>
<p><b>GetLastError</b></p>
<p>Este método é usado na personalização de páginas que exibem mensagens de erro no servidor. Um exemplo no uso deste método pode ser encontrado <a href="http://www.bufaloinfo.com.br/Artigos/Artigo2712.asp" title="Controlando a ocorrência de erros em ASP - Dennes Torres" target="_blank">aqui</a> (em português).</p>
<p><b>MapPath</b></p>
<p>Obtém o caminho absoluto para um arquivo ou pasta no servidor a partir de seu caminho relativo. Utilizaremos este método quando trabalharmos com bancos de dados.</p>
<p><b>HTMLEncode</b></p>
<p>Este é um método bem util. Sua função é converter caracteres especiais contidos em uma string em seus respectivos &#8220;códigos&#8221; oriundos do HTML (HTMLEncode significa codificar em HTML).</p>
<p>Experimentem exibir o texto &#8220;&#60;br&#62;&#8221; numa página web. Se vocês digitarem no body, por exemplo, ao invés do texto &#8220;&#60;br&#62;&#8221; o que aparece é uma quebra de linha. Isso acontece porque o browser processa o texto &#8220;&#60;br&#62;&#8221; como um comando da linguagem HTML. Para simplesmente exibirmos como texto, precisamos substituir os &#8220;&#60;&#8221; e &#8220;&#62;&#8221; pelos seus respectivos códigos em HTML: &#8220;&#60;&#8221; e  &#8220;&#62;&#8221;, respectivamente. Então teríamos que escrever: &#60;br&#62;</p>
<p>Como ninguém costuma decorar esses códigos, e mesmo que decore, não quer perder tempo digitando-os, vamos utilizar o método HTMLEncode. Analisem o código fonte gerado pela execução do código abaixo e tirem suas conclusões:</p>
<pre class="brush: vb;">
'Sem HTMLEncode
Response.Write(&quot;O elemento do HTML que quebra linhas é o &lt;br&gt;&quot;)
'Com HTMLEncode
Response.Write(Server.HTMLEncode(&quot;O elemento do HTML que quebra linhas é o &lt;br&gt;&quot;))
</pre>
<p><b>Transfer</b></p>
<p>Faz quase o mesmo que o método Execute. A diferença é que o Transfer não inclui a página externa, mas sim redireciona a execução para ela. Ou seja, ao transferir a execução de uma página chamada arquivo1.asp para uma outra chamada arquivo2.asp, ao fim da execução desta última, o servidor não retorna para a primeira.</p>
<p>Observação: o objetivo deste método não é simplesmente redirecionar (como o Response.Redirect). O redirecionamento ocorre de forma transparente para o usuário &#8211; ele não sabe que está sendo redirecionado,  pois o browser não irá recarregar &#8211; e, principalmente, este redirecionamento conserva o estado atual do servidor. Assim, as variáveis definidas continuam existindo ao chegar na página de destino.</p>
<p>Exemplo (baseado no exemplo do Execute &#8211; vejam as diferenças no resultado):</p>
<p>arquivo1.asp</p>
<pre class="brush: vb;">
Response.Write(&quot;Comando 1 do arquivo1.asp&lt;br&gt;&quot;)
Server.Transfer(&quot;arquivo2.asp&quot;)
Response.Write(&quot;Comando 2 do arquivo1.asp&lt;br&gt;&quot;)
</pre>
<p>arquivo2.asp</p>
<pre class="brush: vb;">
Response.Write(&quot;Comando 1 do arquivo2.asp&lt;br&gt;&quot;)
Response.Write(&quot;Comando 2 do arquivo2.asp&lt;br&gt;&quot;)
Response.Write(&quot;Comando 3 do arquivo2.asp&lt;br&gt;&quot;)
</pre>
<p>Resultado da execução do arquivo1.asp:</p>
<p>Comando 1 do arquivo1.asp<br />
Comando 1 do arquivo2.asp<br />
Comando 2 do arquivo2.asp<br />
Comando 3 do arquivo2.asp</p>
<p>Qual a diferença? Ao terminar de executar os comandos do arquivo2.asp, ele não volta para o arquivo1.asp. A execução termina.</p>
<p><b>URLEncode</b></p>
<p>Mais uma função de codificação, como a HTMLEncode. A diferença é que o URLEncode codifica um texto para que ele possa ser inserido numa URL. Para ver um exemplo, acesse o <a href="http://www.google.com.br" title="Google (conhece?)" target="_blank">Google</a>, digite uma frase como: receita de suflê de abóbora (eu chutei essa receita, mas pelo jeito, ela existe de verdade). Ao pesquisar, não cliquem em nenhum resultado. Ao invés disso, observem a URL. Como o formulário de busca do Google é enviado via GET, as informações ficam expostas na URL. Fiz a pesquisa e a URL atual é: http://www.google.com.br/search?q=receita+de+sufl%C3%AA+de+ab%C3%B3bora&#38;ie=utf-8&#38;oe=utf-8&#38;rls=org.mozilla:pt-BR:official&#38;client=firefox-a</p>
<p>O texto que digitei fica depois do &#8220;?q=&#8221; e vai até antes do &#8220;&#38;ie=&#8221;, ou seja:</p>
<p>receita+de+sufl%C3%AA+de+ab%C3%B3bora</p>
<p>Portanto, a frase &#8220;receita de suflê de abóbora&#8221;, codificada na URL vira &#8220;receita+de+sufl%C3%AA+de+ab%C3%B3bora&#8221;. É fácil perceber que o que muda são os espaços (trocados por &#8220;+&#8221;) e as letras acentuadas (na verdade, os caracteres especiais em geral), que são trocadas por dois caracteres entre porcentagens (exemplo: %C3%).</p>
<p>Qual a utilidade? Inserir informações diretamente na URL. Por exemplo, acessando este endereço&#8230;</p>
<p>http://www.google.com.br/search?q=dicion%C3%A1rio+bil%C3%ADng%C3%BCe+portugu%C3%AAs+ingl%C3%AAs</p>
<p>&#8230;vocês já caem automaticamente na página de resultados do Google para &#8220;dicionário bilíngüe português inglês&#8221;. Para gerar um link destes automaticamente é preciso usar este método.</p>
<p>Exemplo:</p>
<pre class="brush: vb;">
Response.Write(&quot;Pesquise por 'pôneis siamêses' clicando &lt;a href='&quot;)
Response.Write(&quot;http://www.google.com.br/search?q=&quot; &amp; URLEncode(&quot;pôneis siamêses&quot;))
Response.Write(&quot;'&gt;aqui&lt;/a&gt;&quot;)
</pre>
<p>Um outro exemplo de utilização é criar um formulário de busca que encaminhe para a página de resultados do Google para o termo pesquisado.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[O Objeto Request]]></title>
<link>http://iranrodrigues.wordpress.com/2008/01/14/o-objeto-request/</link>
<pubDate>Mon, 14 Jan 2008 22:45:54 +0000</pubDate>
<dc:creator>Iran Rodrigues</dc:creator>
<guid>http://iranrodrigues.wordpress.com/2008/01/14/o-objeto-request/</guid>
<description><![CDATA[Continuando a série de posts sobre os objetos do ASP, veremos a estrutura do objeto Request. O objet]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><h3>Continuando a série de posts sobre os objetos do ASP, veremos a estrutura do objeto <i>Request</i>.</h3>
<p>O objeto <i>Request </i>tem por função acessar as requisições enviadas pelo cliente para o servidor.</p>
<p>Embora este objeto também possua propriedades e métodos, que podem ser vistos <a href="http://www.w3schools.com/asp/asp_ref_request.asp" target="_blank">aqui</a> (em inglês), o foco deste artigo será o que foi visto em aula, que compreende apenas as coleções do objeto <i>Request</i>.</p>
<p>As coleções são:</p>
<p><!--more--></p>
<ul>
<li>ClientCertificate</li>
<li>Cookies</li>
<li>Form</li>
<li>QueryString</li>
<li>ServerVariables</li>
</ul>
<p><b>ClientCertificate</b></p>
<p>Esta coleção contém chaves e valores correspondentes a um certificado de segurança que o browser do cliente envia para o servidor. Somente é utilizado em sites que utilizam o protocolo HTTPS (HTTP Seguro), como sites de comércio eletrônico e bancos.</p>
<p>Em razão de sua utilização específica para HTTPS não executaremos o exemplo abaixo, envolvendo esta coleção, que permanecerá apenas na teoria.</p>
<pre class="brush: vb;">
&lt;%
' Retorna a data inicial da validade do certificado:
Response.Write Request.ClientCertificate(&quot;validfrom&quot;)
%&gt;
</pre>
<p><b>Cookies</b></p>
<p>O Request.Cookies é uma coleção que permite recuperar informações sobre o usuário e sua navegação que já tenham sido armazenadas através do Response.Cookie (reveja <a href="http://iranrodrigues.wordpress.com/2007/12/13/o-objeto-response/">aqui</a>).</p>
<p>Por exemplo, para recuperar o login de um usuário que tenha sido gravado em um cookie de nome &#8220;login&#8221;:</p>
<pre class="brush: vb;">
Response.Write(&quot;Usuário: &quot; &amp; Request.Cookies(&quot;login&quot;))
</pre>
<p><b>Form</b></p>
<p>Esta é uma das coleções do Request mais úteis. Permite obter os dados que tenham sido enviados por um formulário utilizando o método <i>post</i>.</p>
<p>Por exemplo, para obter o nome de um usuário que o preencheu em um campo chamado &#8220;nome&#8221; de um formulário:</p>
<pre class="brush: vb;">
Response.Write(&quot;O nome informado foi: &quot; &amp; Request.Form(&quot;nome&quot;))
</pre>
<p><b>QueryString</b></p>
<p>A coleção QueryString tem a mesma aplicação da Form. A diferença é que a QueryString aplica-se a dados submetidos via <i>get</i> ou variáveis inseridas diretamente na URL.</p>
<p>Exemplo:</p>
<p>Imagine um link que aponte para &#8220;excluir.asp?codigo=20&#8243;. O link indica que a página é &#8220;excluir.asp&#8221; e inclui ainda uma variável chamada &#8220;codigo&#8221; com valor 20. Para recuperarmos este valor no ASP, utilizamos:</p>
<pre class="brush: vb;">
Response.Write(&quot;Excluindo registro de código &quot; &amp; Request.QueryString(&quot;codigo&quot;) &amp; &quot;...&quot;)
</pre>
<p><b>ServerVariables</b></p>
<p>Esta coleção guarda diversas informações sobre o cliente e o servidor. Para acessarmos tais informações, utilizamos:</p>
<pre class="brush: vb;">
Request.ServerVariables(&quot;variavel&quot;)
</pre>
<p>Onde em &#8220;variavel&#8221; colocamos uma das variáveis predefinidas para esta coleção. Uma lista das variáveis pode ser encontrada no livro ou <a href="http://www.w3schools.com/asp/coll_servervariables.asp" target="_blank">aqui</a> (em inglês).</p>
<p>Alguns exemplos:</p>
<pre class="brush: vb;">
' Exibindo o IP do cliente:
Response.Write(Request.ServerVariables(&quot;REMOTE_ADDR&quot;))
' Exibindo o IP do servidor:
Response.Write(Request.ServerVariables(&quot;LOCAL_ADDR&quot;))
' Exibindo a página de onde o usuário veio:
Response.Write(Request.ServerVariables(&quot;HTTP_REFERER&quot;))
' Exibindo informações sobre o browser do usuário:
Response.Write(Request.ServerVariables(&quot;HTTP_USER_AGENT&quot;))
</pre>
<p>No próximo post, veremos o objeto <i>Server</i>.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[O objeto Response]]></title>
<link>http://iranrodrigues.wordpress.com/2007/12/13/o-objeto-response/</link>
<pubDate>Thu, 13 Dec 2007 23:07:03 +0000</pubDate>
<dc:creator>Iran Rodrigues</dc:creator>
<guid>http://iranrodrigues.wordpress.com/2007/12/13/o-objeto-response/</guid>
<description><![CDATA[A partir deste post explicarei resumidamente como utilizar os principais objetos do ASP. Iniciaremos]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><h3>A partir deste post explicarei resumidamente como utilizar os principais objetos do ASP. Iniciaremos com o objeto Response.</h3>
<p>O <i>Response </i>é o primeiro objeto do ASP que utilizamos ao começar a programar. Ao utilizarmos o comando <i>Response.Write</i> para escrever algo, estamos na verdade fazendo uso do método <i>Write </i>do objeto <i>Response</i>.</p>
<p>O objeto Response, no entanto, tem outros usos. Em outras palavras, este objeto possui outros métodos, além de algumas propriedades e uma coleção. Para quem não lembra, um método é como uma função, enquanto que uma propriedade assemelha-se a uma variável. A coleção é uma espécie de array.</p>
<p>Não vamos estudar todos os métodos e propriedades, apenas os principais. Quem desejar conhecer o objeto mais a fundo, comece <a href="http://www.w3schools.com/asp/asp_ref_response.asp" target="_blank">clicando aqui</a> (em inglês).</p>
<p>A função geral do objeto <i>Response </i>é acessar informações que são enviadas do servidor para o browser do cliente.</p>
<p><b>Response.Write</b></p>
<p>O Write é o já famoso método que escreve texto (podendo incluir código HTML e/ou Javascript) na página gerada. Equivale ao <i>echo </i>do PHP ou ao <i>document.write</i> do Javascript.</p>
<p>Ex.:</p>
<p><!--more--></p>
<pre class="brush: vb;">
Response.Write(&quot;Linha de cima...&lt;br&gt;&quot;)
Response.Write(&quot;Linha de baixo!&quot;)
Dim numero
numero = 15
Response.Write(numero)
</pre>
<p><b>Response.Redirect</b></p>
<p>O Redirect é um método que permite encaminhar o usuário para uma URL. Equivale ao <i>header(&#8220;Location: &#8220;)</i> do PHP e ao<i> location.href </i>do Javascript (embora esta última seja uma propriedade, não um método).</p>
<p>Ex.:</p>
<pre class="brush: vb;">
Dim opcao
opcao =3
' A depender do valor da variável &quot;opcao&quot; o usuário vai para uma página diferente
Select Case opcao
Case 1
Response.Redirect(&quot;http://www.google.com.br&quot;)
Case 2
Response.Redirect(&quot;http://www.microcamp.com.br&quot;)
Case 3
Response.Redirect(&quot;http://www.iranrodrigues.com&quot;)
End Select
</pre>
<p><b>Response.Buffer</b></p>
<p>O <i>Buffer </i>é uma propriedade lógica &#8211; seu valor pode ser <i>True </i>ou <i>False</i>. Sua função é determinar se a saída produzida pelo processamento do script no servidor será enviada aos poucos (quando o valor é <i>False</i>) ou será enviada somente ao término de todo o processamento (quando o valor é <i>True</i>).</p>
<p>O valor padrão desta propriedade é <i>False</i>. Ou seja, se não a alterarmos, o comportamento padrão do servidor será enviar o fluxo HTML à medida em que o código é processado.</p>
<p><b>Response.Cookies</b></p>
<p>O &#8220;Cookies&#8221; é uma coleção que permite a criação (e alteração) de cookies na máquina do cliente. Os cookies servem para armazenar informações sobre a visita do usuário a uma página, como por exemplo o nome de usuário utilizado para efetuar login no site.</p>
<p>Para criarmos um cookie chamado &#8220;usuario&#8221; com o valor &#8220;maria&#8221;, utilizamos:</p>
<pre class="brush: vb;">
Response.Cookies(&quot;usuario&quot;)  = &quot;maria&quot;
</pre>
<p>Além de simplesmente definir um valor para o cookie, podemos alterar algumas propriedades extras:</p>
<pre class="brush: vb;">
Response.Cookies(&quot;usuario&quot;)  = &quot;maria&quot;
' Definindo uma data de expiração (daqui a 30 dias). Após essa data, o cookie não é mais utilizado.
Response.Cookies(&quot;usuario&quot;).Expires = Now + 30
' Definindo o domínio que pode acessar o cookie:
Response.Cookies(&quot;usuario&quot;).Domain = &quot;microcamp.com.br&quot;
' Definindo o caminho das páginas que podem acessar o cookie:
Response.Cookies(&quot;usuario&quot;).Path = &quot;/www/home/pagina&quot;
' Definindo se o cookie é seguro:
Response.Cookies(&quot;usuario&quot;).Secure = True
</pre>
<p>Para acessar as informações gravadas em um cookie, teremos de utilizar um outro objeto &#8211; o <i>Request</i>. Falarei sobre ele no próximo post.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Subrotinas e funções em VBScript]]></title>
<link>http://iranrodrigues.wordpress.com/2007/12/04/subrotinas-e-funcoes-em-vbscript/</link>
<pubDate>Tue, 04 Dec 2007 21:40:07 +0000</pubDate>
<dc:creator>Iran Rodrigues</dc:creator>
<guid>http://iranrodrigues.wordpress.com/2007/12/04/subrotinas-e-funcoes-em-vbscript/</guid>
<description><![CDATA[O VBScript possibilita a segmentação do código &#8211; tornando-o mais objetivo e reutilizável ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><h3>O VBScript possibilita a segmentação do código &#8211; tornando-o mais objetivo e reutilizável &#8211; com a criação de subrotinas e funções. Veja como utilizá-las e quais suas diferenças.</h3>
<p>Nesta aula trabalhamos com subrotinas e funções no VBScript. O conceito de função na programação já foi visto em aulas anteriores. Uma explicação breve pode ser vista <a href="http://iranrodrigues.wordpress.com/2007/11/06/criando-funcoes-em-javascript/">nesta aula</a>, sobre funções no Javascript.</p>
<p>A grande diferença entre utilizar funções no Javascript, no PHP ou no VBScript é que, neste último, existe dois tipos de &#8220;função&#8221;: a função propriamente dita e a subrotina. Na verdade, ambas só diferem em uma questão: a função retorna um valor, enquanto que a subrotina não retorna nada.</p>
<p>Para ficar mais claro, vamos a um exemplo:</p>
<p><!--more--></p>
<pre class="brush: vb;">
&lt;%
' declaração de uma subrotina chamada mostraData
Sub mostraData ()
Dim hoje, dia, mes, ano
' array meses
Dim meses(11)
meses(0) = &quot;janeiro&quot;
meses(1) = &quot;fevereiro&quot;
meses(2) = &quot;março&quot;
meses(3) = &quot;abril&quot;
meses(4) = &quot;maio&quot;
meses(5) = &quot;junho&quot;
meses(6) = &quot;julho&quot;
meses(7) = &quot;agosto&quot;
meses(8) = &quot;setembro&quot;
meses(9) = &quot;outubro&quot;
meses(10) = &quot;novembro&quot;
meses(11) = &quot;dezembro&quot;
' obtém data atual
hoje = Date
' extrai o dia da data
dia = Day(hoje)
' extrai o mês da data
mes = Month(hoje)
' extrai o ano da data
ano = Year(hoje)
' exibe a data completa
Response.Write(dia &amp; &quot; de &quot; &amp; meses(mes-1) &amp; &quot; de &quot; &amp; ano)
' fim da subrotina
End Sub
</pre>
<p>Ao executar o código acima, vocês perceberão que nada acontece. Não há nada de errado. Apenas declaramos uma subrotina, mas não a utilizamos. Para utilizá-la, basta o seguinte:</p>
<pre class="brush: vb;">
' chamada à função
mostraData
' ou
Call mostraData
' com ou sem parênteses
mostraData()
Call mostraData()
</pre>
<p>Utilizamos quatro chamadas à função só para que ficasse claro que poderíamos fazê-lo de várias formas diferentes. Com ou sem a palavra &#8220;Call&#8221; e com ou sem parênteses.</p>
<p>Após a execução é possível compreender melhor o código da subrotina. O que ela faz é obter a data atual, extrair algumas informações desta data e exibí-la de uma forma específica. Após seu processamento, nenhuma informação produzida na subrotina é utilizada posteriormente no script, já que subrotinas não retornam valores.</p>
<p>Vamos conferir outro exemplo, desta vez utilizando parâmetros:</p>
<pre class="brush: vb;">
&lt;%
Sub fatorial(numero)
Dim i, mult
mult = numero
For i = numero-1 To 1 Step -1
mult = mult * i
Next
Response.Write(mult)
End Sub
</pre>
<p>O parâmetro em questão é o que está entre os parênteses: o &#8220;numero&#8221;. Com a utilização de parâmetros (ou argumentos) é possível introduzir valores na subrotina ou função. No exemplo acima, a subrotina exibe o fatorial de um valor especificado. Como especificar esse valor? Vejamos:</p>
<pre class="brush: vb;">
' chamada à subrotina fatorial
Call fatorial(5)
</pre>
<p>O valor fornecido (5) entra na subrotina como sendo o valor para a variável de nome &#8220;numero&#8221;. Ou seja, os cálculos envolvendo a variável &#8220;numero&#8221; tomam por seu valor o parâmetro passado na chamada da subrotina. Desta forma podemos exibir o valor do fatorial de qualquer número, basta especificá-lo como parâmetro.  Exemplos:</p>
<pre class="brush: vb;">
Call fatorial(9)
Call fatorial(8)
Call fatorial(7)
Call fatorial(6)
</pre>
<p>E se desejarmos fazer algo com o valor do fatorial, como armazená-lo em uma variável ou inserí-lo em um cálculo matemático? Isso só é possível se utilizarmos funções ao invés de subrotinas. Vejamos:</p>
<pre class="brush: vb;">
Function fatorial2(numero)
Dim i, mult
mult = numero
For i = valor-1 To 1 Step -1
mult = mult * i
Next
fatorial2 = mult
End Function
</pre>
<p>A declaração de uma função é bem similar à declaração de uma subrotina. A diferença é que em algum ponto da função é necessário atribuir um valor à função. Neste exemplo, isto acontece ao colocarmos &#8220;fatorial2 = mult&#8221;. Quando atribuímos um valor à função, estamos na verdade retornando um valor. Ou seja, é como se a função possuísse um valor, semelhante a uma variável.</p>
<p>Vejam também que não mostramos qual o resultado do fatorial. Não há nenhum <i>Response.Write </i>dentro da função. Na verdade, as funções tendem a ser tão genéricas quanto possível. Não exibindo o valor durante o processamento, a função permite que o façamos apenas quando for necessário (e se realmente for). Em uma determinada situação, poderemos exibir o resultado imediatamente, em outra, talvez não seja interessante exibí-lo. No exemplo acima, para mostrarmos esse valor ou armazenarmos em uma variável faríamos o seguinte:</p>
<pre class="brush: vb;">
' Chamando função
Dim valorFat
' Armazenando seu valor de retorno em uma variável
valorFat = fatorial2(4)
' Exibindo seu valor de retorno
Response.Write(valorFat)
' Inserindo a função dentro de uma expressão matemática e exibindo o resultado
Response.Write(fatorial2(5) + fatorial2(6))
%&gt;
</pre>
<p>Dúvidas? Comentem&#8230;</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Estruturas condicionais em VBScript]]></title>
<link>http://iranrodrigues.wordpress.com/2007/11/27/estruturas-condicionais-em-vbscript/</link>
<pubDate>Tue, 27 Nov 2007 23:24:05 +0000</pubDate>
<dc:creator>Iran Rodrigues</dc:creator>
<guid>http://iranrodrigues.wordpress.com/2007/11/27/estruturas-condicionais-em-vbscript/</guid>
<description><![CDATA[Veja como utilizar no VBScript as estruturas fundamentais de qualquer linguagem de programação: as e]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><h3>Veja como utilizar no VBScript as estruturas fundamentais de qualquer linguagem de programação: as estruturas condicionais.</h3>
<p>As estruturas condicionais são conhecidas também como estruturas de decisão ou de seleção e, de forma geral, são uma das estruturas mais básicas de uma linguagem de programação. Caracterizam-se por permitir a execução de determinados códigos de programação dependendo da veracidade de uma condição.</p>
<p>O VBScript, assim como o PHP e o Javascript, possui estruturas do tipo &#8220;Se&#8221; e do tipo &#8220;Faça caso&#8221;, sendo o primeiro tipo recomendado para comparações únicas e o segundo para comparações seqüenciais envolvendo uma mesma variável ou valor.</p>
<p>Vamos a um exemplo simples: queremos exibir uma mensagem informando se um número armazenado em uma variável é par ou ímpar. Para tal, basta uma única comparação: é só compararmos o resto da divisão do número dado por 2. Se esse resto for zero, o número é par. Senão, é ímpar.</p>
<p><!--more--></p>
<pre class="brush: vb;">
Dim a
a = 13
' Se o resto da divisão de &quot;a&quot; por 2 for zero, então...
If (a mod 2 = 0) Then
Response.Write(a &amp; &quot; é par!&quot;)
End If
</pre>
<p>Simples, não é mesmo? Tem duas coisas que diferem este &#8220;if&#8221; do &#8220;if&#8221; do PHP ou Javascript. A primeira é a palavra <i>Then</i>, que significa &#8220;então&#8221;. Não usamos nada parecido no PHP ou Javascript, mas quem programa em Pascal ou Delphi, vai achar o comando familiar. A segunda é a expressão <i>End If</i>, que finaliza o <i>If</i>. Em outras palavras, serve para delimitar o término das instruções que serão executadas a depender da condição. Lembrem-se de que no PHP e no Javascript utilizávamos as chaves com o mesmo objetivo.</p>
<p>Analisando o exemplo anterior, podemos perceber que não acontecerá nada ao ser executado. Isto é porque determinamos um comando a ser executado apenas para quando a condição seja verdadeira. Como o valor da variável é ímpar, nada acontece. Para tanto, utilizaremos o bom e velho <i>Else</i> (senão).</p>
<pre class="brush: vb;">
Dim a
a = 13
' Se o resto da divisão de &quot;a&quot; por 2 for zero, então...
If (a mod 2 = 0) Then
Response.Write(a &amp; &quot; é par!&quot;)
' Senão...
Else
Response.Write(a &amp; &quot; é ímpar!&quot;)
End If
</pre>
<p>Pronto. Problema resolvido. O código abaixo mostra, para todos os números de 1 a 100, quais são pares e quais são ímpares:</p>
<pre class="brush: vb;">
&lt;%
Dim valor
For valor = 1 to 100
' Se o resto da divisão de &quot;valor&quot; por 2 for 0, então...
If (valor mod 2 = 0) Then
Response.Write(valor &amp; &quot; é par!&lt;br&gt;&quot;)
' Senão...
Else
Response.Write(valor &amp; &quot; é impar!&lt;br&gt;&quot;)
' Fim do &lt;em&gt;If&lt;/em&gt;
End If
' Fim do &lt;em&gt;For&lt;/em&gt;
Next
%&gt;
</pre>
<p>Para um If mais complexo, utilizando mais de uma condição, é só utilizar os operadores relacionais, vistos <a href="http://iranrodrigues.wordpress.com/2007/11/06/operadores-do-vbscript-logicos-e-de-comparacao/">nesta aula</a>, além de utilizar adequadamente os parênteses. Exemplo:</p>
<pre class="brush: vb;">
Dim dia
' A função Date retorna a data atual
dia = Date
' A função WeekDay informa o dia da semana de uma data
' Se hoje for terça ou quinta...
If ((WeekDay(dia)=3) Or (WeekDay(dia)=5)) Then
Response.Write(&quot;Hoje teremos aula!&quot;)
End If
</pre>
<p>Para múltiplas comparações envolvendo uma mesma variável, torna-se mais interessante utilizar o comando <i>Select</i>. Confiram o exemplo abaixo:</p>
<pre class="brush: vb;">
Dim hoje, diaSemana
hoje = Date
diaSemana = WeekDay(hoje)
' A variável a ser comparada é a &quot;diaSemana&quot;
Select Case diaSemana
' Caso o valor dela seja 1...
Case 1
Response.Write(&quot;Hoje é domingo&quot;)
' Caso o valor dela seja 2...
Case 2
Response.Write(&quot;Hoje é segunda&quot;)
Case 3
Response.Write(&quot;Hoje é terça&quot;)
Case 4
Response.Write(&quot;Hoje é quarta&quot;)
Case 5
Response.Write(&quot;Hoje é quinta&quot;)
Case 6
Response.Write(&quot;Hoje é sexta&quot;)
' Para outro caso não listado acima...
Case Else
Response.Write(&quot;Hoje é sábado&quot;)
End Select
</pre>
<p>Esta é a estrutura padrão do Select. Ele realiza várias comparações a partir de uma mesma variável (ou valor), executando as instruções correspondentes assim que uma comparação é bem-sucedida. Percebam ainda a existencia de um &#8220;Case Else&#8221;. Seu uso é opcional, servindo para definir instruções que serão executadas apenas quando nenhuma condição anterior tiver sido verdadeira.</p>
<p>Bom, é isso. Quem quiser ler mais, pode ir <a href="http://www.w3schools.com/vbscript/vbscript_conditionals.asp" target="_blank">neste link</a> (em inglês).</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Estrutura de repetição "Do... Loop"]]></title>
<link>http://iranrodrigues.wordpress.com/2007/11/21/estrutura-de-repeticao-do-loop/</link>
<pubDate>Wed, 21 Nov 2007 23:00:08 +0000</pubDate>
<dc:creator>Iran Rodrigues</dc:creator>
<guid>http://iranrodrigues.wordpress.com/2007/11/21/estrutura-de-repeticao-do-loop/</guid>
<description><![CDATA[O &#8220;Do&#8230; Loop&#8221; é a estrutura de repetição mais versátil do VBScript, podendo ser uti]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><h3>O &#8220;Do&#8230; Loop&#8221; é a estrutura de repetição mais versátil do VBScript, podendo ser utilizada em diversas situações.</h3>
<p>Além do <i>for</i> e do <i>for each</i>, ambos vistos na <a href="http://iranrodrigues.wordpress.com/2007/11/10/utilizando-arrays-no-vbscript/">aula passada</a>, o VBScript dispõe de mais algumas estruturas de repetição, das quais destaco o &#8220;Do&#8230; Loop&#8221;.</p>
<p>Utilizamos o &#8220;Do&#8230; Loop&#8221; quando pretendemos repetir uma ou mais instruções por um número indeterminado de vezes, ou seja, enquanto no <i>for</i> é necessário especificar quantas repetições queremos, no &#8220;Do&#8230; Loop&#8221; o que fazemos é estabelecer uma condição que determina quando a repetição irá parar, não importando o número de repetições.</p>
<p><!--more--></p>
<p>O &#8220;Do&#8230; Loop&#8221;, na verdade, pode ser considerado não apenas uma, mas quatro estruturas diferentes. Ele pode ser utilizado para repetir algo enquanto uma condição for verdadeira (<i>While</i>) ou repetir algo até que uma condição seja verdadeira (<i>Until</i>). Para qualquer uma destas duas possibilidades, é possível comparar primeiro e então executar ou não as instruções (dependendo da condição) ou executar primeiro para depois comparar (e aí, repetir ou não, a depender da condição).</p>
<p>Vamos a exemplos práticos. O primeiro é um script que mostra o valor da variável &#8220;a&#8221; (inicialmente zero) e incrementa seu valor. Mostra o novo valor e incrementa novamente e assim por diante, enquanto o valor de &#8220;a&#8221; permanecer menor que 10.</p>
<pre class="brush: vb;">
Dim a
a = 0
' Faça enquanto &quot;a&quot; for menor que 10
Do While (a&lt;10)
Response.Write(a &amp; &quot;&lt;br&gt;&quot;)
a = a + 1
' Volta ao &quot;Do&quot;
Loop
Response.Write(&quot;Fim 'Do While... Loop'&lt;br&gt;&quot;)
</pre>
<p>O &#8220;Do While&#8221; indica que a condição é testada primeiro, para que as instruções sejam ou não executadas. Se inicializássemos &#8220;a&#8221; com o valor 10, a condição &#8220;a&#60;10&#8243; seria falsa. Portanto, as instruções subseqüentes não seriam executadas, e o programa continuaria a partir da instrução <i>Loop</i>, que determina o fim do &#8220;Do While&#8221;.</p>
<p>O exemplo a seguir é similar, mas ilustra o uso do <i>Until</i>, fazendo com que as instruções sejam executadas até que a condição seja verdadeira. Logo, inicialmente esta deve ser falsa, senão nenhuma execução ocorreria. Inicialize &#8220;a&#8221; com o valor 10 e comprove.</p>
<pre class="brush: vb;">
a = 0
' Faça até que &quot;a&quot; seja igual a 10
Do Until (a=10)
Response.Write(a &amp; &quot;&lt;br&gt;&quot;)
a = a + 1
' Volta ao &quot;Do&quot;
Loop
Response.Write(&quot;Fim 'Do Until... Loop'&lt;br&gt;&quot;)
</pre>
<p>O próximo exemplo ilustra o uso do <i>While</i> após o <i>Loop</i>. Na prática, isso faz com que as instruções sejam executadas para, em seguida, a condição ser testada. Veja que a condição de repetição é &#8220;a&#62;10&#8243;. &#8220;a&#8221; inicialmente vale 0, mas como a condição é testada só no final, o valor de &#8220;a&#8221; é mostrado, a variável é incrementada e, finalmente, a condição resulta em falso, de forma que nenhuma repetição acontece. Tente consertar o script para que ele exiba os números de 0 a 9.</p>
<pre class="brush: vb;">
a = 0
' Faça...
Do
Response.Write(a &amp; &quot;&lt;br&gt;&quot;)
a = a + 1
' Enquanto &quot;a&quot; for maior que 10, volte ao &quot;Do&quot;
Loop While (a&gt;10)
Response.Write(&quot;Fim 'Do... Loop While'&lt;br&gt;&quot;)
</pre>
<p>Finalmente, o próximo exemplo mostra o uso do <i>Until</i> após o <i>Loop</i>. Da mesma forma que no exemplo anterior, a condição é testada após a execução do código dentro do &#8220;Do&#8221;.</p>
<pre class="brush: vb;">
a = 0
' Faça...
Do
Response.Write(a &amp; &quot;&lt;br&gt;&quot;)
a = a + 1
' Até que &quot;a&quot; seja maior que 10, volte ao &quot;Do&quot;
Loop Until (a&gt;10)
Response.Write(&quot;Fim 'Do... Loop Until'&lt;br&gt;&quot;)
</pre>
<p>O exemplo a seguir, o último de hoje, ilustra o uso do &#8220;Do&#8230; Loop Until&#8221; para percorrer o array chamado &#8220;modulos&#8221; em busca do valor &#8220;ASP&#8221;. Ele compara o valor de cada um dos elementos do array, parando apenas quando encontra o elemento de valor &#8220;ASP&#8221;. Perceba que, da forma que foi construído, não importa a localização do valor &#8220;ASP&#8221; no array, ele sempre será encontrado.</p>
<pre class="brush: vb;">
' Declaração do array
Dim modulos(5)
' Inicialização
modulos(0) = &quot;Javascript&quot;
modulos(1) = &quot;PHP/MySQL&quot;
modulos(2) = &quot;ASP&quot;
modulos(3) = &quot;Flash&quot;
modulos(4) = &quot;Projeto&quot;
' Declaração da variável do índice
Dim i
i = 0
' Faça...
Do
' Mostra o elemento de índice &quot;i&quot;
Response.Write(modulos(i) &amp; &quot;&lt;br&gt;&quot;)
' Incremento do índice
i = i + 1
Loop Until (modulos(i-1) = &quot;ASP&quot;)
</pre>
<p>Como exercício, modifique o código acima, trocando o &#8220;Do&#8230; Loop Until&#8221; por &#8220;Do While&#8230; Loop&#8221;.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Exercício - Arrays (valendo ponto)]]></title>
<link>http://iranrodrigues.wordpress.com/2007/11/15/exercicio-arrays-valendo-ponto/</link>
<pubDate>Fri, 16 Nov 2007 01:54:27 +0000</pubDate>
<dc:creator>Iran Rodrigues</dc:creator>
<guid>http://iranrodrigues.wordpress.com/2007/11/15/exercicio-arrays-valendo-ponto/</guid>
<description><![CDATA[Conforme prometido, aqui vai um exercício valendo um ponto para a nota de ASP. Enviem todo o codigo ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Conforme prometido, aqui vai um exercício valendo um ponto para a nota de ASP. Enviem todo o codigo produzido para meu e-mail.</p>
<ol>
<li>Crie um array unidimensional com 50 elementos;</li>
<li>Insira valores numéricos em cada uma de suas posições;</li>
<li>Exiba todos os valores armazenados no array;</li>
<li>Informe a soma de todos os elementos;</li>
<li>Informe a média dos mesmos;</li>
<li>Informe a mesma média, mas arrendondando-a para um inteiro;</li>
<li>Transfira todos os elementos do array para um outro array, invertendo as posições (ex.: o último elemento do array original vai para a primeira posição do novo array, o penúltimo para a segunda, etc.).</li>
</ol>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Utilizando arrays no VBScript]]></title>
<link>http://iranrodrigues.wordpress.com/2007/11/10/utilizando-arrays-no-vbscript/</link>
<pubDate>Sat, 10 Nov 2007 16:31:26 +0000</pubDate>
<dc:creator>Iran Rodrigues</dc:creator>
<guid>http://iranrodrigues.wordpress.com/2007/11/10/utilizando-arrays-no-vbscript/</guid>
<description><![CDATA[Utilizar arrays no VBScript é uma tarefa simples, mas que pode confundir quem está acostumado com Ja]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><h3>Utilizar arrays no VBScript é uma tarefa simples, mas que pode confundir quem está acostumado com Javascript ou PHP.</h3>
<p>Atualizado em: <strong>15/11/2007</strong>.</p>
<p>Arrays, matrizes ou vetores são estruturas de dados capazes de armazenar grupos de elementos que são acessados através de um índice.</p>
<p>No VBScript, ao contrário das variáveis comuns, o array precisa ser declararado explicitamente, da seguinte forma:</p>
<pre class="brush: vb;">
'declarando array com seis elementos
Dim meuArray(5)
</pre>
<p>Perceberam algo de estranho no comentário do código acima? Como o array tem seis elementos se o número entre parênteses é &#8220;5&#8243;? A resposta é: o número entre parênteses indica o último índice utilizável do array. Assim como no Javascript, os arrays no VBScript começam sempre pelo índice zero. E de zero a cinco, existem seis índices disponíveis.</p>
<p><!--more--></p>
<p>Uma característica dos arrays no VBScript que os tornam ligeiramente diferentes dos arrays das outras linguagens estudadas é o uso dos parênteses para especificar o índice. No Javascript e no PHP, sempre especificamos o índice dentro de colchetes.</p>
<p>A seguir, um exemplo do uso dos arrays:</p>
<pre class="brush: vb;">
'declarando array com quatro elementos
Dim cores(3)
'inicializando o array
cores(0) = &quot;azul&quot;
cores(1) = &quot;vermelho&quot;
cores(2) = &quot;amarelo&quot;
cores(3) = &quot;verde&quot;
'exibindo os valores armazenados
Response.Write(&quot;Elemento 0: &quot; &amp; cores(0) &amp; &quot;&lt;br&gt;&quot;)
Response.Write(&quot;Elemento 1: &quot; &amp; cores(1) &amp; &quot;&lt;br&gt;&quot;)
Response.Write(&quot;Elemento 2: &quot; &amp; cores(2) &amp; &quot;&lt;br&gt;&quot;)
Response.Write(&quot;Elemento 3: &quot; &amp; cores(3) &amp; &quot;&lt;br&gt;&quot;)
</pre>
<p>Experimentem agora inicializar e exibir o elemento da posição nº. 4 do array &#8220;cores&#8221;:</p>
<pre class="brush: vb;">
'continuando o código anterior...
cores(4) = &quot;branco&quot;
Response.Write(&quot;Elemento 4: &quot; &amp; cores(4) &amp; &quot;&lt;br&gt;&quot;)
</pre>
<p>Executando o código acima, podemos perceber que ele <strike>mostra o branco</strike> gera uma mensagem de erro! Mas não há o que temer. O erro aconteceu porque tentamos acessar uma posição inexistente. Lembrem-se de que declaramos o array com quatro posições. A posição de nº. 4 é, na verdade, a quinta.</p>
<p>Podemos ainda declarar um array e alterar seu tamanho posteriormente, para incluir mais elementos. Isso é possível com o uso do comando <em>ReDim</em>. Enquanto o <em>Dim</em> serve para declarar variáveis, o <em>ReDim</em> serve para redeclará-las. Confiram o exemplo:</p>
<pre class="brush: vb;">
'Para que o ReDim funcione, precisamos declarar inicialmente o array sem especificar o tamanho
Dim frutas()
'O ReDim vai inicialmente definir o tamanho do array
ReDim frutas(3)
frutas(0) = &quot;Manga&quot;
frutas(1) = &quot;Melancia&quot;
frutas(2) = &quot;Maracujá&quot;
'Para colocarmos mais elementos, precisaremos aumentar o array
ReDim frutas(5)
'Agora cabem mais dois elementos
frutas(3) = &quot;Morango&quot;
frutas(4) = &quot;Melão&quot;
'Vamos agora exibir todos os elementos
Response.Write(&quot;Elemento 0: &quot; &amp; frutas(0) &amp; &quot;&lt;br&gt;&quot;)
Response.Write(&quot;Elemento 1: &quot; &amp; frutas(1) &amp; &quot;&lt;br&gt;&quot;)
Response.Write(&quot;Elemento 2: &quot; &amp; frutas(2) &amp; &quot;&lt;br&gt;&quot;)
Response.Write(&quot;Elemento 3: &quot; &amp; frutas(3) &amp; &quot;&lt;br&gt;&quot;)
Response.Write(&quot;Elemento 4: &quot; &amp; frutas(4) &amp; &quot;&lt;br&gt;&quot;)
</pre>
<p>Executem o código acima e vejam se tudo saiu como planejado. A resposta é: <strong>não</strong>! Aparentemente os elementos declarados antes do redimensionamento do array sumiram. O comportamento padrão do <em>ReDim</em> é zerar o array ao redimensioná-lo. Para evitar que isso ocorra, basta utilizar a opção <em>Preserve</em>. Confiram:</p>
<pre class="brush: vb;">
'Para que o ReDim funcione, precisamos declarar inicialmente o array sem especificar o tamanho
Dim frutas()
'O ReDim vai inicialmente definir o tamanho do array
ReDim frutas(3)
frutas(0) = &quot;Manga&quot;
frutas(1) = &quot;Melancia&quot;
frutas(2) = &quot;Maracujá&quot;
'A partir daqui, o ReDim não vai mais apagar os elementos, pois estamos usando o Preserve
ReDim Preserve frutas(5)
'Agora cabem mais dois elementos
frutas(3) = &quot;Morango&quot;
frutas(4) = &quot;Melão&quot;
'Vamos agora exibir todos os elementos
Response.Write(&quot;Elemento 0: &quot; &amp; frutas(0) &amp; &quot;&lt;br&gt;&quot;)
Response.Write(&quot;Elemento 1: &quot; &amp; frutas(1) &amp; &quot;&lt;br&gt;&quot;)
Response.Write(&quot;Elemento 2: &quot; &amp; frutas(2) &amp; &quot;&lt;br&gt;&quot;)
Response.Write(&quot;Elemento 3: &quot; &amp; frutas(3) &amp; &quot;&lt;br&gt;&quot;)
Response.Write(&quot;Elemento 4: &quot; &amp; frutas(4) &amp; &quot;&lt;br&gt;&quot;)
</pre>
<p>Imaginem agora que seja necessário armazenar em um array o nome e o CTR (número de matrícula) de um conjunto de alunos. Como isto poderia ser feito? Caso desejássemos armazenar tais informações para 10 alunos, seria preciso um array com 20 elementos. Mas como organizar as informações para que ficasse claro qual CTR pertence a um aluno?</p>
<p>A solução é: utilizando um array bidimensional. Um array bidimensional assemelha-se a uma tabela. Para acessarmos um elemento qualquer deste array é necessário especificar a linha e a coluna onde este se encontra. Portanto, um array bidimensional tem não só um, mas dois índices. Confiram o exemplo a seguir:</p>
<pre class="brush: vb;">
&lt;%
'Declarando array bidimensional (5x2)
Dim alunos(4,1)

'O primeiro dígito representa o aluno, o segundo é &quot;0&quot; para nome e &quot;1&quot; para CTR
alunos(0,0) = &quot;Josy&quot;
alunos(0,1) = 1682
alunos(1,0) = &quot;Filipe&quot;
alunos(1,1) = 2244
alunos(2,0) = &quot;Anderson&quot;
alunos(2,1) = 2341
alunos(3,0) = &quot;Daniel&quot;
alunos(3,1) = 2327
alunos(4,0) = &quot;Clautevânio&quot;
alunos(4,1) = 1709
%&gt;
</pre>
<p>Podemos visualizar o array acima como uma tabela, onde as linhas representam o primeiro índice e as colunas o segundo.</p>
<table border="1" width="300">
<tr bgcolor="#ffffcc">
<td bgcolor="#ffffcc">
<p align="center"><strong>Índice</strong></p>
</td>
<td>
<p align="center"><strong>0</strong></p>
</td>
<td>
<p align="center"><strong>1</strong></p>
</td>
</tr>
<tr>
<td bgcolor="#ffffcc">
<p align="center"><strong>0</strong></p>
</td>
<td>
<p align="center">Josy</p>
</td>
<td>
<p align="center">1682</p>
</td>
</tr>
<tr>
<td bgcolor="#ffffcc">
<p align="center"><strong>1</strong></p>
</td>
<td>
<p align="center">Filipe</p>
</td>
<td>
<p align="center">2244</p>
</td>
</tr>
<tr>
<td bgcolor="#ffffcc">
<p align="center"><strong>2</strong></p>
</td>
<td>
<p align="center">Anderson</p>
</td>
<td>
<p align="center">2341</p>
</td>
</tr>
<tr>
<td bgcolor="#ffffcc">
<p align="center"><strong>3</strong></p>
</td>
<td>
<p align="center">Daniel</p>
</td>
<td>
<p align="center">2327</p>
</td>
</tr>
<tr>
<td bgcolor="#ffffcc">
<p align="center"><strong>4</strong></p>
</td>
<td>
<p align="center">Clautevânio</p>
</td>
<td>
<p align="center">1709</p>
</td>
</tr>
</table>
<p>Teoricamente, o VBScript suporta a criação de arrays com até 60 dimensões (60 índices diferentes), mas na prática dificilmente utilizamos além de dois.</p>
<p>Bom, até o momento temos utilizado o <em>Response.Write</em> de forma ostensiva para exibir na tela o valor armazenado em cada  índice do array. Obviamente esta não é a forma mais inteligente de percorrer um array. Assim como em qualquer outra linguagem de programação que vimos até o momento, no VBScript também encontramos estruturas de repetição. A estrutura mais adequada à tarefa de percorrer um array é a <em>for each</em>, cujo funcionamento pode ser visto no código a seguir:</p>
<pre class="brush: vb;">
' Para cada elemento no array alunos
for each elemento in alunos
' elemento é cada um dos elementos do array
Response.Write(elemento &amp; &quot;&lt;br&gt;&quot;)
' delimita o for each
next
</pre>
<p>Percebam que não foi especificada a quantidade de iterações (repetições) a serem realizadas. O for each é capaz de saber o tamanho do array, de forma a percorrê-lo até o fim, automaticamente.</p>
<p>A variável &#8220;elemento&#8221; é utilizada para referir-se aos elementos que compõem o array, um de cada vez. Ou seja, a cada ciclo, &#8220;elemento&#8221; corresponde a uma posição diferente do array. Fora do <em>for each</em>, a variável não possui valor nenhum.</p>
<p>Finalizando, o <em>for each</em> é recomendado para arrays unidimensionais. Para um array bidimensional, como no código acima, a maneira como o <em>for each</em> percorre-o pode não ser a mais conveniente. Neste mesmo exemplo, foi mostrado primeiro todos os nomes dos alunos para, em seguida, serem mostrados os CTRs. Para um maior controle na forma como o array é percorrido é necessário o uso de outras estruturas de repetição, como o <em>for</em>. Confiram o código abaixo:</p>
<pre class="brush: vb;">
' O for permite um controle maior sobre a exibição dos elementos de um array multidimensional.
' Seu funcionamento está associado a uma variável de controle, que &quot;conta&quot; as repetições efetuadas e indica a hora de parar.
for i=0 to 4
' O &quot;i&quot; é a tal variável de controle. O valor de &quot;i&quot; muda a cada ciclo. Neste exemplo, ele começa valendo &quot;0&quot; e segue aumentando, uma unidade de cada vez, até chegar a valer &quot;4&quot; e realizar seu último ciclo.
response.Write(&quot;Nome: &quot; &amp; alunos(i,0) &amp; &quot;. CTR: &quot; &amp; alunos(i,1) &amp; &quot;.&lt;br&gt;&quot;)
next
%&gt;
</pre>
<p>Embora por padrão a variável de controle seja incrementada em uma unidade por vez, o valor a ser incrementado pode ser estabelecido através do uso do parâmetro <em>step</em>:</p>
<pre class="brush: vb;">
' Repete 10 vezes, com &quot;i&quot; variando de 1 a 10 (1,2,3,4,5,6,7,8,9,10).
for i=1 to 10
...
' Repete 5 vezes, com &quot;i&quot; variando de 1 a 9 (1,3,5,7,9). &quot;i&quot; não chega a valer 10, pois se passasse do 9, chegaria a 11, que está fora do intervalo.
for i=1 to 10 step 2
...
' Repete 6 vezes, com &quot;i&quot; variando de 10 a 0 (10,8,6,4,2,0).
for i=10 to 0 step 2
...
</pre>
<p>Na próxima aula continuaremos com mais estruturas de repetição. Até!</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Elaborando uma proposta para produção de um website]]></title>
<link>http://iranrodrigues.wordpress.com/2007/11/10/elaborando-uma-proposta-para-producao-de-um-website/</link>
<pubDate>Sat, 10 Nov 2007 12:59:10 +0000</pubDate>
<dc:creator>Iran Rodrigues</dc:creator>
<guid>http://iranrodrigues.wordpress.com/2007/11/10/elaborando-uma-proposta-para-producao-de-um-website/</guid>
<description><![CDATA[A primeira etapa na construção do website para o módulo &#8220;Projeto&#8221; consiste na elaboração]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><h3>A primeira etapa na construção do website para o módulo &#8220;Projeto&#8221; consiste na elaboração de uma proposta de trabalho. Confira como elaborá-la.</h3>
<p>A proposta de trabalho é um documento de leitura mais agradável que um contrato de prestação de serviços. É na verdade, o documento que antecede o contrato, caso esta seja aprovada. A proposta contém basicamente as seguintes informações:</p>
<ul>
<li><strong>Apresentação</strong> (quem é você? Você está qualificado para fazer este projeto? Como poderemos contatá-lo posteriormente?);</li>
<li><strong>Resumo do projeto</strong> (qual a finalidade do site? Quais são as características mais relevantes? Quais tecnologias farão a diferença em relação aos concorrentes?)</li>
<li><strong>Metodologia utilizada</strong> (quais são as etapas envolvidas? Qual o prazo para conclusão destas?)</li>
<li><strong>Investimento</strong> (qual o valor do projeto? Quais custos estão inclusos? Qual o valor da manutenção? Como estes valores poderão ser pagos?)</li>
</ul>
<p>Ao ler o documento, o cliente aceitará ou não a proposta com base principalmente nos seguintes aspectos:</p>
<p><!--more--></p>
<ul>
<li>Suprimento de suas necessidades</li>
<li>Valor a ser investido</li>
<li>Prazo para conclusão</li>
</ul>
<p><strong>Necessidades do cliente</strong></p>
<p>Ao idealizar um website, devemos pensar nas necessidades do nosso cliente, isso é óbvio! O que talvez não seja tão óbvio assim é que as necessidades dos clientes de nosso cliente também têm um peso muito grande. Mas como saber quais as necessidades? A resposta: através de um <em>briefing</em>, que são as especificações do que o cliente quer você faça. <a href="http://usabilidoido.com.br/bom_projeto_tem_que_ter_bom_briefing.html" target="_blank">Aqui está uma ótima leitura sobre o briefing</a>.</p>
<p>Mudando de assunto, lembram das três leis da robótica, de Isaac Asimov, vistas no livro e filme &#8220;Eu, Robô&#8221;?</p>
<ul>
<li>1ª lei: um robô não pode fazer mal a um ser humano e nem, por omissão, permitir que algum mal lhe aconteça.</li>
<li>2ª lei: um robô deve obedecer às ordens dos seres humanos, exceto quando estas contrariarem a primeira lei.</li>
<li>3ª lei: um robô deve proteger a sua integridade física, desde que com isto não contrarie as duas primeiras leis.</li>
</ul>
<p>Pois bem, deixem o filme de lado e prestem atenção nestas três leis aqui:</p>
<ul>
<li>1ª lei: o site deve atender a todas as necessidades e expectativas do cliente.</li>
<li>2ª lei: o site deverá atender a todas as possíveis necessidades dos clientes do seu cliente, exceto quando isto contrariar a primeira lei.</li>
<li>3ª lei: o site deverá atender a todas as suas expectativas, exceto quando isto contrariar as duas primeiras leis.</li>
</ul>
<p>A razão para isso é o seguinte: o seu pagamento sai do bolso do seu cliente. O dinheiro do cliente vem do bolso dos clientes dele. Logo, com clientes insatisfeitos seu cliente não prosperará, nem poderá lhe pagar&#8230;</p>
<p><strong>Valor do projeto</strong></p>
<p>Todo mundo, quando começa a construir seus primeiros websites, tem uma mesma dúvida: <strong>quanto cobrar pelo serviço</strong>?</p>
<p>Ao invés de responder a esta pergunta, indico dois ótimos artigos esclarecedores:</p>
<ul>
<li><a href="http://webinsider.uol.com.br/index.php/2005/10/06/qual-o-valor-de-um-projeto-online/" target="_blank">Qual o valor de um projeto online</a> (Cezar Calligaris)</li>
<li><a href="http://san.pro.br/daniel/2005/04/senai-posts/curso-de-web-design/aula-quanto-cobrar-por-um-web-site/" target="_blank">Quanto cobrar por um website</a> (Daniel Santana)</li>
</ul>
<p>Além do que foi dito nos links acima, acrescento apenas o seguinte: não fale em &#8220;preço&#8221; para o cliente, pois lembra &#8220;gastos&#8221;, &#8220;despesas&#8221;. Fale sempre &#8220;investimento&#8221;, que lembra &#8220;dinheiro bem aplicado&#8221;.  <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><strong>Prazo para conclusão</strong></p>
<p>Um outro ponto que é quase sempre gera problemas é quanto ao prazo. Não estipule um prazo menor do que o necessário só para que o cliente aceite a proposta. Provavelmente você não conseguirá cumprí-lo. Pense direitinho no tempo que você tem disponível e na parcela deste tempo que você irá parar o que estiver fazendo para se dedicar ao site. Lembre-se também de que <span style="text-decoration:line-through;">shit happens</span> contratempos acontecem. Outra coisa: é melhor terminar uma semana antes do prazo definido em dois meses do que terminar uma semana depois do prazo definido em um mês e meio.</p>
<p>Concluindo, deixo vocês com um belo modelo de proposta, de autoria de Walmar Andrade, da <a href="http://www.fatorw.com" target="_blank">Fator W</a>:</p>
<p><a title="Proposta para a produção do site do Café Colombo" href="http://iranrodrigues.wordpress.com/files/2007/11/proposta_cafe_colombo.pdf">Proposta para a produção do site do Café Colombo</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Operadores do VBScript (lógicos e de comparação)]]></title>
<link>http://iranrodrigues.wordpress.com/2007/11/06/operadores-do-vbscript-logicos-e-de-comparacao/</link>
<pubDate>Wed, 07 Nov 2007 02:46:05 +0000</pubDate>
<dc:creator>Iran Rodrigues</dc:creator>
<guid>http://iranrodrigues.wordpress.com/2007/11/06/operadores-do-vbscript-logicos-e-de-comparacao/</guid>
<description><![CDATA[Continuando o post anterior sobre operadores&#8230; Operadores Lógicos Os operadores lógicos são uti]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Continuando o <a href="http://iranrodrigues.wordpress.com/2007/11/04/operadores-do-vbscript-aritmeticos-e-de-concatenacao/" title="Operadores Aritméticos e de Concatenação">post anterior sobre operadores</a>&#8230;</p>
<p><strong>Operadores Lógicos</strong></p>
<p>Os operadores lógicos são utilizados em expressões booleanas (lógicas) e podem retornar verdadeiro (True) ou falso (False). Os mais comumente usados são:</p>
<p><!--more--></p>
<p><strong>And (E)</strong>: o operador And analisa dois valores lógicos, retornando verdadeiro apenas quando ambos são verdadeiros. Ex.:</p>
<pre class="brush: vb;">
'Retorna True, pois 10 é maior que 5 E 4 é maior que 1.
Response.Write((10&gt;5) And (4&gt;1))
</pre>
<p>A <a href="http://pt.wikipedia.org/wiki/Tabela_verdade" title="Definição do termo">tabela-verdade</a> para o And é a seguinte:</p>
<table style="border:1px solid #888888;background-color:#f8f8f8;" width="188">
<tr>
<td style="background-color:#ddeeee;" align="center"><strong>A</strong></td>
<td style="background-color:#ddeeee;" align="center"><strong>B</strong></td>
<td style="background-color:#ddeeee;" align="center"><strong>A AND B</strong></td>
</tr>
<tr>
<td style="background-color:#dddddd;" align="center">F</td>
<td style="background-color:#dddddd;" align="center">F</td>
<td style="background-color:#dddddd;" align="center">F</td>
</tr>
<tr>
<td style="background-color:#dddddd;" align="center">V</td>
<td style="background-color:#dddddd;" align="center">F</td>
<td style="background-color:#dddddd;" align="center">F</td>
</tr>
<tr>
<td style="background-color:#dddddd;" align="center">F</td>
<td style="background-color:#dddddd;" align="center">V</td>
<td style="background-color:#dddddd;" align="center">F</td>
</tr>
<tr>
<td style="background-color:#dddddd;" align="center">V</td>
<td style="background-color:#dddddd;" align="center">V</td>
<td style="background-color:#dddddd;" align="center">V</td>
</tr>
</table>
<p>Analogia &#8211; imagine as seguintes proposições:</p>
<ul>
<li>A: tem quatro patas;</li>
<li>B: mia;</li>
<li>C: é um gato.</li>
</ul>
<p>Podemos então dizer que a proposição C é verdadeira se as proposições A e B forem verdadeiras. Se tem quatro patas mas não mia, ou mia mas não tem quatro patas, não podemos dizer que é um gato. Logo, &#8220;A And B&#8221; é verdadeiro apenas se A for verdadeiro e B for verdadeiro. Portanto, podemos dizer que &#8220;C = A And B&#8221;.</p>
<p><strong>Or (Ou)</strong>: o operador Or analisa dois valores lógicos, retornado falso apenas quando ambos são falsos. Ex.:</p>
<pre class="brush: vb;">
'Retorna True, pois 3 é maior que 0. Basta que uma das condições seja verdadeira para que o resultado seja verdadeiro.
Response.Write((0&gt;2) Or (3&gt;0))
</pre>
<p>A tabela-verdade para o Or é a seguinte:</p>
<table style="border:1px solid #888888;background-color:#f8f8f8;" width="188">
<tr>
<td style="background-color:#ddeeee;" align="center"><strong>A</strong></td>
<td style="background-color:#ddeeee;" align="center"><strong>B</strong></td>
<td style="background-color:#ddeeee;" align="center"><strong>A OR B</strong></td>
</tr>
<tr>
<td style="background-color:#dddddd;" align="center">F</td>
<td style="background-color:#dddddd;" align="center">F</td>
<td style="background-color:#dddddd;" align="center">F</td>
</tr>
<tr>
<td style="background-color:#dddddd;" align="center">V</td>
<td style="background-color:#dddddd;" align="center">F</td>
<td style="background-color:#dddddd;" align="center">V</td>
</tr>
<tr>
<td style="background-color:#dddddd;" align="center">F</td>
<td style="background-color:#dddddd;" align="center">V</td>
<td style="background-color:#dddddd;" align="center">V</td>
</tr>
<tr>
<td style="background-color:#dddddd;" align="center">V</td>
<td style="background-color:#dddddd;" align="center">V</td>
<td style="background-color:#dddddd;" align="center">V</td>
</tr>
</table>
<p>Analogia &#8211; imagine que Samuel é flamenguista e anti-corinthiano. Agora imagine as seguintes proposições:</p>
<ul>
<li>A: Flamengo classificado para a Libertadores da América;</li>
<li>B: Corinthians rebaixado;</li>
<li>C: Samuel feliz.</li>
</ul>
<p>Samuel ficaria feliz se A ou B fossem proposições verdadeiras. Ficaria ainda muito feliz se ambas fossem verdadeiras. Logo, &#8220;C = A Or B&#8221;, pois não é imprescindível que A e B sejam ambas verdadeiras para que C o seja.</p>
<p><strong>Not (Não)</strong>: o operador Not é um operador unário (ao contrário dos anteriores, que são binários), o que significa que ele age sobre um único valor. O Not retorna o contrário do valor analisado. Ex.:</p>
<pre class="brush: vb;">
'Retorna False, pois 3 é maior que 0.
Response.Write(Not(3&gt;0))
</pre>
<p>A tabela-verdade para o Not é a seguinte:</p>
<table style="border:1px solid #888888;background-color:#f8f8f8;" width="96">
<tr>
<td style="background-color:#ddeeee;" align="center"><strong>A</strong></td>
<td style="background-color:#ddeeee;" align="center"><strong>NOT A</strong></td>
</tr>
<tr>
<td style="background-color:#dddddd;" align="center">V</td>
<td style="background-color:#dddddd;" align="center">F</td>
</tr>
<tr>
<td style="background-color:#dddddd;" align="center">F</td>
<td style="background-color:#dddddd;" align="center">V</td>
</tr>
</table>
<p>Não precisa nem de analogia, não é?</p>
<p>Os demais operadores lógicos não são tão óbvios:</p>
<p><strong>Xor (Ou exclusivo)</strong>: o operador Xor analisa dois valores lógicos, retornado falso apenas quando ambos são equivalentes. Ex.:</p>
<pre class="brush: vb;">
'Retorna False, pois ambas as condições são verdadeiras.
Response.Write((10&gt;7) Xor (2&gt;1))
</pre>
<p>A tabela-verdade para o Xor é a seguinte:</p>
<table style="border:1px solid #888888;background-color:#f8f8f8;" width="188">
<tr>
<td style="background-color:#ddeeee;" align="center"><strong>A</strong></td>
<td style="background-color:#ddeeee;" align="center"><strong>B</strong></td>
<td style="background-color:#ddeeee;" align="center"><strong>A XOR B</strong></td>
</tr>
<tr>
<td style="background-color:#dddddd;" align="center">F</td>
<td style="background-color:#dddddd;" align="center">F</td>
<td style="background-color:#dddddd;" align="center">F</td>
</tr>
<tr>
<td style="background-color:#dddddd;" align="center">V</td>
<td style="background-color:#dddddd;" align="center">F</td>
<td style="background-color:#dddddd;" align="center">V</td>
</tr>
<tr>
<td style="background-color:#dddddd;" align="center">F</td>
<td style="background-color:#dddddd;" align="center">V</td>
<td style="background-color:#dddddd;" align="center">V</td>
</tr>
<tr>
<td style="background-color:#dddddd;" align="center">V</td>
<td style="background-color:#dddddd;" align="center">V</td>
<td style="background-color:#dddddd;" align="center">F</td>
</tr>
</table>
<p>Analogia &#8211; imagine que Clautevânio possui duas namoradas (uma não sabe da outra). Vai haver uma grande festa em Coruripe e Clautevânio pretende ir, mas apenas se uma de suas namoradas for. Vamos analisar as proposições:</p>
<ul>
<li>A: Namorada nº 1 vai à festa;</li>
<li>B: Namorada nº 2 vai à festa;</li>
<li>C: Clautevânio vai à festa.</li>
</ul>
<p>Quando é que a proposição C vai ser verdadeira? Ora, quando A ou B forem verdadeiras&#8230; mas, espere! Se A e B forem verdadeiras, Clautevânio não irá à festa, para não haver confusão. Essa é a diferença do Ou para o Ou exclusivo. Se A e B forem verdadeiras, o resultado para o Ou exclusivo é falso. Logo, &#8220;C = A Xor B&#8221; (e não &#8220;C= A Or B&#8221;).</p>
<p><strong>Eqv (Equivale a)</strong>: o operador Eqv analisa dois valores lógicos e retorna verdadeiro quando ambos são equivalentes. Justamente o oposto do Xor. Ex.:</p>
<pre class="brush: vb;">
'Retorna True, pois ambas as condições são verdadeiras.
Response.Write((10&gt;7) Eqv (2&gt;1))
</pre>
<p>A tabela-verdade para o Eqv é a seguinte:</p>
<table style="border:1px solid #888888;background-color:#f8f8f8;" width="188">
<tr>
<td style="background-color:#ddeeee;" align="center"><strong>A</strong></td>
<td style="background-color:#ddeeee;" align="center"><strong>B</strong></td>
<td style="background-color:#ddeeee;" align="center"><strong>A EQV B</strong></td>
</tr>
<tr>
<td style="background-color:#dddddd;" align="center">F</td>
<td style="background-color:#dddddd;" align="center">F</td>
<td style="background-color:#dddddd;" align="center">V</td>
</tr>
<tr>
<td style="background-color:#dddddd;" align="center">V</td>
<td style="background-color:#dddddd;" align="center">F</td>
<td style="background-color:#dddddd;" align="center">F</td>
</tr>
<tr>
<td style="background-color:#dddddd;" align="center">F</td>
<td style="background-color:#dddddd;" align="center">V</td>
<td style="background-color:#dddddd;" align="center">F</td>
</tr>
<tr>
<td style="background-color:#dddddd;" align="center">V</td>
<td style="background-color:#dddddd;" align="center">V</td>
<td style="background-color:#dddddd;" align="center">V</td>
</tr>
</table>
<p>Também não creio que seja necessário colocar uma analogia&#8230;</p>
<p><strong>Imp (Implica em)</strong>: o operador Imp analisa dois valores lógicos e retorna falso apenas quando o primeiro é verdadeiro e o segundo é falso. Ex.:</p>
<pre class="brush: vb;">
'Retorna False, pois a primeira condição é verdadeira, enquanto que a segunda não é.
Response.Write((0&lt;1) Eqv (2&gt;11))
</pre>
<p>A tabela-verdade para o Imp é a seguinte:</p>
<table style="border:1px solid #888888;background-color:#f8f8f8;" width="188">
<tr>
<td style="background-color:#ddeeee;" align="center"><strong>A</strong></td>
<td style="background-color:#ddeeee;" align="center"><strong>B</strong></td>
<td style="background-color:#ddeeee;" align="center"><strong>A IMP </strong><strong>B</strong></td>
</tr>
<tr>
<td style="background-color:#dddddd;" align="center">V</td>
<td style="background-color:#dddddd;" align="center">V</td>
<td style="background-color:#dddddd;" align="center">V</td>
</tr>
<tr>
<td style="background-color:#dddddd;" align="center">V</td>
<td style="background-color:#dddddd;" align="center">F</td>
<td style="background-color:#dddddd;" align="center">F</td>
</tr>
<tr>
<td style="background-color:#dddddd;" align="center">F</td>
<td style="background-color:#dddddd;" align="center">V</td>
<td style="background-color:#dddddd;" align="center">V</td>
</tr>
<tr>
<td style="background-color:#dddddd;" align="center">F</td>
<td style="background-color:#dddddd;" align="center">F</td>
<td style="background-color:#dddddd;" align="center">V</td>
</tr>
</table>
<p>De acordo com a <a href="http://pt.wikipedia.org/wiki/Implica%C3%A7%C3%A3o">Wikipedia</a>, &#8220;na lógica e na matemática, a <strong>implicação</strong>, ou <strong>condicional</strong> é a indicação do tipo SE&#8230; ENTÃO, indicando que uma condição deve ser satisfeita necessariamente para que a outra seja verdadeira&#8221;.</p>
<p>Analogia &#8211; imagine as seguintes proposições:</p>
<ul>
<li>A: chove;</li>
<li>B: jardim fica molhado.</li>
</ul>
<p>A Imp B equivale a dizer que se A é verdadeira, B tem que o ser. Ou seja, se afirmo que &#8220;se chove, o jardim fica molhado&#8221;, sempre que chover, o jardim ficará molhado. Mas não posso concluir a partir daí que se o jardim ficar molhado é porque choveu&#8230; de repente foi só alguém que molhou as plantas. Então se a proposição A (chove) for falsa, não podemos afirmar nada sobre B (jardim fica molhado). Daí, apenas uma situação resulta numa resposta falsa: quando chover e o jardim não ficar molhado, pois isso contraria o que afirmei anteriormente. Complicado?</p>
<p><strong>Operadores de Comparação</strong></p>
<p>Estes operadores são normalmente utilizados para a formulação de uma condição. São eles:</p>
<p>= (igual)<br />
&#60;&#62; (diferente)<br />
&#62; (maior que)<br />
&#60; (menor que)<br />
&#62;= (maior ou igual)<br />
&#60;= (menor ou igual)</p>
<p>Não preciso dizer mais nada, não é? Apenas tenham cuidado para não usar erroneamente o &#8220;==&#8221; do PHP e Javascript aqui. No VBScript, igual é apenas um. Para atribuir valor ou comparar.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Operadores do VBScript (aritméticos e de concatenação)]]></title>
<link>http://iranrodrigues.wordpress.com/2007/11/04/operadores-do-vbscript-aritmeticos-e-de-concatenacao/</link>
<pubDate>Sun, 04 Nov 2007 16:43:20 +0000</pubDate>
<dc:creator>Iran Rodrigues</dc:creator>
<guid>http://iranrodrigues.wordpress.com/2007/11/04/operadores-do-vbscript-aritmeticos-e-de-concatenacao/</guid>
<description><![CDATA[O VBScript possui uma vasta gama de operadores &#8211; aritméticos, de concatenação, de comparação e]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>O VBScript possui uma vasta gama de operadores &#8211; aritméticos, de concatenação, de comparação e lógicos.</p>
<p>Os operadores aritméticos básicos são os mesmos para todas as linguagens estudadas por nós durante o curso:</p>
<p>Soma (+)</p>
<pre class="brush: vb;">
Dim a, b, c
a = 11
b = 4
'Soma
c = a + b
Response.Write(c)
'Resultado: 15
</pre>
<p>Subtração (-)</p>
<pre class="brush: vb;">
'Subtração
c = a - b
'Resultado: 7
Response.Write(c)
</pre>
<p>Multiplicação (*)</p>
<pre class="brush: vb;">
'Multiplicação
c = a * b
'Resultado: 44
Response.Write(c)
</pre>
<p>Divisão (/)</p>
<pre class="brush: vb;">
'Divisão
c = a / b
'Resultado: 2,75
Response.Write(c)
</pre>
<p>Os próximos operadores aritméticos não são tão triviais assim&#8230;</p>
<p>Divisão inteira (\) &#8211; retorna a porção inteira do resultado</p>
<pre class="brush: vb;">
'Divisão inteira
c = a \ b
'Resultado: 2
Response.Write(c)
</pre>
<p>Resto (mod)</p>
<pre class="brush: vb;">
'Resto
c = a mod b
'Resultado: 3
Response.Write(c)
</pre>
<p>Exponenciação (^)</p>
<pre class="brush: vb;">
'Exponenciação
c = a ^ b
'Resultado: 14641
Response.Write(c)
</pre>
<p>Para concatenar <em>strings</em>, podem ser utilizados dois operadores: o &#8220;+&#8221; (mais), que assim como no Javascript, pode ser usado para somar e para concatenar e o &#8220;&#38;&#8221; (&#8220;e&#8221; comercial). Este último é usado exclusivamente para concatenar &#8211; concatenando até números. Para evitar confusões, recomendo o uso do &#8220;&#38;&#8221; para concatenação.</p>
<p>Concatenação (&#38; ou +)</p>
<pre class="brush: vb;">
'Concatenação
a = &quot;Micro&quot;
b = &quot;camp&quot;
c = a &amp; b
'Resultado: Microcamp
Response.Write(c)
</pre>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Detecção e conversão de subtipos em VBScript]]></title>
<link>http://iranrodrigues.wordpress.com/2007/11/04/deteccao-e-conversao-de-subtipos-em-vbscript/</link>
<pubDate>Sun, 04 Nov 2007 16:30:34 +0000</pubDate>
<dc:creator>Iran Rodrigues</dc:creator>
<guid>http://iranrodrigues.wordpress.com/2007/11/04/deteccao-e-conversao-de-subtipos-em-vbscript/</guid>
<description><![CDATA[Veja como detectar o subtipo de uma variável no VBScript e avaliar se seu valor pode ser convertido ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><h3>Veja como detectar o subtipo de uma variável no VBScript e avaliar se seu valor pode ser convertido ou não em um outro subtipo.</h3>
<p>Na última aula, <a href="http://iranrodrigues.wordpress.com/2007/11/04/subtipos-de-dados-do-vbscript/">neste link</a>, conhecemos os subtipos de valores do VBScript. Veremos agora como detectar o subtipo de uma variável, bem como converter seu valor de um subtipo para outro.</p>
<p><b>Valores numéricos</b></p>
<p>A função IsNumeric() retorna um valor lógico, indicando se o valor fornecido (entre parênteses) é um número ou pode ser convertido em tal.</p>
<p>Exemplos:</p>
<pre class="brush: vb;">
Dim valor
' valor recebe número inteiro
valor = 35
Response.Write(valor)
Response.Write(&quot; é numérico? -&gt; &quot;)
' IsNumeric informa se a variável contém um número
Response.Write(IsNumeric(valor))
Response.Write(&quot;&lt;br /&gt;&quot;)

' valor recebe string
valor = &quot;abc&quot;
Response.Write(valor)
Response.Write(&quot; é numérico? -&gt; &quot;)
Response.Write(IsNumeric(valor))
Response.Write(&quot;&lt;br /&gt;&quot;)

' valor recebe string com números
valor = &quot;123&quot;
Response.Write(valor)
Response.Write(&quot; é numérico? -&gt; &quot;)
Response.Write(IsNumeric(valor))
Response.Write(&quot;&lt;br /&gt;&quot;)

' valor recebe data (a data é inserida entre tralhas (cerquilhas, jogos-da-velha, etc) no formato mês/dia/ano)
valor = #11/24/2007#
Response.Write(valor)
Response.Write(&quot; é numérico? -&gt; &quot;)
Response.Write(IsNumeric(valor))
Response.Write(&quot;&lt;br&gt;&quot;)

' valor recebe booleano
valor = True
Response.Write(valor)
Response.Write(&quot; é numérico? -&gt; &quot;)
Response.Write(IsNumeric(valor))
Response.Write(&quot;&lt;br&gt;&quot;)
</pre>
<p>Com os exemplos acima, podemos perceber quais subtipos são considerados numéricos pelo VBScript. Estes valores considerados numéricos podem ser convertidos em um número propriamente dito usando uma das seguintes funções:</p>
<ul>
<li>CByte() &#8211; converte para um inteiro de subtipo <i>byte;</i></li>
<li>CInt() &#8211; converte para um inteiro de subtipo <i>integer;</i></li>
<li>CLng() &#8211; converte para um inteiro de subtipo <i>long;</i></li>
<li>CSng() &#8211; converte para um real de subtipo <i>single</i>;</li>
<li>CDbl() &#8211; converte para um real de subtipo <i>double</i>.</li>
</ul>
<p>A diferença entre os subtipos está na capacidade de armazenamento (por exemplo, o <i>byte </i>só suporta números entre 0 e 255) &#8211; lembrando que isso já foi visto na aula anterior.</p>
<p>Exemplos de conversões para valores numéricos (as conversões que resultam em estouro devem ser testadas e depois comentadas, para que o script não seja interrompido):<!--more--></p>
<pre class="brush: vb;">
Dim valor
valor = &quot;300&quot;
' Convertendo para byte (estouro, pois o byte só suporta até 255)
Response.Write(CByte(valor))
' Convertendo para integer (OK)
Response.Write(CInt(valor))
valor = &quot;40000&quot;
' Convertendo para integer (estouro, pois o integer só suporta até 32767)
Response.Write(CInt(valor))
' Convertendo para long (OK)
Response.Write(CLng(valor))
</pre>
<p>Uma data pode ser convertida para um número inteiro. O valor obtido representa o número de dias passados desde o dia 30/12/1899 até a data especificada. Por exemplo, a data #2/1/1900# (primeiro de fevereiro) corresponde ao número 33.</p>
<p>Se à data é acrescida uma hora, como em #2/1/1900 12:00:00#, esta pode ser convertida em um número real, onde a parte decimal corresponde às horas passadas (representadas como frações do dia.  A data especificada corresponde então ao número 33,5.</p>
<pre class="brush: vb;">
Dim dia
dia = #12/10/2007 19:42:00#
' Convertendo para double (OK)
Response.Write(CDbl(dia))
</pre>
<p><b>Datas</b></p>
<p>Para determinarmos se um valor é uma data/hora em potencial, utilizamos a função IsDate(). Confiram os exemplos:</p>
<pre class="brush: vb;">
Dim data
data = #11/24/2007#
Response.Write(IsDate(data))
data = &quot;2/30/2007&quot;
Response.Write(IsDate(data))
data = #21/22/2007#
Response.Write(IsDate(data))
</pre>
<p>Para a conversão, é usada a função CDate():</p>
<pre class="brush: vb;">
Dim valor
' valor = &quot;20/25/2007&quot;
' Convertendo para data (tipos incompatíveis)
'Response.Write(CDate(valor))
' valor = &quot;12/25/2007&quot;
' Convertendo para data (OK)
'Response.Write(CDate(valor))
</pre>
<p><b>Valores vazios ou nulos</b></p>
<p>Existem ainda funções para verificar se um valor é vazio ou nulo:</p>
<ul>
<li>IsEmpty() &#8211; retorna verdadeiro quando uma variável está vazia &#8211; isto é, não foi incializada, apenas declarada &#8211; ou contém o valor <i>empty,</i> ou ainda <i>null</i>;</li>
<li>IsNull() &#8211; retorna verdadeiro quando uma variável contém o valor <i>null</i>.</li>
</ul>
<pre class="brush: vb;">
' Declarando a variável &quot;a&quot;
Dim a
' Ela ainda não foi inicializada, logo, está vazia (mas não nula)
Response.Write(&quot;a é vazio =&gt;&quot;)
Response.Write(IsEmpty(a))
Response.Write(&quot;&lt;br&gt;&quot;)
Response.Write(&quot;a é nulo =&gt;&quot;)
Response.Write(IsNull(a))
Response.Write(&quot;&lt;br&gt;&quot;)
' O resultado acima também ocorreria caso inicializássemos a com o valor &lt;i&gt;Empty&lt;/i&gt;
' Um valor só é nulo quando é explicitamente inicializado como &lt;i&gt;Null&lt;/i&gt;
Dim b
b = Null
Response.Write(&quot;b é vazio =&gt;&quot;)
Response.Write(IsEmpty(b))
Response.Write(&quot;&lt;br&gt;&quot;)
Response.Write(&quot;b é nulo =&gt;&quot;)
Response.Write(IsNull(b))
Response.Write(&quot;&lt;br&gt;&quot;)
</pre>
<p>Embora algumas destas funções talvez nunca venham a ser usadas, algumas são muito úteis, podendo ser aplicadas, por exemplo, para a validação de dados submetidos via formulário.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Arquivos do mini-blog]]></title>
<link>http://iranrodrigues.wordpress.com/2007/11/03/arquivos-do-mini-blog/</link>
<pubDate>Sat, 03 Nov 2007 16:20:36 +0000</pubDate>
<dc:creator>Iran Rodrigues</dc:creator>
<guid>http://iranrodrigues.wordpress.com/2007/11/03/arquivos-do-mini-blog/</guid>
<description><![CDATA[Pessoal, disponibilizarei aqui os arquivos criados por nós durante a construção do blog. Estes serão]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Pessoal, disponibilizarei aqui os arquivos criados por nós durante a construção do blog. Estes serão atualizados conforme façamos novas alterações.</p>
<p>Atualizado em <strong>08/11/2007</strong>:</p>
<p>Um trabalhinho para vocês&#8230; na última aula comentei que iria atualizar os arquivos, inserindo um link para sair da página (e encerrar a sessão). Pois bem, vou deixar esta tarefa para vocês&#8230; é bem simples.</p>
<p>A função que faz o &#8220;<em>logout</em>&#8221; do usuário é a <em>session_destroy</em>. Esta função, como o nome sugere, destrói os dados armazenados em sessões. Desta forma, o usuário é &#8220;esquecido&#8221; pelo sistema, tendo que fazer <em>login</em> novamente.</p>
<p>Mas mesmo para destruir a sessão, é necessário o uso da função <em>session_start</em> para iniciá-la (é como o Windows: quando você quer desligar o computador, você clica em &#8220;Iniciar&#8221;).</p>
<p>Finalizando, o link então deverá apontar para uma página contendo chamadas para as duas funções, na ordem correta &#8211; primeiro a <em>session_start</em> e depois a <em>session_destroy</em>, e exibir uma mensagem avisando ao usuário que ele saiu do sistema.</p>
<p>Mãos à obra!</p>
<p><!--more--><strong>Arquivo <font color="#0000ff">sa_aula8_index.php</font>:</strong></p>
<pre class="brush: php;">
&lt;?
session_start();
$conexao = mysql_connect(&quot;localhost&quot;,&quot;root&quot;,&quot;&quot;);
mysql_select_db(&quot;blogsa110&quot;,$conexao);
$sql = &quot;select * from posts order by data desc&quot;;
$resultado = mysql_query($sql,$conexao);

?&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot; /&gt;
&lt;title&gt;Untitled Document&lt;/title&gt;
&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot;&gt;
&lt;? if (isset($_GET[&quot;envio&quot;]))
echo &quot;alert('Comentário enviado com sucesso!');&quot;; ?&gt;
&lt;? if (isset($_GET[&quot;exclusao&quot;]))
echo &quot;alert('Post excluído com sucesso!');&quot;; ?&gt;
&lt;? if (isset($_GET[&quot;edicao&quot;]))
echo &quot;alert('Post editado com sucesso!');&quot;; ?&gt;
&lt;/script&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;?
while ($postagem = mysql_fetch_array($resultado))
{
?&gt;
&lt;h1&gt;&lt;?=$postagem[&quot;titulo&quot;]?&gt;&lt;/h1&gt;
&lt;h3&gt;&lt;?
$timestamp = strtotime($postagem[&quot;data&quot;]);
echo date(&quot;d.m&quot;,$timestamp);
?&gt;&lt;/h3&gt;
&lt;p&gt;&lt;?=$postagem[&quot;texto&quot;]?&gt;&lt;/p&gt;
&lt;p&gt;&lt;?
$autor = $postagem[&quot;autor&quot;];
$sql = &quot;select nome from autores where (codigo='$autor')&quot;;
$resultado2 = mysql_query($sql,$conexao);
$arrayAutor = mysql_fetch_array($resultado2);
echo $arrayAutor[&quot;nome&quot;];
?&gt;&lt;/p&gt;
&lt;a href=&quot;comente.php?p=&lt;?=$postagem[&quot;codigo&quot;]?&gt;&quot;&gt;Comente&lt;/a&gt; &amp;#124; &lt;a href=&quot;verComentarios.php?p=&lt;?=$postagem[&quot;codigo&quot;]?&gt;&quot;&gt;Ver comentários&lt;/a&gt;
&lt;? if ((isset($_SESSION[&quot;login&quot;]))) { ?&gt;
&amp;#124; &lt;a href=&quot;excluir.php?p=&lt;?=$postagem[&quot;codigo&quot;]?&gt;&quot;&gt;Excluir&lt;/a&gt;
&amp;#124; &lt;a href=&quot;editar.php?p=&lt;?=$postagem[&quot;codigo&quot;]?&gt;&quot;&gt;Editar&lt;/a&gt;
&lt;? }} ?&gt;

&lt;/body&gt;
&lt;/html&gt;
</pre>
<p><strong>Arquivo<font color="#0000ff"> sa_aula7_login.php</font>:</strong></p>
<pre class="brush: php;">
&lt;?
session_start();
if (isset($_POST[&quot;login&quot;]))
{
$login = $_POST[&quot;login&quot;];
$senha = $_POST[&quot;senha&quot;];

$conexao = mysql_connect(&quot;localhost&quot;,&quot;root&quot;,&quot;&quot;);
mysql_select_db(&quot;blogsa110&quot;,$conexao);
$sql = &quot;select * from autores where (login='$login') and (senha=password('$senha'))&quot;;
$resultado = mysql_query($sql,$conexao);
if (mysql_num_rows($resultado)==1)
{
$autor = mysql_fetch_array($resultado);
$nome = $autor[&quot;nome&quot;];
$_SESSION[&quot;login&quot;] = $autor[&quot;codigo&quot;];
echo &quot;Bem-vindo, $nome!&quot;;
}
else
echo &quot;Login incorreto!&quot;;
}
?&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot; /&gt;
&lt;title&gt;Untitled Document&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;form id=&quot;form1&quot; name=&quot;form1&quot; method=&quot;post&quot; action=&quot;&quot;&gt;
&lt;label for=&quot;textfield&quot;&gt;Login:&lt;/label&gt;
&lt;input type=&quot;text&quot; name=&quot;login&quot; id=&quot;login&quot; /&gt;
&lt;br /&gt;
&lt;label for=&quot;label&quot;&gt;Senha:&lt;/label&gt;
&lt;input type=&quot;password&quot; name=&quot;senha&quot; id=&quot;label&quot; /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;label for=&quot;Submit&quot;&gt;&lt;/label&gt;
&lt;input type=&quot;submit&quot; name=&quot;Submit&quot; value=&quot;Entrar&quot; id=&quot;Submit&quot; /&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p><strong>Arquivo <font color="#0000ff">sa_aula7_cad_posts.php</font>:</strong></p>
<pre class="brush: php;">
&lt;?
session_start();
if (!(isset($_SESSION[&quot;login&quot;])))
header(&quot;location: sa_aula7_login.php&quot;);
if (isset($_POST[&quot;titulo&quot;]))
{
$data = date(&quot;Y-m-d&quot;);
$autor = $_SESSION[&quot;login&quot;];
$titulo = $_POST[&quot;titulo&quot;];
$texto = $_POST[&quot;texto&quot;];
$conexao = mysql_connect(&quot;localhost&quot;,&quot;root&quot;,&quot;&quot;);
mysql_select_db(&quot;blogsa110&quot;,$conexao);
$sql = &quot;insert into posts (data, autor, titulo, texto) values ('$data','$autor','$titulo','$texto')&quot;;
$resultado = mysql_query($sql,$conexao);
if ($resultado)
echo &quot;Post inserido com sucesso!&quot;;
else
echo &quot;Não foi possível inserir o post!&quot;;
}
?&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot; /&gt;
&lt;title&gt;Untitled Document&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;form id=&quot;form1&quot; name=&quot;form1&quot; method=&quot;post&quot; action=&quot;&quot;&gt;
&lt;label for=&quot;textfield&quot;&gt;Título:&lt;/label&gt;
&lt;input name=&quot;titulo&quot; type=&quot;text&quot; id=&quot;titulo&quot; size=&quot;60&quot; maxlength=&quot;100&quot; /&gt;
&lt;br /&gt;
&lt;label for=&quot;textarea&quot;&gt;Texto:&lt;/label&gt;
&lt;br /&gt;
&lt;textarea name=&quot;texto&quot; cols=&quot;60&quot; rows=&quot;5&quot; id=&quot;texto&quot;&gt;&lt;/textarea&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;label for=&quot;Submit&quot;&gt;&lt;/label&gt;
&lt;input type=&quot;submit&quot; name=&quot;Submit&quot; value=&quot;Inserir&quot; id=&quot;Submit&quot; /&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p><strong>Arquivo <font color="#0000ff">sa_aula5_cad_autores</font>.php:</strong></p>
<pre class="brush: php;">
&lt;?
if (isset($_POST[&quot;nome&quot;]))
{
$nome = $_POST[&quot;nome&quot;];
$senha = $_POST[&quot;senha&quot;];
$login = $_POST[&quot;login&quot;];

$conexao = mysql_connect(&quot;localhost&quot;,&quot;root&quot;,&quot;&quot;);
mysql_select_db(&quot;blogsa110&quot;,$conexao);
$sql = &quot;insert into autores (login, senha, nome) values ('$login', password('$senha'), '$nome')&quot;;
$resultado = mysql_query($sql,$conexao);
if ($resultado)
echo &quot;Usuário criado!&quot;;
else
echo &quot;O usuário não pode ser criado!&quot;;
}
?&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;&lt;a href=&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&lt;/a&gt;&quot;&gt;
&lt;html xmlns=&quot;&lt;a href=&quot;http://www.w3.org/1999/xhtml&quot;&gt;http://www.w3.org/1999/xhtml&lt;/a&gt;&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot; /&gt;
&lt;title&gt;Untitled Document&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;form id=&quot;form1&quot; name=&quot;form1&quot; method=&quot;post&quot; action=&quot;&quot;&gt;
&lt;label for=&quot;textfield&quot;&gt;Login:&lt;/label&gt;
&lt;input name=&quot;login&quot; type=&quot;text&quot; id=&quot;login&quot; size=&quot;20&quot; maxlength=&quot;20&quot; /&gt;
&lt;br /&gt;
&lt;label for=&quot;label&quot;&gt;Senha:&lt;/label&gt;
&lt;input name=&quot;senha&quot; type=&quot;password&quot; id=&quot;label&quot; size=&quot;20&quot; maxlength=&quot;20&quot; /&gt;
&lt;br /&gt;
&lt;label for=&quot;label2&quot;&gt;Nome:&lt;/label&gt;
&lt;input name=&quot;nome&quot; type=&quot;text&quot; id=&quot;label2&quot; size=&quot;20&quot; maxlength=&quot;50&quot; /&gt;
&lt;br /&gt;
&lt;label for=&quot;Submit&quot;&gt;&lt;/label&gt;
&lt;br /&gt;
&lt;input type=&quot;submit&quot; name=&quot;Submit&quot; value=&quot;Criar&quot; id=&quot;Submit&quot; /&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p><strong>Arquivo <font color="#0000ff">conexao.php</font>:</strong></p>
<pre class="brush: php;">
&lt;?
$conexao = mysql_connect(&quot;localhost&quot;,&quot;root&quot;,&quot;&quot;);
mysql_select_db(&quot;blogsa110&quot;,$conexao);
?&gt;
</pre>
<p><strong>Arquivo <font color="#0000ff">comente.php</font>:</strong></p>
<pre class="brush: php;">
&lt;?
if (isset($_POST[&quot;nome&quot;]))
{
$nome = $_POST[&quot;nome&quot;];
$email = $_POST[&quot;email&quot;];
$comentario = $_POST[&quot;comentario&quot;];
$data = date(&quot;Y-m-d&quot;);
$post = $_GET[&quot;p&quot;];
include(&quot;conexao.php&quot;);
$sql = &quot;insert into comentarios (nome, email, data, post, texto) values ('$nome','$email','$data','$post','$comentario')&quot;;
$resultado = mysql_query($sql,$conexao);
if ($resultado)
header(&quot;location: sa_aula8_index.php?envio=1&quot;);
else
echo &quot;Não foi possível inserir o comentário!&quot;;

}
?&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;&lt;a href=&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&lt;/a&gt;&quot;&gt;
&lt;html xmlns=&quot;&lt;a href=&quot;http://www.w3.org/1999/xhtml&quot;&gt;http://www.w3.org/1999/xhtml&lt;/a&gt;&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot; /&gt;
&lt;title&gt;Untitled Document&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;form id=&quot;form1&quot; name=&quot;form1&quot; method=&quot;post&quot; action=&quot;&quot;&gt;
&lt;label for=&quot;textfield&quot;&gt;Seu nome:&lt;/label&gt;
&lt;input type=&quot;text&quot; name=&quot;nome&quot; id=&quot;nome&quot; /&gt;
&lt;br /&gt;
&lt;label for=&quot;textfield&quot;&gt;Seu e-mail:&lt;/label&gt;
&lt;input type=&quot;text&quot; name=&quot;email&quot; id=&quot;email&quot; /&gt;
&lt;br /&gt;
&lt;label for=&quot;textarea&quot;&gt;&lt;br /&gt;
Comentários&lt;/label&gt;
:&lt;br /&gt;
&lt;textarea name=&quot;comentario&quot; cols=&quot;60&quot; rows=&quot;4&quot; id=&quot;comentario&quot;&gt;&lt;/textarea&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;label for=&quot;Submit&quot;&gt;&lt;/label&gt;
&lt;input type=&quot;submit&quot; name=&quot;Submit&quot; value=&quot;Enviar&quot; id=&quot;Submit&quot; /&gt;
&lt;br /&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p><strong>Arquivo <font color="#0000ff">editar.php</font>:</strong></p>
<pre class="brush: php;">
&lt;?
$codigo = $_GET[&quot;p&quot;];
include(&quot;conexao.php&quot;);
$sql = &quot;select * from posts where (codigo='$codigo')&quot;;
$resultado = mysql_query($sql,$conexao);
$infoPost = mysql_fetch_array($resultado);

if (isset($_POST[&quot;titulo&quot;]))
{
$titulo = $_POST[&quot;titulo&quot;];
$texto = $_POST[&quot;texto&quot;];

$sql = &quot;update posts set titulo='$titulo', texto='$texto' where codigo='$codigo' &quot;;
$resultado = mysql_query($sql,$conexao);
if ($resultado)
header(&quot;location: sa_aula8_index.php?edicao=1&quot;);
else
echo &quot;Não foi possível editar o post!&quot;;
}
?&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;&lt;a href=&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&lt;/a&gt;&quot;&gt;
&lt;html xmlns=&quot;&lt;a href=&quot;http://www.w3.org/1999/xhtml&quot;&gt;http://www.w3.org/1999/xhtml&lt;/a&gt;&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot; /&gt;
&lt;title&gt;Untitled Document&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;form id=&quot;form1&quot; name=&quot;form1&quot; method=&quot;post&quot; action=&quot;&quot;&gt;
&lt;label for=&quot;textfield&quot;&gt;Título:&lt;/label&gt;
&lt;input name=&quot;titulo&quot; type=&quot;text&quot; id=&quot;titulo&quot; value=&quot;&lt;?= $infoPost[&quot;titulo&quot;] ?&gt;&quot; size=&quot;60&quot; maxlength=&quot;100&quot; /&gt;
&lt;br /&gt;
&lt;label for=&quot;textarea&quot;&gt;Texto:&lt;/label&gt;
&lt;br /&gt;
&lt;textarea name=&quot;texto&quot; cols=&quot;60&quot; rows=&quot;5&quot; id=&quot;texto&quot;&gt;&lt;?= $infoPost[&quot;texto&quot;] ?&gt;
&lt;/textarea&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;label for=&quot;Submit&quot;&gt;&lt;/label&gt;
&lt;input type=&quot;submit&quot; name=&quot;Submit&quot; value=&quot;Salvar&quot; id=&quot;Submit&quot; /&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p><strong>Arquivo <font color="#0000ff">excluir.php</font>:</strong></p>
<pre class="brush: php;">
&lt;?
$codigo = $_GET[&quot;p&quot;];
include (&quot;conexao.php&quot;);
$sql = &quot;delete from posts where (codigo='$codigo')&quot;;
$resultado = mysql_query($sql,$conexao);
if ($resultado)
header(&quot;location: sa_aula8_index.php?exclusao=1&quot;);
else
echo &quot;Erro ao excluir post!&quot;;
?&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;&lt;a href=&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&lt;/a&gt;&quot;&gt;
&lt;html xmlns=&quot;&lt;a href=&quot;http://www.w3.org/1999/xhtml&quot;&gt;http://www.w3.org/1999/xhtml&lt;/a&gt;&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot; /&gt;
&lt;title&gt;Untitled Document&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Começando a programar em ASP]]></title>
<link>http://iranrodrigues.wordpress.com/2007/10/30/comecando-a-programar-em-asp/</link>
<pubDate>Wed, 31 Oct 2007 02:11:40 +0000</pubDate>
<dc:creator>Iran Rodrigues</dc:creator>
<guid>http://iranrodrigues.wordpress.com/2007/10/30/comecando-a-programar-em-asp/</guid>
<description><![CDATA[Como em toda primeira aula de um novo módulo, iniciamos com teoria (definição, características, etc.]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Como em toda primeira aula de um novo módulo, iniciamos com teoria (definição, características, etc.) acerca do ASP, que pode ser resumida assim:</p>
<blockquote><p>O ASP (de Active Server Pages) é uma estrutura de programação em Script que se utiliza de VBScript, JScript, PerlScript ou Python processadas pelo lado servidor para geração de conteúdo dinâmico na Web.</p>
<p>Ele roda nativamente em servidores Windows, através do serviço chamado de IIS (Internet Information Service) &#8211; o servidor web da Microsoft, ou do PWS (Personal Web Server) em ambientes com Windows 98. Além disso ele pode rodar em outras plataformas, como Linux no servidor Apache quando usando um Módulo de um programa como o Tomcat.</p>
<p>O script é interpretado no lado do servidor e o que é enviado ao lado do usuário/utilizador (navegador, por exemplo) é apenas a saída. que normalmente é uma linguagem de marcação como HTML, XHTML ou XML.</p>
<p>Linguagens como o Javascript e o VBScript podem ser processadas pelo navegador do visitante e, neste caso, este precisa ser compatível com a linguagem. Contudo, como o ASP é processado pelo servidor, há independência de navegadores, uma vez que eles só processarão HTML.</p>
<p>Através dessa tecnologia também é possível executar consultas a Banco de Dados, através da biblioteca de componentes ActiveX.</p>
<p>O uso desta tecnologia vem diminuindo sensivelmente pela maturação da tecnologia .NET, sendo gradativamente substituído pelo ASP.NET que proporciona uma gama maior de recursos e um melhor desempenho.</p>
<p>Fonte: <a href="http://pt.wikipedia.org/wiki/Asp">Wikipedia</a>.</p></blockquote>
<p>Após a apresentação formal ao ASP, vimos como instalar o componente IIS e como criar um diretório virtual, para que pudéssemos acessar via browser as páginas que viessem a ser produzidas.</p>
<p>Quem perdeu a aula, <a href="http://www.criarweb.com/artigos/381.php">veja aqui</a> como instalar o IIS e <a href="http://www.macoratti.net/aspn_dv.htm">aqui</a> como criar um diretório virtual.</p>
<p>Em seguida, vimos como construir nosso primeiro programa:</p>
<pre class="brush: vb;">
&lt;% Response.Write(&quot;Alô mundo!&quot;) %&gt;
</pre>
<p>Onde <em>Write</em> é um método do objeto <em>Response</em> que tem por finalidade enviar texto ao browser (da mesma forma que o <em>echo</em> para o PHP). O &#8220;&#60;%&#8221; e o &#8220;%&#62;&#8221; são os delimitadores da linguagem, que separam o que será processado no servidor &#8211; sendo, portanto, código VBScript &#8211; do que será processado diretamente pelo browser &#8211; HTML, Javascript, etc.</p>
<p>Pudemos perceber que o VBScript não requer um delimitador de instruções, como o ponto-e-vírgula (;) do PHP. Embora, caso prefiramos utilizar eventualmente mais de uma instrução em uma mesma linha, torna-se necessário o uso dos dois pontos (:) para separar as instruções que coexistem na mesma linha. Ex.:</p>
<pre class="brush: vb;">
&lt;% Response.Write(&quot;Alô &quot;) : Response.Write(&quot;mundo!&quot;) %&gt;
</pre>
<p>Vimos também como declarar variáveis:</p>
<pre class="brush: vb;">
&lt;% Dim a %&gt;
</pre>
<p>E vimos ainda a diretiva&#8230;</p>
<pre class="brush: vb;">
&lt;% Option Explicit %&gt;
</pre>
<p>&#8230;que torna obrigatória a declaração explícita de qualquer variável que venha a ser utilizada posteriormente.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Subtipos de dados do VBScript]]></title>
<link>http://iranrodrigues.wordpress.com/2007/11/04/subtipos-de-dados-do-vbscript/</link>
<pubDate>Sun, 04 Nov 2007 16:17:10 +0000</pubDate>
<dc:creator>Iran Rodrigues</dc:creator>
<guid>http://iranrodrigues.wordpress.com/2007/11/04/subtipos-de-dados-do-vbscript/</guid>
<description><![CDATA[Nesta aula, vimos que qualquer variável declarada no VBScript possui um só tipo: Variant. Portanto, ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Nesta aula, vimos que qualquer variável declarada no VBScript possui um só tipo: <em>Variant</em>. Portanto, para armazenar números (inteiros ou não), <em>strings</em>, valores lógicos (booleanos), ou quaisquer outros valores, não é necessário o uso de variáveis de tipo específico.</p>
<p>Na prática, uma mesma variável pode ser utilizada para armazenar valores diversos, como no exemplo a seguir:</p>
<pre class="brush: vb;">
Dim valor
'valor recebe número inteiro
valor = 10
Response.Write(valor)
Response.Write(&quot;&lt;br&gt;&quot;)
'valor recebe número real
valor = 25.3
Response.Write(valor)
Response.Write(&quot;&lt;br&gt;&quot;)
'valor recebe string
valor = &quot;Palavra&quot;
Response.Write(valor)
Response.Write(&quot;&lt;br&gt;&quot;)
'valor recebe booleano
valor = True
Response.Write(valor)
Response.Write(&quot;&lt;br&gt;&quot;)
'valor recebe data no formato mês/dia/ano
valor = #11/1/2007#
Response.Write(valor)
Response.Write(&quot;&lt;br&gt;&quot;)
'valor recebe hora
valor = #20:44:15#
Response.Write(valor)
Response.Write(&quot;&lt;br&gt;&quot;)
</pre>
<blockquote><p><font color="#808080">Obs.: Percebam que, ao contrário do PHP (onde datas são introduzidas como números ou <em>strings</em>), no VBScript podemos atribuir diretamente uma data e/ou hora a uma variável, devendo o valor estar entre tralhas (jogo-da-velha). Internamente este valor é armazenado como um número.</font></p></blockquote>
<p>A partir do valor atribuído a uma variável, é possível definir seu subtipo. Ou seja, embora uma variável não possua um tipo definido &#8211; sendo todas <em>Variant</em> &#8211; a depender do valor que ela armazena no momento, ela passa a pertencer a um subtipo. No código acima, a mesma variável &#8211; <em>valor</em> &#8211; recebeu valores diversos, o que resultou na constante mudança de seu subtipo.</p>
<p>Os subtipos em VBScript são os seguintes:</p>
<table width="100%">
<tr>
<th width="100">Subtipo</th>
<th>Descrição</th>
</tr>
<tr>
<td>Empty</td>
<td>O valor é zero para variáveis numéricas ou uma <em>string </em>de tamanho zero (&#8220;&#8221;), para variáveis de texto.</td>
</tr>
<tr>
<td>Null</td>
<td>A variável não contém dados válidos.</td>
</tr>
<tr>
<td>Boolean</td>
<td>Contém True (Verdadeiro) ou False (Falso).</td>
</tr>
<tr>
<td>Byte</td>
<td>Contém um número inteiro de 0 a 255.</td>
</tr>
<tr>
<td>Integer</td>
<td>Contém um número inteiro de -32.768 a 32.767.</td>
</tr>
<tr>
<td>Currency</td>
<td>Contém um número de -922.337.203.685.477,5808 a 922.337.203.685.477,5807.</td>
</tr>
<tr>
<td>Long</td>
<td>Contém um número inteiro de -2.147.483.648 a 2.147.483.647.</td>
</tr>
<tr>
<td>Single</td>
<td>Contém um número de ponto flutuante de precisão simples na faixa de -3,402823E38 a -1,401298E-45 para valores negativos ou de 1,401298E-45 a 3,402823E38 para valores positivos.</td>
</tr>
<tr>
<td>Double</td>
<td>Contém um número de ponto flutuante de precisão dupla na faixa de -1,79769313486232E308 a -4,94065645841247E-324 para valores negativos ou de 4,94065645841247E-324 a 1,79769313486232E308 para valores positivos.</td>
</tr>
<tr>
<td>Date (Time)</td>
<td>Contém um número representando uma data entre 1º de janeiro de 100 a 31 de dezembro de 9999.</td>
</tr>
<tr>
<td>String</td>
<td>Contém uma <em>string </em>de tamanho variável que pode conter até aproximadamente 2 bilhões de caracteres.</td>
</tr>
<tr>
<td>Object</td>
<td>Contém um objeto.</td>
</tr>
<tr>
<td>Error</td>
<td>Contém um código numérico de erro.</td>
</tr>
</table>
<p>Nas próximas aulas, veremos funções que permitem identificar o atual subtipo de uma variável, bem como realizar conversões entre estes subtipos.</p>
</div>]]></content:encoded>
</item>

</channel>
</rss>
