• Olá Visitante, se gosta do forum e pretende contribuir com um donativo para auxiliar nos encargos financeiros inerentes ao alojamento desta plataforma, pode encontrar mais informações sobre os várias formas disponíveis para o fazer no seguinte tópico: leia mais... O seu contributo é importante! Obrigado.

Workshop de ASP

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Exportar dados de Access a MySQL



Explicamos uma maneira prática de migrar dados de uma base de dados Access a um servidor de dados MySQL.

Por Carlos Cuenca Díaz


Não é estranho que tenhamos começado a fazer os nossas primeiros sites utilizando uma base de dados simples como Access. Também não é nada estranho que, chegado o momento, passemos a coisas mais serias e nos passemos a um servidor de dados como MySQL. Aqui mostramos uma maneira bastante práctica de migrar os dados de uma base Access a MySQL.

Para exportar uma tabela a MySQL, há que abrir a base de dados e seleccionar a tabela. Depois, fazer click sobre Ficheiro->Exportar. Na janela de exportar, na opção de guardar como tipo, seleccionar ODBC databases().

Feito isto, aparece uma janela que nos pergunta o nome que lhe queremos dar a tabela MySQL, pré-definidamente aparece o mesmo.

access2000_mysql_2.gif



Faz click sobre "Aceitar", e aparecerá uma janela na que se pede que selecciones a origem de dados ODBC:



Nota: É possível que, em algum caso, os dados da base nos sistemas MySQL e Access não sejam totalmente compatíveis e se produza alguma anomalia ao exporta-los. Realmente é só uma hipótese que pensamos, ainda que nas provas que realizámos não vimos nenhum tipo de problema. Claro que os campos com os que trabalhámos não eram estranhos.

access2000_mysql_3.gif


Seleccionar origem de dados, e dentro, o nome da fonte de dados que criámos anteriormente. Uma vez seleccionado, fazer click em "Aceitar", aparece um ecrã de configuração do driver que nos permitirá, se queremos, configurar algumas opções sobre o driver. Se não queremos configurar nada, faz click sobre "OK" e os dados começarão a exportar-se.
Nota: se estamos a exportar dados a um servidor de bases de dados alojado nalgum provedor de hosting, temos d éter em conta que estes não sempre incluem acesso remoto ao servidor da base de dados, ou requer um aviso explicito por parte do cliente para a sua configuração.


 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Mandar e-mails pelo ASP


Opções para o envio de correios eletrônicos através do servidor ASP.

Por Miguel Angel Alvarez - Tradução de JML




Uma das tarefas mais habituais e que são mais úteis no trabalho com ASP e em geral em qualquer linguagem de programação de servidor, é o envio de e-mails desde o próprio servidor de páginas web.
Referência: No caso de necessitarmos programar o envio de correio eletrônico em nossa página utilizando PHP, também temos publicado um artigo em CriarWeb.com chamado Mandar e-mails pelo PHP.


O caso mais direto para utilizar um envio de e-mails através do servidor consiste em mandar dados de um formulário preenchido pelo visitante aos administradores da página. Estes dados podem ser enviados colocando na etiqueta <form> o atributo action="mailto:correio@seudominio.com", tal como explicamos nos capítulos de criação de formulários em nosso manual de HTML. O problema deste tipo de envio consiste em que tem que ser realizado através de um correio eletrônico que o usuário tenha configurado em seu computador e, no caso de que não tenha nenhum e-mail configurado, não se poderá realizar o envio. Se enviarmos o e-mail com o servidor, sempre se poderá realizar o envio sem problemas.

Outro caso no qual poderíamos utilizar o envio de mensagens com o servidor é a confirmação de uma compra em uma loja virtual, ou o envio de um boletim de novidades mensal aos correios dos usuários que temos no banco de dados.

Como enviar correios com ASP

Para o envio de correios eletrônicos com ASP devemos utilizar um componente especial do servidor.


Algum componente que podemos assinalar:

CDONTS: O mais popular componente porque o entregam nas distribuições básicas do motor ASP, apesar de não estar incluído de casa em XP profissional.
Nota: Se quisermos instalar a biblioteca CDONTS em WinXP podemos conseguir no arquivo dll de outro servidor e move-lo ao diretório system do XP. Logo, registramos como se indica no artigo Componentes de servidor.


AspEmail Componente comercial da empresa Persits, que inclui mais facilidades que CDONTS.

AspMail. É outro componente comercial para o envio de correios. De serverobjects.com.

Estas são algumas das opções, pelo menos mais comuns. Para aprender a manejar estes componentes o melhor é acessar às páginas das empresas que os distribuem, já que guardam documentação muito boa.

A escolha de um ou outro componente depende um pouco do servidor em que vamos trabalhar. Muitos provedores de hosting dispõem de componentes instalados em seus servidores para realizar estas tarefas, neste caso a escolha estaria clara, pois deveríamos utilizar esse componente. Deveríamos, então, perguntar ao nosso provedor de hosting qual é a opção que devemos utilizar. No caso de não ter nenhum componente instalado, podemos provar o CDONTS, que poderíamos utiliza-lo à princípio, em qualquer caso.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Criar banco de dados Access com ASP


Exemplos para criar um arquivo .mbd (banco de dados Access) através de um script ASP.

Por Luis Marcelo Sosa





Estas são umas pautas de trabalho e umas referências que achei úteis na hora de solucionar um problema em ASP, consistente em criar um banco de dados em Access (arquivo .mdb) desde zero, ou seja, criar o arquivo .mdb vazio para, uma vez criadas também as tabelas, trabalhar com o banco de dados como se tivesse sido criada com Access.

Logicamente, com Access é muito mais simples criar os bancos de dados, porém este mecanismo tem duas vantagens. Uma simples: que você não necessita ter Access para criar os bancos de dados, e outra mais interessante: que você pode criar os bancos de dados em linha e dinamicamente, de modo que fiquem salvos no seu servidor para realizar os trabalhos que estime oportuno.
Nota: Pode-se criar um banco de dados de Access através de Visual Basic, ASP, ou outros meios porque na verdade o que se está utilizando é o motor Jet, que são umas DLL que têm todos os sistemas Windows para manejar os arquivos .mdb.


Métodos para criar um BD Access 2000

Existem dois métodos para criar um banco de dados Access: ADO e DAO. Vamos ver um pequeno exemplo de cada um.

Atenção: Para os dois casos, os diretórios têm que ter permissões de escritura para que funcione corretamente.

Exemplo em ADO, Requer MDAC 2.0

Para o exemplo necessita-se ter instalado o Microsoft Data Access Component (MDAC 2.0), que está incluído com a instalação de Microsoft Access 2k, ou, senão, baixar a última versão do (MDAC) em http://www.microsoft.com/data (onde também se encontra o Component Checker para saber que versão você tem instalada).

Segundo informação de Microsoft a versão 1.5 do MDAC contem alguns bugs, portanto recomendam atualiza-lo.

Dim bancodados
Set bancodados = CreateObject("ADOX.Catalog")
bancodados.Create "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Engine Type=5;Data Source=" & Server.MapPath("prova.mdb")
Set bancodados = Nothing

Na cadeia utilizada para criar o banco de dados, o valor Engine Type indicado (5) serve para que o banco de dados tenha formato Access 2000. Podíamos ter colocado outros valores para outras versões do motor, por exemplo 3 para Access 95, ou o valor 4 para Access 97.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Exemplo em DAO, requer DAO

Necessita-se DAO 3.6 ou DAO 3.5. No caso de utilizar DAO 3.5, há que modificar "DAO.DBEngine.36" por "DAO.DBEngine.35"

Dim motor
Set motor = CreateObject("DAO.DBEngine.36")
motor.CreateDatabase Server.MapPath(NomBD&".mdb"), ";LANGID=0x0409;CP=1252;COUNTRY=0", 64
Set motor = Nothing

O terceiro parâmetro do método para criar o banco de dados (64) é para indicar a versão do banco de dados, neste caso Access 2000. No caso de desejar outro formato pode-se modificar por exemplo, a 32 no caso de Access 97 ou16 para Access 95.

