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#3. Loop infinito na leitura do RecordSet
while not rs.eof
response.write rs("campo")
rs.movenext
wend
else
response.write "Não tem registros!!!"
end if
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")) thenIsso evita que, não necessariamente aqui, você compare uma string com um número por engano. Isso depende de sua aplicação.
if CInt(request.querystring("id")) > 10 then
...
end if
end if
#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")Viu? Instanciei cn1 e chamei conn no RecordSet rs.
...
rs.open sql,conn
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)Essas são as que se demora mais para achar, mesmo porque o nome é parecido. Preste atenção!
dim ok
...
verificanum = ok
end function
... ' no restante do código...
if validanum(numero) then ...
#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!