segunda-feira, novembro 28, 2005

Tropeços comuns no ASP

#1. Inclusão de arquivos externos:
Sempre que utilizar um
<!-- #include file|virtual="comum.asp" -->
ele deve estar fora dos delimitadores do ASP, <% e %>. Acontece bastante de o pessoal colocar a diretiva dentro dos delimitadores e apresentar um erro de inclusão. No caso do PHP por exemplo, isso não acontece pois é uma instrução da linguagem. A inclusão de arquivos serve para evitar a repetição de instruções que ocorrem em várias páginas, como variáveis, funções, rotinas, e podem conter conteúdo HTML ou ASP (o conteúdo deste sim entre <% e %>).
Lembre-se: #include fora!

#2. Tentativa de exibir registro inexistente
No começo eu fazia isso direto! Abria conexão, instanciava os objetos e sem verifica se retornaria alguma coisa, inicava o loop de leitura. Volta e meia vinha aquele erro dizendo que o ponteiro estava no início e no fim do RecordSet. Para evitar basta perguntar antes de entrar na loop:
if not rs.eof
while not rs.eof
response.write rs("campo")
rs.movenext
wend
else
response.write "Não tem registros!!!"
end if
#3. Loop infinito na leitura do RecordSet
Se você viu aí em cima, tem um bendito de um rs.movenext. Esse cara serve para dizer para o ponteiro ir para o próximo registro do RecordSet. Sem ele o ponteiro ficará no primeiro registro para sempre, porque você pediu para imprimir/enviar para o navegador rs("campo") até chegar o fim dos registros, que nunca acontecerá. Vai dar Timeout! Não esqueça do bendito do MoveNext (rs.movenext considerando que o objeto de RecosrSet é rs). Ele é o cara.

#4. Comparação entre tipos diferentes
Eu tenho a mania de, quando resgatar um valor de uma variável vinda da URL (método GET), e esta for um valor numérico, convertê-la para fazer a comparação. Se na URL estiver pagina.asp?id=3 e eu quiser ver se é maior que 10, por exemplo, verifique antes se é um valor numérico e compare. Eu utilizo
if isNumeric(request.querystring("id")) then
if CInt(request.querystring("id")) > 10 then
...
end if
end if
Isso evita que, não necessariamente aqui, você compare uma string com um número por engano. Isso depende de sua aplicação.

#5. Chamada a um objeto, função ou rotina inexistentes
Ocorre normalmente quando copiamos códigos prontos de outro script nosso ou de um site na web. Eu, normalmene nomeio a conexão como cn ou conn, mas tem gente que utiliza conexao. Ou muitas vezes temos mais de uma conexão ao banco por script, sendo uma cn1 e outra cn2. Aí quando copiamos, esquecemos de alterar, dando, para variar, em erro!
set cn1 = server.createobject("adodb.connection")
...
rs.open sql,conn
Viu? Instanciei cn1 e chamei conn no RecordSet rs.
Também acontece isso quando você começa criando uma função chamada "validanum()" e aí você descobre uma já pronta na internet que faz exatamente o que você quer chamada "verificanum()", só que no restante do código você esquece de alterar.
function verificanum(num)
dim ok
...
verificanum = ok
end function

... ' no restante do código...

if validanum(numero) then ...
Essas são as que se demora mais para achar, mesmo porque o nome é parecido. Preste atenção!

#6. Tags HTML misturadas com código do ASP
No começo, quando estava aprendendo a programas, eu fazia muito isso. Com a prática isso acabou, mas eu lembro muito bem e sei que muita gente faz isso. Veja o exemplo desse Response.Write:
response.write strnome & <br />
strnome é uma variável, mas <br /> é uma tag HTML que deve ser enviada ao navegador e não interpretada. O correto seria:
response.write strnome & "<br />"
Você nunca fez isso? Sempre tem uma primeira vez!

quinta-feira, novembro 24, 2005

A tal da Web 2.0

Esse é um novo conceito de que a web está, ou deveria estar, ligada ao conhecimento geral com acessiblidade global. A estrutura do conteúdo deve ser simples, fácil de se entender e de se diferenciar cada pedaço dela. O conteúdo deve ser apresentado de forma clara e intuitiva, usável e acessível para qualque um em aualquer lugar com qualquer dispositivo.
Todo o conhecimento deve estar ligado, como é na vida real, agregando assim informações e possibilitando uma pesquisa mais completa, podendo ser alterada quando necessário. Isso serve para todos os tipos de mídia como textos, sons e vídeos, sempre lembrando que cada um conhece um pouco ou muito sobre determinado assunto, mas não tudo.
Para os programadores, além de integrar melhor execuções no cliente com execuções no servidor, é bom utilizar XML e separar conteúdo de apresentação, criando sistemas pensando em compartilhamento da informação, dentro dos padrões estabelecidos para que no momento ou futuramente possa adicionar módulos e trabalhar em conjunto com outros serviços espalhados por aí. Sistemas na plataforma web são o futuro e devem estar sempre em desenvolvimento.
Essa nova web traz um espírito colaborativo em que tudo e todos podem se conversar, desenvolver e criar. Unidos. Veja o exemplo da Wikipedia, uma enciclopédia mundial em que os usuários alimentam o banco de informações. Todo conhecimento deve ser livre (sites corporativos, páginas pessoais ou blogs). A web é livre, assim como todos nós.

Estes artigos são bem legais e vale a pena lê-los:
http://www.forumpcs.com.br/coluna.php?b=136211
http://www.carreirasolo.org/archives/voce_sabe_o_que_e_we.html