Conclusão

As provas foram feitas em 2 PCs com Windows Professional 2000 (SP3) e Office 2000 (SP3) instalado e funcionaram perfeitamente, o mesmo que no meu servidor (hosting contratado) e no de Brinkster (conta gratuita) sem nenhum drama. Também foi provado com êxito no estúdio de CriarWeb.com, utilizando o sistema Windows 98 e o servidor Personal Web Server.

Por último, aqui pode-se ver um exemplo que fiz para gerar as db desde ADO ou DAO (3.6). O código está bastante comentado à respeito do funcionamento e os requerimentos do servidor.

<%@LANGUAGE="VBSCRIPT"%>
<%
Gerar = Request.Form("action")
if Gerar <> "" then

On Error Resume Next

Metodo = Request.Form("metodo")
Formato = Request.Form ("formato")
NomBD = Request.Form ("nomBD")

' ************* Comprovamos segundo que método ************

if Metodo = "ADO" then

if Formato = "1" then
FormatoBD = 5
FormatoN = "Ms Access 2000"
elseif Formato = "2" then
FormatoBD = 4
FormatoN = "Ms Access 97"
elseif Formato = "3" then
FormatoBD = 3
FormatoN = "Ms Access 95"
end if
' **********************
' Para os dois casos os diretorios tem que
' ter permissoes de escritura para que funcione
' corretamente.
' **********************
' Exemplo em ADO, requer MDAC 2.0
'
' para saber que versao esta instalada no sistema
' pode usar o Component Checker Tool de
' Microsoft
' http://www.microsoft.com/data/download.htm#CCinfo
' ou baixar a ultima versao em
' http://www.microsoft.com/data/download.htm
'
' Jet10 = 1
' Jet11 = 2
' Jet20 = 3 <----------- para Access 95
' Jet3x = 4 <------------ para Access 97
' Jet4x = 5 <------------ para Access 2000
' **********************
' ***** Comeco ADO ************
Dim Catalog
Set Catalog = CreateObject("ADOX.Catalog")
Catalog.Create "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Engine Type="&FormatoBD&";Data Source="&Server.MapPath(NomBD&".mdb")
Set Catalog = Nothing
' ************ Fin ADO *****************

else
if Formato = "1" then
FormatoBD = 64
FormatoN = "Ms Access 2000"
elseif Formato = "2" then
FormatoBD = 32
Formato = "Ms Access 97"
elseif Formato = "3" then
FormatoBD = 16
FormatoN = "Ms Access 95"
end if

****************
' Exemplo em DAO, requer DAO 3.6 ou DAO 3.5 para
' DAO 3.5 modificar "DAO.DBEngine.36" por
' "DAO.DBEngine.35"
'
' dbVersao10 = 1
' dbVersao11 = 8
' dbVersao20 = 16 <------------ para Access 95
' dbVersao30 = 32 <------------ para Access 97
' dbVersao40 = 64 <------------ para Access 2000
****************
' ********** Comeco DAO **********
Dim Engine
Set Engine = CreateObject("DAO.DBEngine.36")
Engine.CreateDatabase Server.MapPath(NomBD&".mdb"), ";LANGID=0x0409;CP=1252;COUNTRY=0", FormatoBD
Set Engine = Nothing
' ********** Fim DAO ***********
end if
end if
%>

<html>
<head>
<title>Criar *.mdb</title>
<style type="text/css">
<!--
body {
font-family: Arial, Helvetica, sans-serif; font-size: x-small
}
-->
</style>
</head>
<body bgcolor="#FFFFFF" text="#000000">

<%
if Gerar <> "" then
if Err then
Response.Write "Houve um erro.<br><br>"
Response.Write "<u>Error:</u> " & Err.Description & "<br>"
Response.Write "<u>Error N°:</u> " & Err.Number &"."
else
Response.Write "Base de datos <u>"& NomBD &"</u> fué creada exitosamente!!<br>"
Response.Write "Formato: "&FormatoN & "<br>"
Response.Write "Metodo usado: "&Metodo
end if
else
%>

<!-- Formulario de criacao //-->
<form name="criador" action="criar_db.asp" method="POST">
Nome do BD:
<input type="text" name="nomBD"><br>
Formato:
<select name="formato">
<option value="1" selected>Access 2000</option>
<option value="2">Access 97</option>
<option value="3">Access 95</option>
</select><br>

Método:<br>
<input type="radio" name="metodo" value="ADO" checked><small>ADO (requer MDAC 2.0)</small><br>
<input type="radio" name="metodo" value="DAO"><small>DAO (requer DAO 3.6)</small><br><br>

<input type="submit" value="Criar">
<input type="hidden" name="action" value="si">
</form>
<!-- Fim formulario //-->

<%
end if
%>

</body>
</html>
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Passagem de variáveis pela URL



Vemos como transferir variáveis de uma página a outra através da URL.

Por Miguel Angel Alvarez - Tradução de JML





Loops e condições são úteis para processar os dados dentro de um mesmo script. Mas, num sítio de internet, as páginas visitadas e os scripts utilizados são numerosos. Frequentemente precisamos que os nossos scripts estejam conectados uns com os outros e que utilizem variáveis comuns. Por outro lado, o usuário interage por meio de formulários cujos campos têm de ser processados para poder dar resposta. Todo este tipo de factores dinâmicos têm de ser eficazmente regulados por uma linguagem como PHP.

É possível que se tenham apercebido que as variáveis de um script têm uma validez exclusiva para o script e que se torna impossível conservar o seu valor quando executamos outro ficheiro diferente ainda que ambos estejam ligados. Existem várias formas de enviar as variáveis de uma página a outra de maneira que a página destino reconheça o valor atribuído pelo script de origem:

Passagem de variáveis pela URL

Para passar as variáveis de uma página a outra podemos fazê-lo introduzindo a variável dentro do link hipertexto da página destino. A sintaxe seria a seguinte:

<a href="destino.php?variavel=valor1&variavel2=valor2&...">Meu link</a>

Podem observar que estas variáveis não possuem o símbolo $ à frente. Isto é por que, na realidade, este modo de passar variáveis não é específico de PHP, sendo utilizado por outras linguagens.

Agora a nossa variável pertence também ao entorno da página destino.php e está pronta para a sua utilização.
Nota: Nem sempre se definem automaticamente as variáveis recebidas por parâmetro nas páginas web, depende de una variável de configuração de PHP: register_globals, que tem de estar activada para que assim seja. Ver comentários do artigo ao final da página para mais informação.


Para resolver possíveis dúvidas, vejamos isto em forma de exemplo. Teremos, pois duas páginas, origem.html (não é necessário dar-lhe extensão PHP pois não há nenhum tipo de código) e destino.php:

<HTML>
<HEAD>
<TITLE>origem.html</TITLE>
</HEAD>
<BODY>
<a href="destino.php?comprimento=ola&texto=Isto é uma variável de texto">Passo variáveis comprimento e texto à página destino.php</a>
</BODY>
</HTML>

<HTML>
<HEAD>
<TITLE>destino.php</TITLE>
</HEAD>
<BODY>
<?
echo "Variável \$comprimento: $comprimento <br>\n";
echo "Variável \$texto: $texto <br>\n"
?>
</BODY>
</HTML>

Executar exemplo

$_GET

Relembramos que é possível compilar numa só variável tipo array o conjunto de variáveis que foram enviadas ao script por este método a partir da variável de sistema $_GET, que é um array associativo. Utilizando-o ficaria assim:

<?
echo "Variável \$comprimento: $_GET_["comprimento"] <br>\n";
echo "Variável \$texto: $_GET["texto"] <br>\n"
?>

Nota: Ainda que possamos recolher variáveis com este array associativo ou utilizar directamente as variáveis que se definem na nossa página, é mais seguro utilizar $_GET por duas razões, a primeira é que assim temos a certeza que essa variável vem realmente da URL e a segunda, que assim o nosso código será mais claro quando o quisermos ler, porque ficará especificado que estamos a receber essa variável pela URL.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Uso de CDONTS para script de recomendar a um amigo em ASP




Uso do componente de servidor CDONTS em ASP para o envio de correio eletrônico com o servidor. Exemplo de script para que os visitantes possam recomendar a página a um amigo.

Por Fernando Ortiz





Este é um exemplo completo e bastante simples de como enviar um correio usando o componente CDONTS de IIS.

Tal componente está presente em muitas das versões de Windows em seu modo servidor, como Windows NT 4 ou Windows 2000, mas não assim em Windows 98, por não dispor de um servidor de envio de correio (SMTP). Atenção, que no Windows NT e 2000 teráimos que ter o servidor SMTP corretamente configurado e os usuários de Windows XP, que não dispõem essa ferramenta desde o princípio, embora poderiam obtê-la através de outro sistema Windows.

Script para recomendar a um amigo

O exercício seguinte é um script que permite mandar um e-mail desde nossa página a um amigo do visitante que o deseje. É um dos típicos sistemas de "recomenda a um amigo".

Os dados para preencher o e-mail, colocaremos a mão. Se queremos enviar os dados de um formulário só temos que recolher com as instruções tão simples como estas:

cBody = Request.Form("Body")
cPara = = Request.Form("Amigo")

E agora o exemplo, no qual se mostra como enviar a um amigo, uma cópia e uma cópia oculta, o comum.

<%@ Language=VBScript%>
<html>

<head>
<title>Enviar a um amigo</title>

</head>
<body><%
Dim cBody, n

For Each n In Request.Form
cBody = cBody & n & ": " & Request.Form(n) & chr(13)
Next

Set oCDO = Server.CreateObject("CDONTS.NewMail")

'Atribuimos as propriedades ao objeto
oCDO.From = "fernando@seudominio.com"
oCDO.To = "foc@seudominio.com"
oCDO.Subject = "Assunto da mensagem"
oCDO.Body = cBody
'oCDO.Cc = "resal@seudominio.com;webmaster@seudominio.com"
oCDO.Bcc = "quinqui@seudominio.com"
'oCDO.MailFormat = 0

oCDO.Send

Set oCDO = Nothing 'Liberar...
'Mostramos mensagem de que se enviou com sucesso.
Response.Write "Foi enviada Ok, que fácil!!"

%>
</body>
</html>

Bom, amigos, espero que possa servir, como pode-se ver, há pouco o que programar!

 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Servidores nos EUA e o asp




Quando programamos em ASP em servidores que não são de nosso país temos que ter em conta uma série de detalhes de internacionalização dos números, datas, etc.

Por Fabio Núñez Iturriaga





Quando usamos asp em servidores americanos há que ter em conta alguns pequenos detalhes na hora de programar. Principalmente estes problemas derivam-se dos formatos de data e dos formatos de decimais.

Problemas com as datas:

Ao ser o asp uma linguagem de servidor, ou seja, que o servidor é o que o interpreta e nos devolve código html. O problema vem quando o servidor de USA, nos interpreta as datas, e não as devolve com o formato americano, ou seja:

formato americano: mês/dia/ano
formato brasileiro: dia/mês/ano
Isto pode dar lugar a confusões entre os usuários da web, que podem ver a data de um artigo e confundi-la.

Problemas com os decimais:

O outro problema vem dado pelo formato dos decimais dos números, já que no formato americano os decimais se representam por vírgula e em brasileiro se determinam por ponto.

formato americano: 2,78
formato brasileiro: 2.78

Solução aos problemas:

Todos estes problemas têm uma solução mais fácil do que a esperada já que há que colocar somente uma linha de código em cada página para consertar este problema:

<%@LCID = 1034%>

Este código deve substituir ao habitual que colocamos em toda página asp:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>

O número de LCID acima, 1046, colocará os ajustes de lugar sobre o servidor ao brasileiro, mudar o lugar a seu próprio país o qual você terá que usar a Carta LCID no fundo desta página para encontrar o que seu próprio lugar ID numera e logo substituir 1034 pelo seu próprio número de LCID.

Para que isto funcione é necessário que estejam instalados em seu servidor os arquivos necessários para a mudança de idioma, normalmente têm múltiplas línguas instaladas, mas no caso de colocar uma não instalada em seu servidor receberá o seguinte erro 'LCID especificado não é disponível'. Nesse caso, você só poderá solucionar isto entrando em contato com o administrador de seu servidor para que a instale.

Isto só mudará o formato mostram as datas, vezes, e divisas, porém não moverá datas a outra zona horária.
Locale Description LCID Locale Description LCID
Afrikaans 1078 Icelandic 1039
Albanian 1052 Indonesian 1057
Arabic - United Arab Emirates 14337 Italian - Italy 1040
Arabic - Bahrain 15361 Italian - Switzerland 2064
Arabic - Algeria 5121 Japanese 1041
Arabic - Egypt 3073 Korean 1042
Arabic - Iraq 2049 Latvian 1062
Arabic - Jordan 11265 Lithuanian 1063
Arabic - Kuwait 13313 FYRO Macedonian 1071
Arabic - Lebanon 12289 Malay - Malaysia 1086
Arabic - Libya 4097 Malay - Brunei 2110
Arabic - Morocco 6145 Maltese 1082
Arabic - Oman 8193 Marathi 1102
Arabic - Qatar 16385 Norwegian - Bokmål 1044
Arabic - Saudi Arabia 1025 Norwegian - Nynorsk 2068
Arabic - Syria 10241 Polish 1045
Arabic - Tunisia 7169 Portuguese - Portugal 2070
Arabic - Yemen 9217 Portuguese - Brazil 1046
Armenian 1067 Raeto-Romance 1047
Azeri - Latin 1068 Romanian - Romania 1048
Azeri - Cyrillic 2092 Romanian - Moldova 2072
Basque 1069 Russian 1049
Belarusian 1059 Russian - Moldova 2073
Bulgarian 1026 Sanskrit 1103
Catalan 1027 Serbian - Cyrillic 3098
Chinese - China 2052 Serbian - Latin 2074
Chinese - Hong Kong SAR 3076 Setsuana 1074
Chinese - Macau SAR 5124 Slovenian 1060
Chinese - Singapore 4100 Slovak 1051
Chinese - Taiwan 1028 Sorbian 1070
Croatian 1050 Spanish - Spain 1034
Czech 1029 Spanish - Argentina 11274
Danish 1030 Spanish - Bolivia 16394
Dutch - the Netherlands 1043 Spanish - Chile 13322
Dutch - Belgium 2067 Spanish - Colombia 9226
English - Australia 3081 Spanish - Costa Rica 5130
English - Belize 10249 Spanish - Dominican Republic 7178
English - Canada 4105 Spanish - Ecuador 12298
English - Caribbean 9225 Spanish - Guatemala 4106
English - Ireland 6153 Spanish - Honduras 18442
English - Jamaica 8201 Spanish - Mexico 2058
English - New Zealand 5129 Spanish - Nicaragua 19466
English - Phillippines 13321 Spanish - Panama 6154
English - South Africa 7177 Spanish - Peru 10250
English - trinidad 11273 Spanish - Puerto Rico 20490
English - United Kingdom 2057 Spanish - Paraguay 15370
English - United States 1033 Spanish - El Salvador 17418
Estonian 1061 Spanish - Uruguay 14346
Farsi 1065 Spanish - Venezuela 8202
Finnish 1035 Sutu 1072
Faroese 1080 Swahili 1089
French - France 1036 Swedish - Sweden 1053
French - Belgium 2060 Swedish - Finland 2077
French - Canada 3084 Tamil 1097
French - Luxembourg 5132 Tatar 1092
French - Switzerland 4108 thai 1054
Gaelic - Ireland 2108 Turkish 1055
Gaelic - Scotland 1084 Tsonga 1073
German - Germany 1031 Ukrainian 1058
German - Austria 3079 Urdu 1056
German - Liechtenstein 5127 Uzbek - Cyrillic 2115
German - Luxembourg 4103 Uzbek - Latin 1091
German - Switzerland 2055 Vietnamese 1066
Greek 1032 Xhosa 1076
Hebrew 1037 Yiddish 1085
Hindi 1081 Zulu 1077
Hungarian 1038







 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Como fazer zonas aleatórias em asp




Script em ASP para criar uma página com alguns conteúdos que mudem aleatoriamente em cada visita.

Por Fabio Núñez Iturriaga





Uma idéia interessante para dar um pouco de dinamismo adicional a um web design é criar áreas onde se mostre um conteúdo aleatório, que mude cada vez que se carrega a página.

Um exemplo desta idéia pode ser mostrar uma imagem no cabeçalho da página diferente, mas não ficamos por aí, também podemos incluir mensagens promocionais ou links distintos que acompanhem à imagem.

O exercício é muito simples. Deve-se gerar um número aleatório, para o que utilizaremos algumas funções matemáticas de ASP, e uma estrutura condicional para mostrar u conteúdo diferente dependendo do número aleatório.

O código

As zonas aleatórias em ASP se conseguiriam com um código parecido ao seguinte:

<%
'Definimos uma constante para representar o número total de zonas aleatórias.

Const totalzonas = 4

' Iniciamos o gerador do número ao acaso.
' Este é o comando que nos dá números ao acaso quando utilizamos Rnd mais adiante.

Randomize


' A fórmula para gerar um número ao acaso em uma gama é:
'
' Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
'
' onde upperbound seria o número máximo a alcançar
' e lowerbound seria o número mínimo a alcançar
' em nosso caso o lowerbound será de 1
' e o resto do upperbound - o lowerbound será representado pela
' constante totalzonas, que determina o número total de zonas

Dim zona ' variável que determinará a zona aleatória

' a forma descrita determinará um número ao acaso entre 1 e o número de zonas(4)

zona = Int((totalzonas * Rnd) + 1)

' A seguir através de uma condicional if determinaremos que zona se mostrará
%>

<% if zona=1 Then ' se o número aleatório for um 1 me mostrará a seguinte zona%>

<b>zona1</b>

<%End if%>

<% if zona=2 Then ' se o número aleatório for um 2 me mostrará a seguinte zona%>

<b>zona2</b>

<%End if%>

<% if zona=3 Then ' se o número aleatório for um 3 me mostrará a seguinte zona%>

<b>zona3</b>

<%End if%>

<% if zona=4 Then ' se o número aleatório for um 4 me mostrará a seguinte zona%>

<b>zona4</b>

<%End if

' O beneficio de usar este método aleatório é que não só se pode fazer
' imagens aleatórias, como também se pode fazer qualquer coisa que seja aleatória
' um flash, uma tabela, um formulário.... simplesmente há que colocá-lo
' entre a condicional

%>
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Selects dependentes com ASP e banco de dados




Sistema para que as opções de um select se vinculem ao que foi selecionado em outro select, mantendo todas as opções em um banco de dados.

Por Eugenia Bahit





Este é um sistema de "selects dependentes" (ou seja, que interagem um com outro), tomando de uma só vez os dados desde uma banco de dados Access.

Só será necessário 1 módulo ASP (selecs_dependentes.asp) e o banco de dados correspondente (ssdd.mdb).
Referência: Temos outro exemplo de selects dependentes no qual se trabalha unicamente do lado do cliente com Javascript, para quem se interessar de mais uma opção como essa.


Neste exemplo, se trabalhará com dois selects:

- Um de países
- Outro de províncias ou estados
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Banco de dados ssdd.mdb
O banco de dados deverá conter duas tabelas relacionadas entre si.
TABELA CAMPOS
paises idPais (autonumérico) [chave principal]
pais (texto)
provincias pais (numero)
idProvincia (autonumérico) [chave principal]
provincia (texto)


Com uma relação entre tabelas como esta:
select1.gif




selects_dependentes.asp

A página ASP é bastante simples de entender. Trata-se de um script para construir os dois campos select a partir dos valores do banco de dados.

A primeira vez que carregar a página se mostrará unicamente o primeiro campo select com os valores que extrai da tabela de países. Incluímos ao campo select o evento Javascript onchange para que, no momento que mude a opção selecionada, se carregue a página passando por parâmetro o identificador do país selecionado.

A segunda vez que carregar a página -porque foi mudado o valor do primeiro select- receberá pela URL o identificador do país selecionado. Então mostra o segundo select com as opções relacionadas com o país que recebe por parâmetro, ou seja, se foi selecionado o país Argentina, se carregará unicamente as províncias desse país.

O código do exemplo ficaria desta maneira:

<form name=formulario>
PAÍS: <select name=idPais onChange="location.href('selects_dependentes.asp?idPais=' + formulario.idPais.options[formulario.idPais.selectedIndex].value)">
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("ssdd.mdb"))

SQL_pais="select * from paises order by pais asc"
set RS_pais=createobject("ADODB.Recordset")
RS_pais.open SQL_pais,conn
do while not RS_pais.eof
pais = RS_pais("pais")
idPais = RS_pais("idPais")
p = request.querystring("pais")
if p <> "" then

if p = pais then
response.write "<option value="&idPais&"&pais="&pais&" selected>"&pais&"</option>"
elseif p <> pais then
response.write "<option value="&idPais&"&pais="&pais&">"&pais&"</option>"
end if
else
response.write "<option value="&idPais&"&pais="&pais&">"&pais&"</option>"
end if

RS_pais.movenext
loop
RS_pais.close
%>
</select>
<% if request.querystring("idPais") <> "" then %>
PROVINCIA: <select name=localizacao>
<%
SQL_prov="select * from provincias where pais="&request.querystring("idPais")&" order by provincia asc"
set RS_prov=createobject("ADODB.Recordset")
RS_prov.open SQL_prov,conn
do while not RS_prov.eof

pais = request.querystring("pais")
provincia = RS_prov("provincia")
%>
<option value="<%=provincia%>, <%=pais%>"><%=provincia%></option>
<%
RS_prov.movenext
loop
RS_prov.close
%>
</select><% end if %></form>



 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Sistema de Recomendação em ASP com CDONTS



Este sistema permite ao usuário enviar pela web, um e-mail a outra pessoa, convidando-a a visitar o site.

Por Eugenia Bahit





Este sistema permite ao usuário enviar pela web, um e-mail a outra pessoa, convidando-a a visitar o site.

Só requer um módulo ASP que se encarregará de mostrar o formulário de recomendação, enviar o e-mail e devolver um acuse de envio.
Nota: Requer que seu servidor suporte CDONTS Mail.


recomendar.asp

<!-- formulário de recomendação -->

<% if request.querystring("acao") = "" then

%>

<form method="post" action="recomendar.asp?acao=enviar" name="recomende">

<b>Recomende este site</b><br><br>

Seu Nome: <input type="text" name="n_remetente" size="10"><br>

Seu E-mail: <input type="text" name="e_remetente" size="20"><br>

Nome do seu amigo: <input type="text" name="n_destinatario" size="10"><br>

E-mail do seu amigo: <input type="text" name="e_destinatario" size="20"><br><br>

<input type="submit" value="Recomendar">

</form>


<!-- envio do formulário e acuse de envio ou informação de erros -->

<%

elseif request.querystring("acao") = "enviar" then


' recolho as variaveis que veem pelo formulario

n_destinatario = request.form("n_destinatario")

e_destinatario = request.form("e_destinatario")

n_remetente = request.form("n_remetente")

e_remetente = request.form("e_remetente")


' se os campos não estão vazios

if n_destinatario <> "" and e_destinatario <> "" and n_remetente <> "" and e_remetente <> "" then


' indique a url do site

url = "http://www.seusite.com"

' indique o nome do seus site

nome_do_site = "Seu Site"

' indique o assunto da mensagem

assunto = n_remetente & " lhe recomenda um site"


' redija a mensagem

mensaje = "Ola " & n_destinatario & ":<br>"

mensagem = mensagem & n_remetente & " lhe recomenda que visite <b>" & nome_do_site & "</b>.<br>"

mensagem = mensagem & "Poderá vê-lo em <a href='" & url & "'>" & url & "</a><br><br>Saudações!"


' começa envio

Set envio = Server.CreateObject ("CDONTS.NewMail")


' indica que o e-mail é em formato HTML
envio.BodyFormat = 0
envio.MailFormat = 0


' envia a mensagem

envio.Send e_remetente, e_destinatario, assunto, mensagem

Set envio = Nothing


' Informa ao usuário que foi enviada a mensagem

reponse.write "<b>A mensagem foi enviada</b>.<br>Obrigado por nos recomendar!"


' se existir campos vazios, envia uma mensagem de erro

else

response.write "Por favor, é necessário completar todos os campos.<br>"

response.write "<a href='recomendar.asp'>Clique aqui</a> para corrigir os campos."

end if


end if

%>
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Encaminhar o navegador a uma URL com ASP detalhado




Notas interessantes sobre a utilização do método redirect do objeto response. Explicamos a razão de um possível erro ao utiliza-lo e como evita-lo.

Por Miguel Angel Alvarez - Tradução de JML





Recebemos uma consulta interessante que acho que ainda não havíamos tratado com profundidade anteriormente. Trata-se do método redirect do objeto response, que em determinadas situações dá um erro, que nos relatava um visitante da seguinte maneira:

Sempre trabalhei em win2k e IIS para páginas ASP pessoais, mas agora estou em Win98 com PWS e as páginas que tinha funcionando em IIS com PWS me geram um erro Response.Redirect com a seguinte mensagem de erro:

"Os cabeçalhos HTTP já estão escritos no explorador cliente. Qualquer mudança no cabeçalho HTTP deve ser feita antes de escrever o conteúdo da página."

Método redirect

É um método do objeto response e serve para mandar o navegador a uma página que deve se indicar como parâmetro. Um exemplo de utilização seria:

response.redirect "sua_pagina.html"

Isto faria com que o nosso navegador se situasse na página sua_pagina.html.

O redirect se realiza enviando nos cabeçalhos do HTTP a ordem de encaminhamento. O caso é que não se pode enviar nada nos cabeçalhos do HTTP se já se começou a escrever texto da página web, ainda que seja um simples espaço.

Portanto, este código é incorreto:

<head>
<title>Olá</title>
</head>
<%
response.redirect "xxx.asp"
%>

É incorreto porque antes de fazer o redirect foi escrito dentro da página web, neste caso é informação de cabeçalho, porém, este cabeçalho do documento HTML não é o mencionado cabeçalho do HTTP, que o mandam os servidores internamente sem que o programador participe ativamente, salvo para introduzir informação como um redirect ou um refresh a partir de funções ASP.

Armazenamento em buffer da página

Em instalações de ASP a partir da 3.0 se utiliza um buffer de armazenamento da página que tem como missão ir recolhendo o código HTML resultante da execução da página ASP, antes de manda-lo ao cliente. O buffer vai enchendo e quando termina de executar a página manda definitivamente por Internet até o computador do usuário.

A utilização do buffer em ASP 3.0 (IIS 5.0) encontra-se pré-determinada, enquanto que em outras versões de ASP, como a do Personal Web Server (PWS), está pré-determinado para não se utilizar.

Segundo aponta então, em ASP 2.0 e anteriores vai sendo enviado a página ao cliente à medida que for se executando e em ASP 3.0 até que não termina de se executar inteira, a página não é enviada ao cliente.

Sendo assim, o código anterior, onde se escrevia na página antes de executar um redirect, embora esteja mal desenhado em qualquer caso, pode dar erro ou pode não dar nenhum erro. Tudo vai depender de se havia ou não enviado texto ao cliente previamente à realização do redirect.

Tudo isto tem muito a ver com o buffer, pois, se está sendo utilizado, não se envia nada ao cliente e o redirect se realiza sem haver enviado texto, apesar de estiver escrito na página. Se não se utiliza o buffer, o texto colocado antes do redirect sim que teria sido enviado ao cliente e ao executar o redirect apareceria o erro que nos comentava nosso leitor.

Utilização ou não do buffer

Para indicar que se deseja utilizar o buffer temos que escrever esta sentença no princípio do código ASP.

response.buffer = true

Se coloca-se em ASP 3.0 não serve para nada, porque essa opção já estava pré-determinada. Porém, de qualquer forma, não incomoda e pelo menos nos asseguramos que se utilizará o buffer se as páginas forem transferidas a um servidor com ASP 2.0.

Se desejarmos fazer um redirect depois de ter escrito texto no buffer, o correto seria executar estas duas sentenças juntas:

response.clear response.redirect "http://www.oquefor.com"

A primeira linha indica que se deve esvaziar o buffer, com o qual se elimina o que tiver sido escrito na página, e a segunda indica que faça o encaminhamento. Insisto, isto só é possível se o buffer estiver sendo utilizado.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Uso de cookies



O uso destes pequenos programas podem personalizar um web site segundo as preferências do usuário.

Por Eugenia Bahit





O que são e para que servem as cookies?

As cookies são pequenos arquivos de texto que se salvam no computador do cliente e armazenam informação referente a este. Esta informação pode ser utilizada para gerar diferentes tipos de configurações e opções que o usuário escolha. Assim como também, com um pouco de imaginação, podem ser utilizados para uma infinidade de funções que veremos mais adiante.



O que podemos fazer com as cookies?

Basicamente as cookies podem ser escritas no computador do cliente com response.cookies e lidas com request.cookies.



Sintaxe de escritura de uma cookies

Escritura de uma cookie



<% response.cookies("nome_da_cookie")="valor_da_cookie" %>



Leitura de uma cookie



<% = request.cookies("nome_da_cookie") %>

As cookies devem ter uma data de vencimento. Do contrário se apagariam automaticamente logo depois de serem criadas. A sentença que indica o vencimento de uma cookie é a seguinte:

Data exata de vencimento

<% response.cookies("nome_da_cookie").Expires=#August 25, 2003# %>

Esta cookie indica que finalizará em 25 de agosto de 2003.



quantidade de dias

<% response.cookies("nome_da_cookie").Expires=Date+365 %>

Esta cookie indica que finalizará dentro de 365 dias.

Exemplos de aplicação de cookies

Com este exemplo vamos criar uma cookie na qual recolheremos os dados de personalização que o usuário escolher para ver uma página. Neste caso, o usuário deverá escolher a cor de fundo e a cor de fonte que deseja ver quando entra em nosso site.



Para isso criaremos um pequeno formulário no qual daremos ao usuário a opção de escolher tais cores:

Salvaremos este formulário como form.htm



<form method="post" action="cookies.asp">
<p align="center"><b>
Selecione as cores que deseja ver:</b></p>
<p style="margin-top: 0; margin-bottom: 0" align="center">
Fundo da página: <select size="1" name="fundo">
<option value="white">Branco</option>
<option value="black">Preto</option>
<option value="blue">Azul</option>
<option value="red">Vermelho</option>
<option value="green">Verde</option>
</select></p>
<p style="margin-top: 0; margin-bottom: 0" align="center">Cor de fonte: 
<select size="1" name="fonte">
<option value="white">Branco</option>
<option value="black" selected>Preto</option>
<option value="blue">Azul</option>
<option value="red">Vermelho</option>
<option value="green">Verde</option>
</select> </p>
<p style="margin-top: 0; margin-bottom: 0" align="center"><input type="submit" value="Enviar"></p></form>


Logo criaremos a página de processo onde se criarão as cookies e se mostrarão os resultados. Chamaremos de cookies.asp.



<%
'recolhemos os dados do formulario
fundo = request.form("fundo")
fonte = request.form("fonte")

'criamos as cookies
response.cookies("CorFundo")=fundo
response.cookies("CorFonte")=fonte

'criamos o vencimento das cookies
response.cookies("CorFundo").Expires=Date+7
response.cookies("CorFonte").Expires=Date+7

'agora, mostramos o resultado obtido escrevendo as cookies
%>
<body

text="<%=request.cookies("CorFonte")%>" bgcolor="<%=request.cookies("CorFundo")%>">
<center><font size="6">Assim se verão as cores</font></center>

 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Galeria de imagens em ASP



Como implementar uma galeria de imagens programada em ASP, utilizando somente 10 minutos de nosso tempo.

Por Miguel Angel Alvarez - Tradução de JML



Vamos ver como realizar rapidamente um sistema de armazenamento e visualização de imagens dinâmicas em ASP, no qual os visitantes possam ver fotografias classificadas em diferentes seções. Ao acessar a uma das classificações de imagens se mostrarão uma série de miniaturas das fotos que há disponíveis e, clicando cada miniatura, se verá a fotografia em tamanho completo.
Obviamente, este não é um sistema que se possa desenvolver desde zero em poucas horas, necessitaríamos na verdade um esforço de vários dias. Entretanto, vamos fazer um atalho no problema de uma maneira muito mais rápida, usando um software gratuito que permite instalar facilmente uma galeria fotográfica em nosso servidor ASP.

Podemos ver um exemplo deste programa em funcionamento em ASP Simple Online Photo Album
online_photo_catalog_vbscript.asp


galeria-imagen-asp.jpg


Quase para qualquer tecnologia de desenvolvimento, existem à disposição dos desenvolvedores certos programas que podemos instalar em nosso servidor. Estes programas podem nos ajudar a simplificar algumas coisas ou dotar a nossas páginas de certas funcionalidades. ASP não é uma linguagem onde se ofereçam muitos sistemas de forma gratuita -são mais típicos os de pagamento-, porém, neste caso veremos um simples script que sim que é gratuito e será muito útil para classificar nossas fotos e publica-las na web.

Online Photo Catalogue

Este programa pode ser conseguido de maneira gratuita através da home page do produto. Simple ASP Online Photo Album
Foi construído para simplificar ao máximo a tarefa de publicação das imagens, evitando o uso de componentes externos a ASP, bancos de dados, sistemas de upload de arquivos, etc.

Para utiliza-lo necessitamos um servidor que suporte a programação em ASP. Além disso, se o servidor também permite utilizar .NET, as funcionalidades disponível melhorarão na hora de mostrar as imagens em miniatura.

Online Photo Catalogue utiliza o objeto do sistema de arquivos (FSO: File System Object) para conhecer que imagens existem em um diretório e que subdiretórios pode também conter. Com os dados que obtém do sistema de arquivos, se encarrega de construir uma árvore de diretórios, aos que se pode acessar para visualizar as fotos que existem em cada pasta.

Portanto, não é necessário subir as imagens em nenhum banco de dados, simplesmente têm que ser armazenadas em uma pasta e a partir desse momento estarão disponíveis para o visitante.

Instalação

O processo para colocar em funcionamento este programa é extremamente simples. Primeiro, teremos que baixar os arquivos com o software, que teremos que colocar em nosso servidor.

Logo, temos que colocar as imagens na pasta "IMAGES". Dentro desta pasta podemos criar outras subpastas para fazer uma árvore de diretórios a gosto do administrador. Podemos criar uma pasta para nossos amigos e outra para nossas viagens. Por exemplo, dentro da pasta de viagens, também poderemos criar outros subdiretórios com cada um dos lugares aos que fomos. Se utilizarmos um servidor remoto, teremos que subir as imagens por FTP.

A partir de agora, podemos acessar a foto-galeria e ver na parte superior esquerda a árvore de diretórios criada para classificar as imagens. Clicando em cada pasta poderemos ver as fotos, em miniatura, que há nessa pasta. Clicando finalmente em uma das miniaturas, poderemos ver a imagem em tamanho completo.

Para a geração dinâmica das miniaturas utiliza-se um pouco de programação em ASP.NET. Como nem todos os hostings que permitem ASP também permitem .NET, pode-se desabilitar a geração de miniaturas através da edição das constantes de configuração do programa. Em concreto, deveremos editar a variável cUseThumbnailFile e lhe atribuir valor false (true é o que vem por padrão para esta variável)

Const cUseThumbnailFile=false

Também há outras variáveis de configuração, mas que se explicam melhor no documento de ajuda do software.

Como detalhes adicionais, o administrador pode comentar as fotografias. Isto se faz mediante a criação de um arquivo de texto chamado com o mesmo nome que a fotografia, porém com extensão txt. Por exemplo, se temos uma imagem chamada foto1.jpg e desejamos incluir um comentário nela, teremos que criar um arquivo chamado foto1.txt e escreveremos dentro o texto que quisermos. O arquivo de texto tem que ser salvo no mesmo diretório que a fotografia.

Também permite a inclusão de comentários às fotografias por parte dos visitantes. Para salvar os comentários se utiliza um arquivo de texto em formato XML, portanto não é necessário configurar nada. Somente há que estar certo que as permissões de escritura estejam habilitados para esse arquivo.

O exemplo deste programa em funcionamento pode ser visto em: ASP Simple Online Photo Album
online_photo_catalog_vbscript.asp

A página de início do produto pode ser visto em: Simple ASP Online Photo Album



 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Escrever um arquivo Excel através de ASP



Como gerar utilizando ASP um arquivo CSV, compatível com Excel e outras folhas de cálculo, a partir de uma tabela do banco de dados.

Por Miguel Angel Alvarez - Tradução de JML





Através de uma página programada em ASP podemos obter múltiplas saídas, à parte da tradicional em uma página web. Neste caso veremos como realizar uma saída em um formato de tipo CSV, que é um arquivo compatível com Microsoft Excel ou outros sistemas de folha de cálculo comuns. O arquivo CSV, para quem não sabe, é na verdade um arquivo de texto no qual se colocam os valores de cada uma das colunas separados por vírgulas e cada fila de valores em uma linha independente.

Veremos como conseguir um arquivo CSV no qual aparecem uns valores obtidos desde um banco de dados. Para isso, vamos nos apoiar em um script que se distribui como código aberto em licença GNU. Este tipo de licença implica que o Script é gratuito e pode se distribuir, utilizar ou modificar de qualquer maneira, sempre que se cite a procedência original.

Na verdade, o script ao qual nos referimos chama-se GenerateXSL, desenvolvido por Brain Scan Studios, que pode ser encontrado no endereço Brain Scan Studios - Home.

O script pode ser instalado em qualquer servidor ASP, em um website ou em um servidor local ou de Intranet, e pode se modificar facilmente. Para utiliza-lo em nossos trabalhos simplesmente teríamos que modificar umas variáveis. Para começar, a variável "sDSN" que contém o DSN origem de nosso banco de dados. Também devemos modificar a variável "sFields", para atribuir os nomes dos campos do banco de dados, e "sTable", para indicar o nome da tabela.

O script, que podemos modificar para ajusta-lo a nossas necessidades, é o seguinte:

<%@ Language=VBScript %>
<%
' GenerateXLS Version 1.0 by Brian Kirsten (bkirsten@brainscanstudios.com)
' 1st modified 11/29/00
' 2nd modification 10/25/02
' copyright Ó 2000 Brain Scan Studios, Inc. (Brain Scan Studios - Home)
' source distributed under the gnu general public license.
' let me know if your site is using the code i will put a link up to your page!

Dim sTable
Dim sDSN
Dim sFields

sDSN = "<DSN>" 'Name of your DSN
sFields = "<FIELDS>" 'List of fields comma delimited
sTable = "<TABLE_NAME>" 'Name of your table or View

Set DB = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.Recordset")

DB.Open sDSN

RS.Open "select "& sFields &" from "& sTable,DB

Response.ContentType = "application/csv"
Response.AddHeader "Content-Disposition", "filename=mydata.csv;"
' lets print the fields on top

for i = 0 to RS.Fields.Count-1
if i = (RS.Fields.Count - 1) then
Response.Write lcase(RS.Fields(i).Name)
else
Response.Write lcase(RS.Fields(i).Name) & ","
end if
next

Response.write vbNewLine
Response.write vbNewLine

while not RS.EOF

for u=0 to RS.Fields.Count - 1
if u = (RS.Fields.Count - 1) then
Response.Write RS.Fields(u).Value
else
Response.Write RS.Fields(u).Value & ","
end if
next

response.write vbNewLine

rs.MoveNext
wend

Response.write vbNewLine
Response.write vbNewLine

Set RS = Nothing
Set DB = Nothing

%>
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Tratar erros em sentenças SQL executadas em ASP




Como fazer para que as sentenças SQL mal formadas não dêem erros nas páginas ASP e possam ser tratadas para informar ao usuário ou ao administrador.

Por Miguel Angel Alvarez - Tradução de JML




Veremos um pequeno workshop que poderá servir para fazer nossas aplicações ASP mais completas e compactas. Trata-se de evitar um erro bastante freqüente na programação de páginas, que ocorre quando se tenta executar uma sentença SQL mal formada. Nestes casos, o servidor nos informa do erro, embora sempre ofereça informação que não serve muito para o visitante, inclusive pode lhe confundir. Seria preferível que nós tratássemos o erro e informássemos por nossa conta ao usuário, de uma maneira agradável e clara.

Para isso, vamos realizar um tratamento de erros em ASP, que evitará que a página se detenha diante de um erro e nos permita fazer coisas se isto ocorrer.

On error Resume Next
conn.execute(ssql)
if Err<>0 then
' realizo acoes para tratar o erro
end if

Com a primeira linha estamos dizendo a ASP que se ocorrer um erro não ser informado dele, e sim, que continue. Na segunda linha executamos uma sentença SQL.

No seguinte bloco se avalia a variável de sistema "Err", que armazena um possível erro. Se a variável vae qualquer coisa diferente de 0, então é porque ocorreu um erro. Portanto, no caso positivo do if poderemos realizar qualquer tipo de ação para tratar o erro.

Tratar o erro de uma maneira simples

Para tratar o erro de uma maneira fácil de implementar, dentro do if poderíamos chamar a uma função que se encarregasse de fazer todas as ações frente a um erro.

Essa função poderia receber o erro e introduzi-lo em um log de erros. Poderia também informar por correio ao administrador e obviamente, mostrar uma mensagem de erro claro ao visitante.

sub tratar_erro_ssql(ssql,meuerro)

'trato o possivel erro
'coloco a sentenca errada em um arquivo de texto

'criamos o textstream do arquivo
arquivo= request.serverVariables("APPL_PHYSICAL_PATH") & "erros\log.txt"
set confile = createObject("scripting.filesystemobject")
set fich = confile.OpenTextFile (arquivo,8)
'escrevo no arquivo
fich.WriteLine(ssql)
fich.WriteLine(Err.Description)
fich.WriteLine("-----------------------------")

'fechamos o arquivo
file.close()

'vou informar ao administrador
set obj_mail = server.createObject("Persits.MailSender")
assunto_mensagem = "Erro SQL na página"
email_origem_mensagem = "correio@dominio.com"
texto_origem_mensagem = "Empresa"
txt_mail = "Detectamos um erro. Consulte o log de erros para encontrar descrição."
txt_mail = txt_mail & VBNEWLINE & VBNEWLINE & ssql
txt_mail = txt_mail & VBNEWLINE & VBNEWLINE & meuerro

obj_mail.host = "smtp.dominio.com"
obj_mail.from = email_origem_mensagem
obj_mail.FromName = texto_origem_mensagem
obj_mail.Subject = assunto_mensagem
obj_mail.AddAddress email_alertas
obj_mail.body = txt_mail
'o envio
obj_mail.send

'vou informar ao usuario
response.write "Sentimos muito, mas sua ação não pode ser realizada. Entre em contato com os administradores para obter ajuda."

end sub

Esta função faz tudo o que foi comentado para tratar do erro. Primeiro escreve o log de erros em um arquivo de texto, logo envia um correio eletrônico ao administrador e finaliza mostrando um erro ao usuário. A função está toda comentada para que se entenda melhor tudo o que foi realizado (como enviar o e-mail através de ASP ou abrir o arquivo de texto) que já foi visto em outros workshops de ASP.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Validar uma data com ASP



Função para comprovar se uma data é correta, ou seja, se um dia, mês ou ano são corretos, em páginas programadas com ASP.

Por Miguel Angel Alvarez - Tradução de JML




Vejamos uma função criada com Active Server Pages para fazer uma comprovação de datas. A função recebe um dia, um mês e um ano e comprovam que estes sejam numéricos e que a data criada entre todos é correta e possível no calendário.

A função recebe os dados de dia, mês e ano como string, tal como poderíamos chegar através de um formulário ou como parâmetro em uma URL. Não obstante, visto que ASP é uma linguagem pouco "typed", mesmo passando valores numéricos à função continuará dando resultados corretos.

Como resultado a função devolverá um valor verdadeiro ou falso, dependendo se a data é correta ou incorreta.

O código da função é o seguinte:

'valido uma data
'espero receber tres strings com o dia, o mes e o ano

function validarData(dia,mes,ano)

'elimino possiveis espacos aos lados dos numeros que recebo por parametro

dia = trim(dia)
mes = trim(mes)
ano = trim(ano)

'comprovo nº de caracteres que recebo em cada parametro sao os permitidos
'O ano pode ter ate 4 caracteres

if len(dia)=0 or len(dia)>2 or len(mes)=0 or len(mes)>2 or len(ano)=0 or len(ano)>4 then
validarData = false
exit function
end if

'compovo que os caracteres dos parametros sao numeros

if (not isNumeric(dia)) or (not isNumeric(mes)) or (not isNumeric(ano)) then
validarData = false
exit function
end if

'O mes nao pode ser maior que 12 nem menor que 1

mes = cint(mes)
if mes > 12 or mes < 1 then
validarData = false
exit function
end if
dia = cint(dia)

'O dia nao pode ser menor que 1

if dia < 1 then
validarData = false
exit function
end if

'O dia, dependendo do mes que seja, pode ter uns ou outros valores

if mes=1 or mes=3 or mes=5 or mes=7 or mes=8 or mes=10 or mes=12 then

'nesses meses pode ter 31 dias

if dia > 31 then
validarData = false
exit function
end if
elseif mes=2 then

'en fevereiro temos que ver se sera ano bissexto
'consigo o numero de ano de 4 cifras.
'se nos derem um valor de 2 cifras < 31 se refere a 2000 mais esse valor

if ano < 31 then
ano = ano + 2000

'se nos derem um valor de 2 cifras > 31 se refere a 1900 mais esse valor

elseif ano < 100 then
ano = ano + 1900
end if

'calculo se o ano eh bissexto
'se for divisivel por quatro e (nao divisivel por 100 ou divisivel por 400)

if ((ano mod 4)=0) and ((ano mod 100)<>0 or (ano mod 400)=0) then

'eh bissexto

if dia > 29 then
validarData = false
exit function
end if
else

'NAO eh bissexto

if dia > 28 then
validarData = false
exit function
end if
end if
else

'em todos os demais meses chegam a ter 30 dias

if dia > 30 then
validarData = false
exit function
end if
end if

'se estou aqui eh porque todas as comprovacoes foram positivas

validarData = true
end function

O código da função está comentado para que possa ser entendido mais facilmente. Basicamente, o que faz é realizar uma série de comprovações, uma atrás da outra. Se alguma das comprovações faz com que a data seja incorreta, devolve-se o valor false e sai da função. Se chega-se ao final da função e nenhuma das comprobações falhou, se devolve true, pois a data é correta.

Na hora de calcular se um dia é válido, temos que saber os dias que tem um mês. Temos que prestar especial atenção ao mês de fevereiro, para saber se é bissexto. Para saber se um ano é bissexto existe a seguinte regra:
São bissextos todos os anos divisíveis por 4, excluindo os que sejam divisíveis por 100, mas não excluindo os que sejam divisíveis por 400.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Arredondar decimais em ASP



Como arredondar um número em ASP, para que tenha uma quantidade de decimais determinada.

Por Miguel Angel Alvarez - Tradução de JML






Vamos realizar um exercício muito simples que se trata de arredondar uma cifra, de modo que tenha o número de decimais que desejarmos. O arredondamento de decimais em ASP é muito simples, graças a uma função de Visual Basic Script chamada Round().

Função Round()

A função Round() recebe dois parâmetros, o número que se deseja arredondar e o número de decimais que se deseja que tenha:

Round (número, num_decimais)

Devolve o número, arredondado de maneira que tenha tantas posições decimais como se envie no segundo parâmetro. O segundo parâmetro é opcional e se não se indica, entende-se que se deseja arredondar sem decimais.

A função Round() sempre arredonda ao valor mais próximo, com os decimais indicados.

Possíveis exemplos, que podem nos dar uma idéia exata da maneira de funcionar de Round(), são:

Round (2.2) devolve 2
Round (2.6) devolve 3
Round (41.2855,3) devolve 41.286
Round (41.2009,2) devolve 41.2
Round (41.2009,3) devolve 41.201

Funções Int() e Fix()

Estas duas funções estão relacionadas com Round(). Servem para obter a parte inteira de um número com decimais. Não existem diferenças entre Int() e Fix(), as duas fazem exatamente o mesmo.

Vejamos dois exemplos:

Int (54.23) devolve 54
Fix (0.2) devolve 0

Como vemos, não é um arredondamento, e sim a obtenção do número inteiro uma vez tirado os decimais.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Devolver um arquivo de Word através de uma página ASP



Sistema para gerar um arquivo de Word através de uma página ASP e envia-lo ao navegador, no lugar de uma página web.

Por Miguel Angel Alvarez - Tradução de JML




Veremos aqui um típico exemplo de criação de um arquivo de Word através de uma página web ASP. O arquivo de Word será gerado automaticamente e a página ASP, ao invés de mostrar o conteúdo como uma página web, mostrará um arquivo de Word, que poderá ser baixado utilizando qualquer navegador. Se acessarmos com Internet Explorer, também se poderá visualizar o arquivo de Word no próprio navegador.

O exemplo é simples. Simplesmente há que tratar com o ContentType, para indicar que o tipo de conteúdo que se envia é um arquivo de Word. O próprio navegador, ao ver que se envia um arquivo de Word ao invés de uma página web, mostrará a opção de baixa-lo ou de abri-lo. Para especificar o ContetType de Word utilizamos esta linha de código ao princípio do arquivo ASP:

<% Response.ContentType = "application/msword"%>

Com isso já temos a maior parte do trabalho realizado. Agora, qualquer conteúdo que colocarmos depois dessa etiqueta, será parte do conteúdo do arquivo de Word que se enviará ao visitante.

Podemos colocar conteúdo HTML e se verá perfeitamente no arquivo de Word:

<% Response.ContentType = "application/msword" %><html>
<html>
<head>
<title>Criação de word</title>
</head>
<body bgcolor="orange" text="blue">
<h1>Oi</h1>
<a href="http://www.website.com">Isto é um link a website.com</a>
<p>
<i>Obrigado pela sua visita</i>
</p>
</body>
</html>

Outra coisa que podemos fazer é ter o conteúdo em um arquivo a parte e inclui-lo por meio de um include de ASP.

<% Response.ContentType = "application/msword"%>
<!--#include file="arquivo-incluir.html"-->

Assim o navegador receberá um arquivo de Word gerado com o conteúdo que houver no arquivo arquivo-incluir.html.



 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Um Chat em ASP



ASP pode não ser a linguagem mais adequada para uma aplicação de chat, porém o caso é que funciona e ao ser ASP é completamente compatível com qualquer navegador, e ademais é, como vocês verão, tremendamente simples de desenvolver.

Por Pedro Rufo Martin


O código que lhes mostro é o utilizado no chat de minha web, o introduzir melhoras será com vocês, é fácil adicionar funcionalidades ao estilo das que vocês verão em outros chats em Java, como cores, lista de usuários, etc ...

Bom, começamos pelo princípio.

1.-O primeiro que necessitamos é um lugar para armazenar as frases que os usuários introduzirem para logo mostrá-las. Para isso, usaremos um array de nove elementos, que serão a quantidade de frases que mostraremos no chat ( poderão mudar o número ao que lhes parecer oportuno). Este array será salvo dentro do objeto Application, a fim de que possa ser acessado por todo o mundo. A fim de que esteja disponível sempre, o criaremos dentro do arquivo global.asa.

Global.asa

<SCRIPT LANGUAGE="VBScript" RUNAT="Server">
Sub Application_OnStart
Dim Auxiliar()
Redim Auxiliar(9)
Application("Opinioes")=Auxiliar
End Sub
</SCRIPT>

A partir deste momento temos uma variável de aplicação denominada "opiniões" que contém nosso chat .

2.-O seguinte que necessitamos é uma página que nos mostre o conteúdo de nosso chat (ou seja, o que há em application("opinioes"). A este modulo o denominaremos visualizacao.asp. Consiste em uma página que se chama a si mesma cada x segundos (META HTTP-EQUIV="REFRESH" CONTENT="5), com o que nos refresca a informação, e que mostra os dados contidos em Application("opinioes") mediante um simples loop FOR

Visualizacao.asp

<% PaginaAtual="http://"&_
Request.ServerVariables("SERVER_NAME")&_
Request.ServerVariables("SCRIPT_NAME") %>
<html>

<head>
<META HTTP-EQUIV="REFRESH" CONTENT="5;<%=PaginaActual%>">
<title>MiniChat (visualizacao)</title>
</head>

<body>
<FONT FACE="Comic Sans MS" COLOR="Blue" size="1">
<%
IF NOT isArray( Application("Opinioes")) THEN
Application.Lock
Dim Auxiliar()
Redim Auxiliar(9)
Application("Opinioes")=Auxiliar
Application.UnLock
END IF

Temporal=Application("Opinioes")
FOR Opinion=8 to 0 step -1%>
<%= Temporal(Opinion) %> <BR>
<% NEXT %>
<FONT>
</body>

</html>

3.-Nosso terceiro módulo será "incluir.asp" o qual nos vai permitir que os usuários escrevam opiniões no chat. Para que um usuário escreva uma colaboração, este usuário deve estar identificado por um apelido ou "nick", este apelido será salvo em uma cookie.

incluir.asp

<%
IF Request.Cookies("Apelido")="" and request.form("opiniao")<>"" THEN
if request.form("apelido")<>"" then
Response.Cookies("Apelido")=Request.Form("Apelido")
else
Response.Cookies("Apelido")="Anônimo"
end if
Application.Lock
Temporal=Application("Opinioes")
FOR i=7 TO 0 STEP -1
Temporal(i+1)=Temporal(i)
NEXT
if request.form("apelido")<>"" then
Temporal(0)="<FONT COLOR=""#000000"">** " & Request.Form("Apelido") & " ** Entra no minichat</FONT>"
else
Temporal(0)="<FONT COLOR=""#000000"">** Anonimo ** Entra no minichat</FONT>"
end if
Application("Opinioes")=Temporal
Application.Unlock

END IF
IF Request.Form("Opiniao")<>"" THEN
Apelido=Request.Cookies("Apelido")
Application.Lock
Temporal=Application("Opinioes")
FOR i=7 TO 0 STEP -1
Temporal(i+1)=Temporal(i)
NEXT
Temporal(0)=Apodo&": "&Request.Form("Opiniao")
Application("Opiniao")=Temporal
Application.Unlock
END IF%>

<html>

<head>
<title>incluir opiniao</title>
<base target="_self">
</head>

<body bgcolor="#6699FF">
<FORM METHOD="POST" ACTION="incluir.asp">
<% IF Request.Cookies("Apelido")="" THEN %>
<font color="#FFFFFF">
Apelido:</font> <INPUT TYPE="TEXT" SIZE=10 NAME="Apelido">
<input type="hidden" name="go" size="20" value="si"><BR>
<% END IF %>
<INPUT TYPE="TEXT" SIZE=30 NAME="Opiniao">
<INPUT TYPE="SUBMIT" VALUE="Enviar">
<a href="fechar.asp" target="_top">Sair</a>
</FORM>
</body>

</html>
 
Topo