Вы находитесь на странице: 1из 87

ASPDICA4.

DOC Página 1 de 87

Os Server objects são DLLs existentes no servidor, e podem ser acessadas via ASP.
Essas DLLs permitem que o ASP converse com servidores de envio de email (smtp), pop, bancos de dados, arquivos
texto, etc....Qualquer um que tenha conhecimentos de VB pode construir DLLs....

www.activeserverpages.com

em primeiro lugar, recomendo o ASPBRASIL. em segundo, o WWW.ACTIVESERVERPAGES.COM. Se vcs


quiserem ver um pouco do potencial do ASP entrem em WWW.SPASITE.COM.BR, e faça o cadastro. Voces terao
acesso a uma agenda feita totalmente em ASP

Cal, ASP é uma linguagem similar a CGI e Coldfusion, só que roda na plataforma WINNT...ela gera paginas HTML
dinamicamente, a partir de dados em banco de dados, etc.

IIS significa Internet Information Server, e é o software que, ao ser instalado no WINNT, processa as rotinas ASP

O IIS é o servidor WEB da Microsoft. É atraves dele que conseguimos executar uma página em ASP ou
simplesmente carregar uma página HTML. Também é servidor de FTP
ASP é muito melhor. Java pode ser em um futuro mais remoto, mas por enquanto só ASP mesmo. Não quero me
arriscar com outras coisas. Talvez o PHP por causa do Linux... só que hoje é possivel rodar ASP em Linux tb.
Portanto...ASP

O que é um Objeto?
Acesso a bancos de dados. Acesso a arquivos texto. Envio de e-mail através de páginas
WEB. Essas e muitas outras funções do ASP tem como base os objetos (ou DLLs).
Aprofundando um pouco o conceito de ASP, podemos dizer que ASP é a junçao de HTML,
VBScript e acesso aos objects.
Ao acessar um banco de dados via ASP, na verdade, o que estamos fazendo é acessando
uma DLL no servidor. A chamada a essa DLL, assim como todas as rotinas de ASP são feitas
utilizando VBScript. Essa DLL, por sua vez acessa o banco de dados e gera a consulta. Essa
consulta é lida pelo ASP através de VBScript e gera uma tabela em HTML. Essa tabela HTML
é, então, enviada ao Browser. Assim como o acesso a dados, o acesso aos arquivos texto
também é feito dessa forma, bem como o envio de emails. No envio de e-mails, uma DLL
que tem acesso ao servidor SMTP é acionada e passa a este os dados pertinentes ao e-mail
que será enviado.
Tal forma de acesso às várias ferramentas do servidor é baseada no modelo COM
(Componente Object Model), o que permite que o ASP tenha um caráter de linguagem com
grande capacidade de expansão. Como exemplo, cito DLLs que fazem codificação de dados,
DLLs que enviam FAX com dados de um formulário preenchido na WEB (esta DLL faz a
conexão entre os dados enviados via formulário e uma placa FAX/MODEM do servidor, que
disca o número do FAX e envia tais dados), DLLs que interagem com o sistema de
identificação de usuários do NT (login), DLLs que geram gráficos no formato jpg, DLLs que
acessam o servidor POP para visualização de e-mails via HTTP e mais uma infinidade de
aplicações.
O comando Server.Createobject("nomedadll.nomedaprocedure") é utilizada para criar a
conexão com a DLL. A partir daí, os dados utilizados como parâmetro devem seguir o
conjunto de comandos que cada DLL disponibiliza. No caso do acesso aos bancos de dados,
movenext, movefirst e execute são alguns dos comandos disponibilizados.
As DLLs não precisam ser criadas pela Microsoft. Existem várias empresas que criam DLLs e
comercializam. Entre elas, a ServerObjects (www.serverobjects.com) e a SoftArtisans
(www.softartisans.com).

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 2 de 87

Bancos de Dados, SQL e ODBC - parte I


A manipulação de Banco de Dados sempre foi um fator importante na implementação e
funcionamento corretos dos sistemas. Devido tal importância, as empresas que criam as
Bases de Dados (Oracle, Microsoft, Sybase, etc), resolveram padronizar algumas funções de
acesso aos Bancos de Dados, e criaram a linguagem SQL (Structured Query Language). Tal
importância também levou a Microsoft a criar uma forma padrão de conexão com os vários
Bancos de Dados, as conexões ODBC.
A linguagem SQL é utilizada como forma de ligação entre os softwares e os bancos de
dados, ou seja, para utilizar a linguagem SQL, o banco de dados deve aceitar instruções
SQL, assim como a linguagem utilizada no sistema. Entre as linguagens que aceitam SQL
estão VB, Delphi, C++ e ASP. Entre as bases de dados que aceitam SQL, estão Access
(.mdb), SQLServer, Oracle e Sybase.
Ao trabalhar no ambiente WINNT, o programador encontrará ainda uma outra grande
vantagem: As conexões ODBC. Antigamente, cada linguagem tinha uma forma diferente de
se conectar a cada tipo diferente de base de dados e uma forma diferente de consultar os
dados desta base. A linguagem SQL veio para padronizar as diferentes formas de consulta
aos dados e as conexões ODBC vieram para padronizar a forma de conexão a essas
diferentes bases. Para tanto, foi criada uma central, denominada ODBC32, a qual, de um
lado, contém a saída padrão, e de outro, os vários drivers que convertem a conexão padrão
para a forma de conexão específica para cada tipo de base de dados.
Dividido em seis partes, publicadas durante a semana, este tutorial contém os conceitos e
comandos básicos da linguagem SQL, divididos da seguinte forma:
Parte 1 - Introdução
Parte 2 - ODBC
Parte 3 - Consultas a bancos de Dados
Parte 4 - Inserção de dados
Parte 5 - Deleção de um registro
Parte 6 - Alteração de dados de um registro

Bancos de Dados, SQL e ODBC - parte II


premissas:
tipo do banco de dados: Access (.mdb)
nome e endereço do banco de dados: c:\teste\teste.mdb
nome apelido da conexão: TESTEASPBRASIL
configuração ODBC:
1- clique em INICIAR
2- clique em CONFIGURAÇÕES
3- clique em ODBC Data Source (ODBC32)
4- clique na aba SYSTEM DSN
5- clique em ADD
6- selecione o driver a ser utilizado (no caso, Driver para o Microsoft Access (.mdb) ou
Microsoft Access Driver (.mdb))
7- clique em CONCLUIR
8- clique no botão SELECT, e selecione o banco de dados teste.mdb, no diretório c:\teste\
9- em Database Source Name, coloque um nome apelido da conexão, no caso
TESTEASPBRASIL
10- clique em OK.
Pronto, você acabou de criar uma conexão ODBC, denominada TESTEASPBRASIL, vinculada
ao banco de dados teste.mdb, do tipo Microsoft Access. Caso você precise alterar o

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 3 de 87
endereço do banco de dados, basta informar o novo endereço na conexão ODBC chamada
TESTEASPBRASIL.
ps: A conexão ODBC deve ser criada no servidor onde as rotinas ASP estão armazenadas.
Nas rotinas em asp, você apenas denominará o nome da conexão, como segue:
<%
set conn = server.createobject("adodb.connection") '- abre a conexão com a DLL de
acesso aos dados
conn.open "TESTEASPBRASIL" '- abre a conexão com o banco de dados vinculado com a
ligação ODBC denominada TESTEASPBRASIL
set rsquery = conn.execute("select * from cadastro") '- executa, utilizando a conexão
conn (vinculada à ligação ODBC chamada de TESTEASPBRASIL), a string SQL "select * from
cadastro", que recupera todos os campos de todos os cadastros da tabela cadastro,
existente dentro do banco de dados teste.mdb.
while not rsquery.eof
response.write rsquery("nome") & "<br>"
rsquery.movenext
wend
'a rotina while...wend acima, percorre o banco de dados, e mostra na tela os nomes de
todos os cadastros selecionados pela string SQL.
%>

Bancos de Dados, SQL e ODBC - parte III


Consultando Banco de dados
Nesta terceira parte, iremos abordar a consulta aos bancos de dados. Primeiramente,
iremos abordar a correta sintaxe das strings SQL, e em seguida, como utilizar estas strings
com ASP. Para tanto, estaremos disponibilizando alguns exemplos.
A partir de uma base de dados existente, é possível a consulta utilizando filtros, como por
exemplo, gerar uma consulta numa tabela de cadastro onde mostrando todos os registros
cujo estado é SP. Seguem abaixo alguns exemplos de strings SQL de consultas:
sintaxe: "select [campo1, campo2, campo3,...] from tabela where campo1 = 'valor'
and(or) campo2 = 'valor2'"
Veja os exemplos de instruções SQL:
"select * from cadastro" - seleciona todos os campos de todos os registros da
tabela cadastro.
"select nome, email, telefone, estado from cadastro" - seleciona os campos nome,
email, telefone e estado de todos os registros da tabela cadastro.
"select nome, email, estado from cadastro where estado = 'SP' " - seleciona os
campos nome, email e estado apenas dos registros cujo estado é SP.
"select nome, email, estado, idade from cadastro where idade = '23' and estado =
'SP' " - seleciona os campos nome, email, estado e idade apenas dos registros cuja
idade é 23 e o estado é SP.
"select nome, email, estado, idade from cadastro where estado = 'SP' or estado =
'AM' " - seleciona os campos nome, email, estado e idade apenas dos cadastros
onde o estado é SP ou AM.
"select nome, email, estado, idade from cadastro where idade = '23' or estado =
'SP' " - seleciona os campos nome, email, estado e idade apenas dos cadastros
onde o estado é SP ou a idade é 23.
Uma vez feita a consulta, uma "cópia" da tabela, contendo apenas os registros selecionados
é gerada na memória do servidor, e então o ASP tem acesso a essa "cópia" e não à tabela
de onde esses valores realmente se encontram. Veja o exemplo a seguir:
<%

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 4 de 87
sqlstmt = "select nome, email, estado, idade from cadastro where idade = '23' and
estado = 'SP' "
Set conn = server.createobject("adodb.connection") 'abre a conexão com o banco
de dados
conn.open "nome_da_ligacao_ODBC" 'avisa qual banco de dados será utilizado na
consulta
set rsquery = conn.execute(sqlstmt) 'executa a instrução SQL contida na variavel
sqlstmt
while not rsquery.eof
%>
<div><%=rsquery("campo1").value%>
<% rsquery.movenext
wend
%>
A rotina acima seleciona os campos nome, email, estado e idade de todos os registros cujo
campo idade tem o valor 23 e o estado valor SP.
PS: para criar a string SQL, você pode utilizar soma de strings e variáveis, o que permite
que strings SQL sejam criadas dinamicamente, a partir de um valor inserido num
formulário. Veja o exemplo:
Estrutura do Banco de Dados:
nome do banco de dados: teste.mdb
path do banco de dados: c:\teste
nome da conexao ODBC: TESTE_ODBC
tabela a ser consultada: agenda
campos da tabela agenda: nome, email, cidade, estado, idade

<html><title>Formulario para insercao do nome</title>


<body>
<form method="post" action="consulta.asp">
<input type="text" name="chave" value="">
<input type="submit" name="submit" value="Gerar Consulta">
</form>
abaixo, script de consulta
<%
'criacao da string SQL
sqlstmt = "select * from agenda where nome = '" & request.form("chave") & "'
order by idade"
set conn = server.createobject("adodb.connection")
conn.open "TESTE_ODBC"
set rsquery = conn.execute(sqlstmt)
%>
<table>
<% while not rsquery.eof %>
<tr><td><%=rsquery("nome")%></td><td><%=rsquery("email")
%></td><td><%=rsquery("idade")%></td></tr>
<% rsquery.movenext
wend
rsquery.close
set rsquery = nothing
set conn = nothing %>
</table>

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 5 de 87

Bancos de Dados, SQL e ODBC - parte IV

Além de Consultas, Existe também sintaxe para inserção de dados numa tabela, como
segue:
sintaxe: "insert into tabela (campo1,campo2,campo3,...) values
('valor1','valor2','valor3',...)"
Veja os exemplos a seguir:
"Insert into cadastro (nome, email, estado, idade) values
('Fernando','webmaster@aspbrasil.com.br','SP',23)" - insere na tabela Cadastro os
valores dos campos nome, email, estado, idade.
Note que o valor 23 não está delimitado por aspas. Por se tratar de um campo numérico, no
Banco de dados, este não fica delimitado por aspas.
Abaixo, Exemplo Prático com a string de inserção de dados:
Estrutura do Banco de Dados:
nome do banco de dados: teste.mdb
path do banco de dados: c:\teste
nome da conexao ODBC: TESTE_ODBC
tabela a ser consultada: agenda
campos da tabela agenda: nome, email, cidade, estado, idade
<%
sqlstmt = "Insert into cadastro (nome, email, estado, idade) values
('Fernando','webmaster@aspbrasil.com.br','SP',23)"
Set conn = server.createobject("adodb.connection") 'abre a conexão com o banco
de dados
conn.open "nome_da_ligacao_ODBC" 'avisa qual banco de dados será utilizado na
consulta
set rsquery = conn.execute(sqlstmt) 'executa a instrução SQL contida na variavel
sqlstmt
set rsquery = nothing
set conn = nothing
'Note que não é necessário fechar a rsquery. Isso ocorre devido à string de
inserção não ficar armazenada na memória , para futura consulta. Ela é executada,
e automaticamente, fechada. Isso também ocorre nas strings de deleção e
atualização.
%>
Acompanhe agora este outro exemplo:
Página para inserção dos dados nome, email, cidade, estado, idade
<form method="post" action="inserir_registro.asp">
<input type="text" name="nome" value="">
<input type="text" name="email" value="">
<input type="text" name="cidade" value="">
<input type="text" name="estado" value="">
<input type="text" name="idade" value="">
<input type="submit" name="submit" value="Gerar Consulta">
</form>
Página de Inserção dos Dados (inserir_registro.asp):
<%
nome_local = request.form("nome")
email_local = request.form("email")
cidade_local = request.form("cidade")
estado_local = request.form("estado")

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 6 de 87
idade_local = request.form("idade")
sqlstmt = "insert into agenda (nome, email, cidade, estado, idade) values ('" &
nome_local & "','" & email_local & "','" & cidade_local & "','" & estado_local & "',"
& idade & ")"
set conn = server.createobject("adodb.connection")
conn.open "TESTE_ODBC"
set rsquery = conn.execute(sqlstmt)
response.redirect("inserido_com_sucesso.htm")
%>
Abaixo, página inserido_com_sucesso.htm
<html>
<body>
<p>Inserido com Sucesso</p>
</body>
</html>

Log de acesso em ASP

Ao fim do desenvolvimento de um site você respira fundo e relaxa. Acabou!


Errou, pois é só o começo. Depois de um certo tempo você sente falta de algumas
informações:
Quantas pessoas tem visitado meu site?
Quais páginas são as mais vistas?
Como chegam ao meu site?
Você não conseguiria responder à essas questões com um simples contador. Pensando nisso
foi desenvolvido um script em ASP que gera o registro do acesso (log) para o site da Dueto
(www.dueto.com.br).
Quando um visitante acessa a página inicial do site (index.asp) é gerado de forma
randômica um código que o indentificará no restante da visita - Session("Usuario"). Esse
código, juntamente com o dia e horário do acesso, é enviado como um cookie para a
máquina do visitante:
Response.Cookies("D")("CodUser") = Session("Usuario")
Response.Cookies("D")("Visitas") = 1
Response.Cookies("D")("Data") = Date()
Response.Cookies("D")("Hora") = Time()
Essas informações são aproveitadas caso haja um retorno do mesmo visitante em uma
outra oportunidade.
Feito o envio do cookie as seguintes informações são registradas em um arquivo texto:
O código do visitante - Session("usuario") ou Request.Cookies("D")("CodUser");
De que página ou site ele veio - Request.ServerVariables("HTTP_REFERER");
O IP no momento - Request.ServerVariables("REMOTE_HOST");
Data do último acesso (Cookie) - Request.Cookies("D")("Data");
A página que acessou no site - Request.ServerVariables("PATH_INFO");
Cada vez que o visitante acessa uma página dentro do site gera uma linha no log de acesso
(acesso.txt). É plenamente possível e aconselhavél, se você tiver oportunidade, usar um
banco de dados em lugar do arquivo texto.

Rotinas de Loop

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 7 de 87
Loops são rotinas que devem ser repetidas até que uma determinada condição seja
satisfeita. Existem 3 comandos que permitem tal situação:

Do...Loop
For...Next
While...Wend

Abaixo seguem as características e exemplos de cada comando.


Do...Loop
O comando Do...Loop executa uma determinada rotina até que a condição se torne
verdadeira. Observe o exemplo abaixo:
<html><body>
<%
x=0
Do Until x=10
x=x+1
Loop
response.write x
%></body></html>
para interromper o Loop, usa-se o comando Exit Do
clique aqui para rodar o código acima

For...Next
O comando For...Next executa uma determinada rotina até que o contador (uma variável)
atinja o valor determinado. Observe o exemplo:
<html><body>
<%
For i=1 to 50
response.write i
next
%></body></html>
observe que não é necessário nenhuma rotina de incrementação de valores em i. A
cada ciclo, o valor de i é acrescido de uma unidade, automaticamente.
para interromper o Loop, usa-se o comando Exit For

clique aqui para rodar o código acima


While...Wend
O comando While...Wend executa uma determinada rotina até que a condição imposta seja
alcançada. Observe o exemplo dado:
<html><body>
<%
q = "SELECT * FROM cadastro where cidade = 'São Paulo'"
connstring = "DBQ=c:\teste.mdb;Driver={Microsoft Access Driver (*.mdb)}"
Set Conexao = Server.CreateObject("ADODB.Connection")
Conexao.Open connstring, "",""
Set tabela = Conexao.Execute (q)
While not tabela.EOF
response.write tabela("nome").value
wend
%></body></html>

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 8 de 87
Como corrigir o erro este error
Server object error 'ASP 0177 : 8002801d'

Server.CreateObject Failed

/fale.asp, line 25

Library not registered.

E necessario registrar a DLL.

REGSVR32 [nome da dll]

Para acessar uma base Oracle, a partir de uma aplicação ASP, você pode se valer de um
acesso ODBC definido em seu servidor Web

Forms Introduction by Charles Carroll


Forms are the primary way that a user feeds information into ASP. A form is a web page that contains tags
that cause the browser to show fields that the user can fill in.
 Forms can be HTML files. They only need to be ASP if ASPy type capabilities are needed
(session variables, includes).
 The form must pass the variables onto a .asp file to process the form.
 An excellent form tutorial can be found at:
 http://www.mountaindragon.com/html/forms.htm
Form with GET
<form action="x.asp" method=get>

....

<input type=submit>

<input type=reset>

</form>
 there is a limit on the number of characters (approximately 4,000 but varies depending on server
and browsers involved.
 The form will show it's parameter in the browser address window, for example:
 testform.asp?state=md&city=Germantown
 would be the URL in the browser, if the state and city field were populated.
 An ASP script picks up a form field with:
 <%whatever=request.querystring("whichfield")%>
Form with POST
<form action="x.asp" method=post>

....

<input type=submit>

<input type=reset>

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 9 de 87
</form>
 It supports many more characters than get (megabytes of data in case of file uploads)
 The form will not show it's parameter in the browser address window, for example:
 testform.asp
 would be the only URL in the browser, regardless of how many fields and how much data is
passed.
 An ASP script picks up the form field with:
 <%whatever=request.form("whichfield")%>

Forms - Text Box (by John Kauffman & Charles Carroll)

This will create an input box of a default size and the


INPUT NAME="NameLast"> browser will pass the user input to ASP with the label
(identifier) of NameLast.
This is not a limit to the number of characters that
<INPUT NAME="ZipCode" SIZE="10"> can be entered. Do not use size as a validation
technique to limit verbose users.
This controls the maximum number of characters
<INPUT NAME="State" MaxLength="2">
that can be entered.
<INPUT NAME="NameLast"  The name of Bertrand will appear when the page is
VALUE="Bertrand"> opened and will re-appear if the form is reset.

<html><head>
<title>FormTextBox.asp</title>
</head><body bgcolor="#FFFFFF">
<Form action = "FormTextBoxRespond.asp" method="get">
Fill Out This Form For Us:<p>
Last Name -> <Input NAME="NameLast" size ="10"><br>
Country -> <Input NAME="Country" value="USA" size=10><br>
State -> <Input NAME="State" MaxLength="2" size=2><br>
<Input type="submit" value="Give me your data!">
<hr></form>
</body></html>
<html><head>
<title>FormTextBoxRespond.asp</title>
</head><body bgcolor="#FFFFFF">
<%
lname=request.querystring("namelast")
cty=request.querystring("country")
st=request.querystring("state")

response.write lname & "<br>"


response.write cty & "<br>"
response.write st & "<br>"%>
</body></html>

Forms - Text Area (by John Kauffman)


Multi-line text boxes are created using the TEXTAREA command as follows:
<TEXTAREA NAME="UserComments" ROWS=5 COLS=50>

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 10 de 87
... default text is typed here
</TEXTAREA>
Notes: Windows browsers typically provide scroll bars automatically.
Although the TEXT tag does not need to be closed, the TEXTAREA must have a </TEXTAREA>
The TEXTAREA tag (like all of the user-input objects) must be within the form tags discussed earlier.

<html><head>
<TITLE>formTextArea.asp</TITLE>
</head><body bgcolor="#FFFFFF">
<form action="FormTextAreaRespond.asp" method="post">
<p>TextArea Example</p>
<p>Please type your special shipping comments:</p>
<TEXTAREA NAME="shippingComments" ROWS=5 COLS=50>
shipping comments go here
</textarea>
<p><input type=submit value="send in comments!">
</form>
</body></html>
The responder to the form will look like this:
<html><head>
<TITLE>formTextArearespond.asp</TITLE>
</head><body bgcolor="#FFFFFF">
<%
comm=request.form("shippingcomments")
response.write comm
%>
<hr>
</body></html>

Forms - Check Boxes (by John Kauffman & Charles Carroll)


The checkbox object is coded along the same lines as radio buttons, however each checkbox must get its
own unique name since the state of "checked" or "not checked" will be passed to ASP for each box.
Remember that you can set more than one option to be checked.

<html><head>
<TITLE>FormCheckBox.asp</TITLE>
</head><body bgcolor="#FFFFFF">
<form action="FormCheckBoxRespond.asp" method="post">
<p>CheckBox Form Example</p>
<p>How do you want your order confirmed?</p>
<input TYPE="checkbox" NAME="USMail">confirmation sent by first class US
Postal Service<br>
<input TYPE="checkbox" NAME="UPS">confirmation sent by UPS overnight letter
service<br>
<input TYPE="checkbox" NAME="EMail" CHECKED>confirmation sent by EMail<br>
<input TYPE="checkbox" NAME="Fax">confirmation sent by Fax<br>
<input TYPE="checkbox" NAME="Tel" CHECKED>confirmation made by telephone
call<br><br>
<input type="submit"><input type="reset">
</form><hr></body></html>
The responder looks like this:
<html><head>
<TITLE>formCheckBoxRespond.asp</TITLE>
</head><body bgcolor="#FFFFFF">

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 11 de 87
<%
If request.form("USMail")="on" then
response.write "<br>We will confirm by US Mail"
end if
If request.form("UPS")="on" then
response.write "<br>We will confirm by UPS"
end if
If request.form("EMail")="on" then
response.write "<br>We will confirm by EMail"
end if
If request.form("fax")="on" then
response.write "<br>We will confirm by fax"
end if
If request.form("tel")="on" then
response.write "<br>We will confirm by tel"
end if%>
</body>
</html>

CheckBox Form Example


How do you want your order confirmed?

confirmation sent by first class US Postal Service

confirmation sent by UPS overnight letter service

confirmation sent by EMail

confirmation sent by Fax

confirmation made by telephone call

Enviar consulta Redefinir

Forms - Radio Buttons (by John Kauffman)


All of your user input objects in a form must have their own unique name which will be the label that the
browser will assign to them when passing the data to ASP. The exceptions are radio buttons. Since only
one piece of information will be passed to ASP from a set of radio buttons, they all get the same name.
HTML requires that one of the buttons is selected by default, the one indicated by the CHECKED
command. It is important to understand that the browser will send back to ASP the name and the value of
the one button which is selected by the user. The browser will NOT send back the text which is
associated with the button. For the example above, if the user checked on the button with the text New
York City, then ASP would receive City=NY

<html><head>
<TITLE>formRadio.asp</TITLE>
</head><body bgcolor="#FFFFFF">
<form action="FormRadiorespond.asp" method="post">
<p><b>Radio Buttons </b> example</p>
<p>Which Regional Office will you be visiting?</p>
<input TYPE="radio" NAME="City" VALUE="NY">New York City
<input TYPE="radio" NAME="City" VALUE="LA">Los Angeles
<input TYPE="radio" NAME="City" VALUE="SV" CHECKED>Savannah
<br><input type="submit" value="choose a city">
</form>

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 12 de 87
</body></html>
The responder looks like:
<html><head>
<TITLE>formradiorespond.asp</TITLE>
</head><body bgcolor="#FFFFFF">
<%myCity = request.form("City")
Select Case ucase(MyCity)
case "NY"
response.write "New York meeting is on Jan 3"
case "LA"
response.write "LA meeting meeting is on Jan 15"
case "SV"
response.write "Savannah meeting is on Jan 20"
End Select%>
</body>
</html>

Forms - List Boxes (by John Kauffman & Charles Carroll)


The listbox object is very popular since it makes data entry easy. They just pull down a list

<html><head>
<TITLE>FormListBox.asp</TITLE>
</head><body bgcolor="#FFFFFF">
<form action="FormListBoxRespond.asp" method="post">
<SELECT NAME="state">
<OPTION SELECTED VALUE="md">Maryland</OPTION>
<OPTION value="dc">District of Columbia</OPTION>
<OPTION value="va">Virginia</OPTION>
<OPTION value="whoknows">Somewhere Else!</OPTION>
</SELECT>
<input type=submit value="Choose State">
</form>
</body></html>
The responder looks like this:
<html><head>
<TITLE>formlistboxrespond.asp</TITLE>
</head><body bgcolor="#FFFFFF">
<%mystate = request.form("state")
Select Case ucase(mystate)
case "DC"
response.write "DC meeting on 15th"
case "MD"
response.write "MD meeting on 20th"
case else
response.write "No meetings for you to attend!"
End Select%>
</body>
</html>

Select Case (by John Kauffman & Charles Carroll)

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 13 de 87
Using IF-THEN can be cumbersome, prone to programmer errors and slower to execute. A more efficient
construct is SELECT CASE. It is optimized for testing one variable against many conditions.

<html><head>
<TITLE>case.asp</TITLE>
</head><body bgcolor="#FFFFFF">
<form action="caserespond.asp" method="get">
Your First Name<INPUT NAME="FirstName" MaxLength=20><p>
Your Last Name<INPUT NAME="LastName" MaxLength=20><p>
<INPUT TYPE=submit><p><INPUT TYPE=reset>
</form>
</body></html>
Here is the select case that will determine what the form input means.
<html><head>
<TITLE>caserespond.asp</TITLE>
</head><body bgcolor="#FFFFFF">
<%
fname=request.querystring("Firstname")
lname=request.querystring("Lastname")
%>
Nice to Meet You <%=fname%> <%=lname%><p>
<%If fname="" then%>
Sorry we are not on a first name basis...<p>
<%end if
select case lcase(lname)
case "washington","adams"
response.write "The first president has same last name<p>"
case "jefferson"
response.write "The third president has same last name<p>"
case "lincoln"
response.write "The sixteenth president has same last name<p>"
end select%>
</body></html>

=
Select Case Part2 (by John Kauffman & Charles Carroll)
Using IF-THEN can be cumbersome, prone to programmer errors and slower to execute. A more efficient
construct is SELECT CASE. It is optimized for testing one variable against many conditions.

<html><head>
<TITLE>case2.asp</TITLE>
</head><body bgcolor="#FFFFFF">
<form action="case2respond.asp" method="get">
Your First Name<INPUT NAME="FirstName" MaxLength=20><p>
Your Last Name<INPUT NAME="LastName" MaxLength=20><p>
Your Title
<INPUT TYPE="Radio" name="Title" VALUE="employee">Entry Level
<INPUT TYPE="Radio" name="Title" VALUE="temp" CHECKED>Temporary Employee
<INPUT TYPE="Radio" name="Title" VALUE="manager">Management Candidate
<INPUT TYPE="Radio" name="Title" VALUE="executive">Executive
<INPUT TYPE="Radio" name="Title" VALUE="vice-prez">The Vice President of...
<INPUT TYPE="Radio" name="Title" VALUE="CEO">The Boss<p>
<INPUT TYPE=submit><p>
</form>
</body></html>

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 14 de 87
Here is the select case that will determine what the form input means.
<html><head>
<TITLE>case2respond.asp</TITLE>
</head><body bgcolor="#FFFFFF">
<%
fname=request.querystring("Firstname")
lname=request.querystring("Lastname")
title=request.querystring("title")
response.write "Nice to Hire You " & fname & " " & lname & "<p>"
Select Case lcase(Title)
case "employee","temp"
response.write("The washroom is in the hall")
case "manager","executive"
response.write("Here is your key to the Executive washroom")
case "ceo", "vice-prez"
response.write("The maid will attend to your private washroom")
End Select%>
</body></html>

IF statement (by John Kauffman & Charles Carroll)


Very often you must determine what to do next based on user input. This is one of the roles of the IF
statement. First we make a form that will ask a user for their first name and last name.

<html><head>
<TITLE>if.asp</TITLE>
</head><body bgcolor="#FFFFFF">
<form action="ifrespond.asp" method=get>
Your First Name<INPUT NAME="FirstName" MaxLength=20><p>
Your Last Name<INPUT NAME="LastName" MaxLength=20><p>
<INPUT TYPE=submit><p><INPUT TYPE=reset>
</form></body></html>
Now we make a asp file that examines their first name and last name after the form is submitted.
<html><head>
<TITLE>ifrespond.asp</TITLE>
</head><body bgcolor="#FFFFFF">
<%fname=request.querystring("Firstname")
lname=request.querystring("Lastname")
If fname="George" and lname="Washington" then%>
Hi.<p>You must be the first president!
<%else%>
Hi!<p>Nice to Meet You
<%end if%>
</body></html>

IF statement Part2 (by John Kauffman & Charles Carroll)


Very often you must determine what to do next based on user input. This is one of the roles of the IF
statement. First we make a form that will ask a user for their first name and last name.

<html><head>
<TITLE>if2.asp</TITLE>
</head><body bgcolor="#FFFFFF">
<form action="if2respond.asp" method=get>
Your First Name<INPUT NAME="FirstName" MaxLength=20><p>

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 15 de 87
Your Last Name<INPUT NAME="LastName" MaxLength=20><p>
<INPUT TYPE=submit><p><INPUT TYPE=reset>
</form></body></html>
Now we make a asp file that examines their first name and last name after the form is submitted. As
contrasted to the previous example this time we are checking multiple conditions utilizing elseif and we
are dealing with entries no matter whether they were typed in upper or lower case.
<html><head>
<TITLE>if2respond.asp</TITLE>
</head><body bgcolor="#FFFFFF">
<%
fname=lcase(request.querystring("Firstname"))
lname=lcase(request.querystring("Lastname"))
If fname="george" and lname="washington" then%>
Hi.<p>You must be the first president!
<%elseIf fname="ronald" and lname="reagan" then%>
Hi.<p>You must be the actor president!
<%elseIf fname="jimmy" and lname="carter" then%>
Hi.<p>You must be the peanut farmer president!
<%elseIf fname="naoko" or fname="charles" then%>
Hi.<p>Your name reminds me of someone<p>
but I am not sure who!
<%else%>
Hi!<p>Nice to Meet You
<%end if%>
</body></html>

IF statement Part3 (by John Kauffman & Charles Carroll)


Very often you must determine what to do next based on user input. This is one of the roles of the IF
statement. First we make a form that will ask a user for their first name, last name and salary.

<html><head>
<TITLE>if3.asp</TITLE>
</head><body bgcolor="#FFFFFF">
<form action="if3respond.asp" method=get>
Your First Name<INPUT NAME="FirstName" MaxLength=20><p>
Your Last Name<INPUT NAME="LastName" MaxLength=20><p>
Your Salary <INPUT NAME="Salary" MaxLength=7><p>
<INPUT TYPE=submit><p><INPUT TYPE=reset>
</form></body></html>
This example shows how IF can deal with ranges and use various other boolean operators.
<html><head>
<TITLE>if3respond.asp</TITLE>
</head><body bgcolor="#FFFFFF">
<%
fname=request.querystring("Firstname")
lname=request.querystring("Lastname")
salary=request.querystring("Salary")
response.write "Nice to Meet You " & fname & " " & lname & "<p>"
if salary>100000 then%>
Would you like to loan me some money?<p>
<%
sstaxMarginal=15
else
SSTaxMarginal=15

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 16 de 87
end if
If salary>6700 and salary<30000 then
SSTaxMarginal=0%>
Would you like me to loan you some money?<p>
<%end if
If salary<6700 then
SSTaxMarginal=0
end if
%>
By the way your marginal tax rate is <%=sstaxmarginal%>
</body></html>

If Then Part4 (by John Kauffman & Charles Carroll)


Very often you must determine what to do next based on user input. This is one of the roles of the IF
statement. First we make a form that will ask a user for their first name, last name and salary.

<html><head>
<TITLE>if4.asp</TITLE>
</head><body bgcolor="#FFFFFF">
<form action="if4respond.asp" method=get>
Your First Name<INPUT NAME="FirstName" MaxLength=20><p>
Your Last Name<INPUT NAME="LastName" MaxLength=20><p>
Your Salary <INPUT NAME="Salary" MaxLength=7><p>
<INPUT TYPE=submit><p><INPUT TYPE=reset>
</form></body></html>
This example shows how IF can deal with ranges but this example illustrates the critical factor of ordering.
If you were to re-arrange these IFs they would not accurately report your salary grade.
<html><head>
<TITLE>if4respond.asp</TITLE>
</head><body bgcolor="#FFFFFF">
<%fname=request.querystring("Firstname")
lname=request.querystring("Lastname")
salary=request.querystring("Salary")
response.write "Nice to Meet You " & fname & " " & lname & "<p>"
if salary>80000 then
salarygrade=4
end if
if salary <=80000 then
salarygrade=3
end if
If salary <=60000 then
salarygrade=2
end if
if salary <=40000 then
salarygrade=1
end if
response.write ("Your Salary is $" & salary)
response.write (", your Grade is " & salarygrade & ".<p>")
%>
</body></html>

Passing Data with Hidden Fields by Charles Carroll

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 17 de 87
This page demonstrates how to have several pages that are forms yet after all pages are filled out the
final form has access to all inputs without session variables.
surveypage1.asp asks the user the first questions:

<html><head>
<TITLE>surveypage1.asp</TITLE>
</head>
<body bgcolor="#FFFFFF">
<form action="surveypage2.asp" method="post">
First Name<br>
&nbsp;&nbsp;&nbsp;
<input type="text" name="first" size="20"><br>
Last Name<br>
&nbsp;&nbsp;&nbsp;
<input type="text" name="last" size="20">
<p>&nbsp;&nbsp;&nbsp;
<input type="submit" value="Next Question ->"></p>
</form>
</body></html>
surveypage2.asp asks the user the next questions:
Test the Script --
/learn/test/surveypage2.asp"
<html><head>
<TITLE>surveypage2.asp</TITLE>
</head>
<body bgcolor="#FFFFFF">
<form action="surveypage3.asp" method="post">
<%
first=request.form("first")
last=request.form("last")
%>
Hair Color<br>
&nbsp;&nbsp;&nbsp;
<input type="text" name="haircolor" size="20"><br>
Favorite Color<br>
&nbsp;&nbsp;&nbsp;
<input type="text" name="favoritecolor" size="20">
<p>&nbsp;&nbsp;&nbsp;
<input type="hidden" name="first" value="<%=first%>">
<input type="hidden" name="last" value="<%=last%>">
<input type="submit" value="Next Question ->"></p>
</form>
</body></html>
surveypage3.asp asks the user yet some more questions:
Test the Script --
/learn/test/surveypage3.asp"
<html><head>
<TITLE>surveypage2.asp</TITLE>
</head>
<body bgcolor="#FFFFFF">
<%
first=request.form("first")
last=request.form("last")
haircolor=request.form("haircolor")
favoritecolor=request.form("favoritecolor")
%>

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 18 de 87
<form action="surveypage3respond.asp" method="post">
Street Address<br>
&nbsp;&nbsp;&nbsp;
<input type="text" name="street" size="20">
<br>
City<br>
&nbsp;&nbsp;&nbsp;
<input type="text" name="city" size="20"><br>
State<br>
&nbsp;&nbsp;&nbsp;
<input type="text" name="state" size="20">
<br>
Zip<br>
&nbsp;&nbsp;&nbsp;
<input type="text" name="zip" size="20">
<br>
&nbsp;&nbsp;&nbsp;

<input type="hidden" name="first" value="<%=first%>">


<input type="hidden" name="last" value="<%=last%>">
<input type="hidden" name="haircolor" value="<%=haircolor%>">
<input type="hidden" name="favoritecolor" value="<%=favoritecolor%>">

<input type="submit" value="Final Step ->">


</form>
</body></html>
surveypage3respond.asp gathers all the answers and responds:
<html><head>
<TITLE>surveypage3respond.asp</TITLE>
</head>
<body bgcolor="#FFFFFF">
<%
first=request.form("first")
last=request.form("last")
haircolor=request.form("haircolor")
favoritecolor=request.form("favoritecolor")
street=request.form("street")
city=request.form("city")
state=request.form("state")
zip=request.form("zip")
%>
Thanks for all your information<br>
We are happy to meet you <%=first%>&nbsp;<%=last%><br>
We know your hair color is <%=haircolor%><br>
and your favorite color is <%=favoritecolor%><br>
and we will ship all items to<br>
<%=first%>&nbsp;<%=last%><br>
<%=street%><br>
<%=city%>&nbsp;<%=state%>&nbsp;<%=zip%>
</body></html>

Forms - For Each/Iteration by Charles Carroll

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 19 de 87
Forms with many elements may be easier to process if a FOR EACH construct is used to loop through
every value submitted from the source form. In this example, there are many checkboxes and instead of
many IF statements we replace them with one FOR EACH loop.

<html><head>
<TITLE>monthlyForm.asp</TITLE>
</head><body bgcolor="#FFFFFF">
<form action="monthlyFormRespond.asp" method="post">
<p>CheckBox Form Example</p>
<p><b>Check Off The Days You Worked</b></p>
<%
my_month=request.querystring("whichmonth")
' response.write my_month & "<br>"
if my_month="" then
my_date=now()
else
my_month=month("1/" & (request.querystring("whichmonth")) & "/1999")
my_date=dateserial(year(now()),my_month,1)
end if
'response.write my_date & "<br>"

If my_month=12 then
my_day=1
my_month=1
my_year=my_year+1
else
my_day=1
my_month=month(my_date)+1
my_year=year(my_date)
end if

lastdayofmonth=day(DateSerial(Year(my_Date), my_Month,0))
'response.write lastdayofmonth & "<br>"

for counter=1 to lastdayofmonth%>


<input TYPE="checkbox" NAME="workingday<%=counter%>">day <%=counter%> Worked?
<br>
<%next%>
<input type="submit" value="Submit Days Worked">
</form>
</body></html>
<html><head>
<TITLE>monthlyFormRespond.asp</TITLE>
</head><body bgcolor="#FFFFFF">
<%
daysworked=0
for each whatever in request.form
thisvalue=request.form(whatever)
If thisvalue="on" then
daysworked=daysworked+1
end if
next
response.write "Thanks for working <b>" & daysworked & "</b> days"
%>
</body></html>

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 20 de 87

Forms - Sending Results via EMail by Charles Carroll


Sometimes it makes sense to just email all the form results to someone. But the "mailto:" method used by
many Web developers is not the best way as it has the following serious limitations:
 forms sent this way are difficult to read by a human recipient because of the encoded way it is
sent
 Not all browsers support mailto (Netscape does, several IE versions before 4.0 do not, many
browsers do not)
 The user may have a faulty email configuration that keeps the browser from sending the mail
Server side mail has none of these limitations. Here is a form that will be sent to you provided you change
the variables at the top of the code. This example uses ASPmail, which is available for a modest price at:
http://www.serverobjects.com
Here is a sample form that will be sent via email:

<%
' change these to reflect where form should go
fromName="Whoever"
fromAddress="somestudent@activeserverpages.com"
toName="Charles M. Carroll"
toAddress="cc@thebestweb.com"
subject="form send mail tutorial"
relay="relay.datareturn.com"
%>
<html><head>
<title>FormToBeMailed.asp</title>
</head><body bgcolor="#FFFFFF">
<form action="FormToBeMailedrespond.asp" method="GET">
Fill Out This Form For Us:<p>
First Name -&gt; <input NAME="NameFirst" size="10"><br>
Last Name -&gt; <input NAME="NameLast" size="10"><br>
Country -&gt; <input NAME="Country" value="USA" size="10"><br>
State -&gt; <input NAME="State" MaxLength="2" size="2"><br>
email copy to -&gt; <input NAME="emailcopy" MaxLength="20" size="20"><br>

<input type="submit"><input type="reset">

<% ' do not touch these lines. Needed to send mail! %>
<input type="hidden" name="mail-from" value="<%=fromName%>">
<input type="hidden" name="mail-fromAddress" value="<%=fromAddress%>">
<input type="hidden" name="mail-to" value="<%=ToName%>">
<input type="hidden" name="mail-toaddress" value="<%=toaddress%>">
<input type="hidden" name="mail-subject" value="<%=subject%>">
<input type="hidden" name="mail-relay" value="<%=relay%>">
</form>
</body></html>
Here is the generic form responder that can be used with this or any form:
<html><head>
<title>serverobjectsmailrespond.asp</title>
</head><body bgcolor="#FFFFFF">
<%
' ASPMail(tm) from http://www.serverobjects.com
' is not part of ASP per se,
' but a excellent third party component

my_from=request("mail-fromName")

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 21 de 87
my_fromAddress=request("mail-fromaddress")
my_to=request("mail-toName")
my_toAddress=request("mail-toaddress")
my_subject=request("mail-subject")
my_relay=request("mail-relay")

Set Mailer = Server.CreateObject("SMTPsvg.Mailer")


Mailer.RemoteHost = my_relay

Mailer.FromName = my_from
Mailer.FromAddress = my_fromAddress
Mailer.AddRecipient my_to, my_toaddress
Mailer.Subject = my_subject

for each whatever in request.querystring


If instr(whatever,"mail-")=0 then
Mailer.BodyText = whatever & "=" & vbcrlf
Mailer.BodyText = request.querystring(whatever) & vbcrlf & vbcrlf
end if
next

for each whatever in request.form


If instr(whatever,"mail-")=0 then
Mailer.BodyText = whatever & "=" & vbcrlf
Mailer.BodyText = request.form(whatever) & vbcrlf & vbcrlf
end if
next

my_emailcopy=request("emailcopy")
If my_emailcopy="" then
else
Mailer.AddRecipient "form filler",my_emailcopy
end if

If Mailer.SendMail then
Msg = "mail sent sucessfully!"
Else
Msg = "mail was not sent sucessfully"
End If
response.write Msg
%>
</body></html>

Cookies Storing (by Juan Llibre & Charles Carroll)


The script below demonstrates how to populate a form from a cookie.

<%
response.buffer=true
%>
<html><head>
<TITLE>cookiesform.asp</TITLE>&
<body bgcolor="#FFFFFF">
<%
ln=Request.Cookies("thatperson")("lastname")

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 22 de 87
fn=Request.Cookies("thatperson")("firstname")
st=Request.Cookies("thatperson")("state")
%>
<Form action = "cookiesformrespond.asp">
Form with Cookies<p>
Please enter your First Name<p>
<Input NAME="NameFirst" size ="40" value=<%=fn%>>
<p>
Please enter your Last Name<p>
<Input NAME="NameLast" size ="40" value=<%=ln%>>
<p>
Please enter your State abbreviation<p>
<Input NAME="State" MaxLength="2" value=<%=st%>>
<Input type=submit></form>
</body></html>

Cookies Displaying (by Juan Llibre & Charles Carroll)


The script below demonstrates how to store a cookie that was passed in from the form.
<%response.buffer=true%>
<html><head>
<TITLE>cookiesformrespond.asp</TITLE>&
<body bgcolor="#FFFFFF">
<%
l=request.querystring("namelast")
f=request.querystring("namefirst")
st=request.querystring("state")
cookypath="/learn/test"
cookydomain=".www.activeserverpages.com"
cookydie=date+365
Response.Cookies("thatperson")("lastname") = l
Response.Cookies("thatperson")("firstname") = f
Response.Cookies("thatperson")("state") = st
Response.Cookies("thatperson").Expires = cookydie
Response.Cookies("thatperson").Domain = cookydomain
Response.Cookies("thatperson").Path = cookypath
response.write Request.Cookies("thatperson")("lastname") & "<p>"
response.write Request.Cookies("thatperson")("firstname") & "<p>"
response.write Request.Cookies("thatperson")("state") & "<p>"
%>
</body></html>

Cookies Deleting (by Juan Llibre & Charles Carroll)


The script below demonstrates how to remove a cookie.

<%response.buffer=true%>
<html><head>
<TITLE>cookiesformforget.asp</TITLE>&
<body bgcolor="#FFFFFF">
<%
cookiepath="/learn/test"
cookiedomain=".www.activeserverpages.com"
cookiesdie=date-365
Response.Cookies("thatperson").Expires = cookiesdie
Response.Cookies("thatperson").Domain = cookiesdomain

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 23 de 87
Response.Cookies("thatperson").Path = cookiespath
response.write "I will not remember you"
%>
</body></html>

Cookies Simplified (by Paul Rigor of http://www.mysticpc.com)

A reader of the site submits this simplified cookie reading, writing and deleting by automatically determing
the correct domain and path info without you having to specify it for each cookie.

<%response.buffer=true%>
<!--#include file="cookielib.asp"-->
<html><head>
<TITLE>cookiesub.asp</TITLE>&
<body bgcolor="#FFFFFF">
<%
Call AddCookie("Person", "Firstname", "Robert", 365)
Call AddCookie("Person", "LastName", "Forward", 365)
response.write GetCookie("person","firstname")
response.write GetCookie("person","lastname")
%>
</body></html>
Here is the library code that does most of the work:

<%
'=======================================================================
' CookieLib.asp by Paul Rigor (http://www.mysticpc.com)
' online at http://www.activeserverpages.com/learn/cookiesub.asp
' copyright 1998 by Paul Rigor
'
' application("cookiedomain") and application("cookiepath") can be
' set if firewall precludes accurate server variable
'
' AddCookie(Cname, CKey, CValue, CExpDays)
' Example: Call AddCookie("MyCookie", "Cost", "$1.00", 100)
'
' KillCookie(Cname,CKey)
' Example: Call KillCookie("MyCookie", "Cost")
'
' GetCookie(Cname,Ckey)
' Example: Call GetCookie("MyCookie", "Cost")
'
' Cname = Cookie Name: Required, for cookie name
' Ckey = Cookie Key: Optional(empty sting), use if cookie should be a
dictionary
' Cvalue = Cookie Value: Required, what the cookie should be set to.
' CExpDays = Cookie Expiration: number of days cookie is valid, default 365
Function AddCookie(Cname, CKey, CValue, CExpDays)
If Cname = "" Then
Exit Function
End If

If IsNumeric(CExpDays) = False Then CExpDays = 0


If CExpDays < 1 Then CExpDays = 365

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 24 de 87

If CValue = "" Then CValue = " "

If CKey <> "" Then


Response.Cookies(Cname)(CKey) = CValue
Else
Response.Cookies(Cname) = CValue
End If

Response.Cookies(CName).Expires = Date + CExpDays


Response.Cookies(CName).Domain = GetCookieDomain()
Response.Cookies(CName).Path = GetCookiePath()
End Function

Function KillCookie(Cname,CKey)
If CKey <> "" Then
Call AddCookie(Cname, Ckey, "", 0)
Else
Response.Cookies(Cname).Expires = Date - 365
Response.Cookies(CName).Domain = GetCookieDomain()
Response.Cookies(CName).Path = GetCookiePath()
End If
End Function

Function GetCookie(Cname, Ckey)


If CKey <> "" Then
GetCookie = Request.Cookies(Cname)(Ckey)
Else
GetCookie = Request.Cookies(Cname)
End If
End Function

Function GetCookieDomain()
If Application("CookieDomain") <> "" Then
GetCookieDomain = Application("CookieDomain")
Else
GetCookieDomain = Request.ServerVariables("SERVER_NAME")
End If
End Function

Function GetCookiePath()
If Application("CookiePath") <> "" Then
GetCookiePath = Application("CookiePath")
Else
TmpPath = Request.ServerVariables("SCRIPT_NAME")
TmpPath = Split(TmpPath, "/")
For PathArryCnt = 0 to Ubound(TmpPath) - 1
GetCookiePath = GetCookiePath & TmpPath(PathArryCnt) & "/"
Next
If GetCookiePath = "/" Then GetCookiePath = ""
End If
End Function
%>

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 25 de 87

Personal Web Server (PWS) by Charles Carroll


The Personal Web Server is a marvellous tool because it lets you develop and test websites
 without being connected to the Internet
 without placing your code on the World-Wide-Web or a server until it is tested off-line and totally
debugged.
 The address of your personal web server is:
http://127.0.0.1
It has other aliases, like http://localhost but it true reliable name is the one above.

Forms - Sending Results via EMail by Charles Carroll


Sometimes it makes sense to just email all the form results to someone. But the "mailto:" method used by
many Web developers is not the best way as it has the following serious limitations:
 forms sent this way are difficult to read by a human recipient because of the encoded way it is
sent
 Not all browsers support mailto (Netscape does, several IE versions before 4.0 do not, many
browsers do not)
 The user may have a faulty email configuration that keeps the browser from sending the mail
Server side mail has none of these limitations. Here is a form that will be sent to you provided you change
the variables at the top of the code. This example uses ASPmail, which is available for a modest price at:
http://www.serverobjects.com
Here is a sample form that will be sent via email:
1 <%
2 ' change these to reflect where form should go
3 fromName="Whoever"
4 fromAddress="somestudent@activeserverpages.com"
5 toName="Charles M. Carroll"
6 toAddress="cc@thebestweb.com"
7 subject="form send mail tutorial"
8 relay="relay.datareturn.com"
9 %>
10 <html><head>
11 <title>FormToBeMailed.asp</title>
12 </head><body bgcolor="#FFFFFF">
13 <form action="FormToBeMailedrespond.asp" method="GET">
14 Fill Out This Form For Us:<p>
15 First Name -&gt; <input NAME="NameFirst" size="10"><br>
16 Last Name -&gt; <input NAME="NameLast" size="10"><br>
17 Country -&gt; <input NAME="Country" value="USA" size="10"><br>
18 State -&gt; <input NAME="State" MaxLength="2" size="2"><br>
19 email copy to -&gt; <input NAME="emailcopy" MaxLength="20" size="20"><br>
20
21 <input type="submit"><input type="reset">
22
23 <% ' do not touch these lines. Needed to send mail! %>
24 <input type="hidden" name="mail-from" value="<%=fromName%>">
25 <input type="hidden" name="mail-fromAddress" value="<%=fromAddress%>">
26 <input type="hidden" name="mail-to" value="<%=ToName%>">
27 <input type="hidden" name="mail-toaddress" value="<%=toaddress%>">
28 <input type="hidden" name="mail-subject" value="<%=subject%>">
29 <input type="hidden" name="mail-relay" value="<%=relay%>">
30 </form>

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 26 de 87
31 </body></html>
Here is the generic form responder that can be used with this or any form:
1 <html><head>
2 <title>serverobjectsmailrespond.asp</title>
3 </head><body bgcolor="#FFFFFF">
4 <%
5 ' ASPMail(tm) from http://www.serverobjects.com
6 ' is not part of ASP per se,
7 ' but a excellent third party component
8
9 my_from=request("mail-fromName")
10 my_fromAddress=request("mail-fromaddress")
11 my_to=request("mail-toName")
12 my_toAddress=request("mail-toaddress")
13 my_subject=request("mail-subject")
14 my_relay=request("mail-relay")
15
16 Set Mailer = Server.CreateObject("SMTPsvg.Mailer")
17 Mailer.RemoteHost = my_relay
18
19 Mailer.FromName = my_from
20 Mailer.FromAddress = my_fromAddress
21 Mailer.AddRecipient my_to, my_toaddress
22 Mailer.Subject = my_subject
23
24 for each whatever in request.querystring
25 If instr(whatever,"mail-")=0 then
26 Mailer.BodyText = whatever & "=" & vbcrlf
27 Mailer.BodyText = request.querystring(whatever) & vbcrlf & vbcrlf
28 end if
29 next
30
31 for each whatever in request.form
32 If instr(whatever,"mail-")=0 then
33 Mailer.BodyText = whatever & "=" & vbcrlf
34 Mailer.BodyText = request.form(whatever) & vbcrlf & vbcrlf
35 end if
36 next
37
38 my_emailcopy=request("emailcopy")
39 If my_emailcopy="" then
40 else
41 Mailer.AddRecipient "form filler",my_emailcopy
42 end if
43
44 If Mailer.SendMail then
45 Msg = "mail sent sucessfully!"
46 Else
47 Msg = "mail was not sent sucessfully"
48 End If
49 response.write Msg
50 %>
51 </body></html>

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 27 de 87

Server Variables by Charles Carroll


Available Server Variables are the result of a combination of the browser software and the server
software. They are not always exactly the same on your server and with specific browsers as we
document here. Server Variables are retrieved with request.servervariables("variablename"), for example:

sn=request.servervariables("script_na name of script, i.e./learn/server.asp in this case


me")
ref=request.servervariables("http_ref name of site page (unless they just typed the URL)
erer") they clicked on to get here.
br=request.servervariables("http_user Identification string emitted by browser.
_agent")
lan=request.servervariables("http_acc en for english. Basically indicates language the
ept_language") browser is targetted to.
user=request.servervariables("logon_u IE passes back NT logon in this variable!
ser")

This script below demonstrates accessing a couple of these variables:

Test the Script --


/learn/test/server.asp"
<html><head>
<title>server.asp</title>&
<body>
<%
sn=request.servervariables("script_name")
response.write "Script Name=" & sn & "<br>"

ref=request.servervariables("http_referer")
response.write "Page thats links to this=" & ref & "<br>"

ua=request.servervariables("http_user_agent")
response.write "Browser String=" & ua & "<br>"

lan=request.servervariables("http_accept_language")
response.write "Browser Language=" & lan & "<br>"

user=request.servervariables("logon_user")
response.write "NT Logon Name=" & user & "<br>"
%>
</body></html>

usando text files

View ASP Source


Go Back to /aspsamp/Samples/text.asp
Go Back to main samples page

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 28 de 87
Working with Text Files
Wrote the string 'This is a test...12/20/1999 5:53:22 AM' to the file: 'z:\internet\aspsamp\samples\textwork.txt'
Reading from file 'z:\internet\aspsamp\samples\textwork.txt':
This is a test...12/20/1999 5:53:22 AM
The Tip Number is: 4
The Tip of the Day is:
Climbers do it with gear.

<HTML>
<HEAD>
<TITLE>Working with Text Files</TITLE>
</HEAD>
<BODY BGCOLOR=#FFFFFF>
<H3>Working with Text Files</H3>
<%
Set FileObject = Server.CreateObject("Scripting.FileSystemObject")
TestFile = Server.MapPath ("/ASPSamp") & "\samples\textwork.txt"
Set OutStream= FileObject.CreateTextFile (TestFile, True, False)
OutputString = "This is a test..." & Now()
OutStream.WriteLine OutputString
Response.Write "Wrote the string '" & OutputString & "' to the file: '" & TestFile & "'<P>"
Set OutStream = Nothing

Response.Write "Reading from file '" & TestFile & "':<BR>"


Set InStream= FileObject.OpenTextFile (TestFile, 1, False, False)
While not InStream.AtEndOfStream
Response.Write Instream.Readline & "<BR>"
InStream.SkipLine()
Wend
Set Instream=Nothing

Randomize
TipNumber = Int(10 * Rnd)

Response.Write "<P>The Tip Number is: " & TipNumber & "<P>"

strtipsfile = (Server.MapPath("/advworks") + "\tips.txt")


Set InStream = FileObject.OpenTextFile (strtipsfile, 1, False, False)
While TipNumber > 0
InStream.SkipLine()
TipNumber = TipNumber-1
Wend
TipOfTheDay = Instream.ReadLine
Response.Write "The Tip of the Day is: <BR><B>" & TipOfTheDay & "</B>"
Set InStream = Nothing
%>
<BR>
<BR>
<!--#include virtual="/ASPSamp/Samples/srcform.inc"-->
</BODY>
</HTML>

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 29 de 87

View ASP Source


Go Back to /aspsamp/Samples/browser.asp
Go Back to main samples page

The following is a list of properties of your browser:


Browser Type Default
What Version 0.0
Major Version 0
Minor Version 0
Frames False
Tables True
Cookies False
Background Sounds False
VBScript False
JavaScript False

<HTML>
<HEAD><TITLE>Browser Properties</TITLE></HEAD>
<BODY BGCOLOR=#FFFFFF>

<% Set bc = Server.CreateObject("MSWC.BrowserType") %>

<H3>The following is a list of properties of your browser:</H3>


<TABLE BORDER=1>
<TR><TD>Browser Type</TD> <TD><%= bc.Browser %></TD>
<TR><TD>What Version</TD> <TD><%= bc.Version %></TD>
<TR><TD>Major Version</TD> <TD><%= bc.Majorver %></TD>
<TR><TD>Minor Version</TD> <TD><%= bc.Minorver %></TD>
<TR><TD>Frames</TD> <TD><%= CStr(CBool(bc.Frames)) %></TD>
<TR><TD>Tables</TD> <TD><%= CStr(CBool(bc.Tables)) %></TD>
<TR><TD>Cookies</TD> <TD><%= CStr(CBool(bc.cookies)) %></TD>
<TR><TD>Background Sounds</TD> <TD><%= CStr(CBool(bc.BackgroundSounds))
%></TD>
<TR><TD>VBScript</TD> <TD><%= CStr(CBool(bc.VBScript)) %></TD>
<TR><TD>JavaScript</TD> <TD><%= CStr(CBool(bc.Javascript)) %></TD>
</TABLE>
<BR>
<BR>
<!--#include virtual="/ASPSamp/Samples/srcform.inc"-->
</BODY>
</HTML>

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 30 de 87

View ASP Source


Go Back to /aspsamp/Samples/Query.asp
Go Back to main samples page

Simple ADO Page Scrolling Example


Query:

Execute Reset

<HTML>
<HEAD><TITLE>Simple ADO Page Scrolling Example</TITLE></HEAD>
<BODY BGCOLOR=#FFFFFF>
<H1>Simple ADO Page Scrolling Example</H1>
<FORM METHOD=POST ACTION="Results.asp">
<P>Query:
<% sql = Request("sql")
if sql = "" Then
sql = "select ProductName, ProductType, ProductDescription, ProductImageURL from
products"
end if
%>
<P><TEXTAREA NAME="sql" ROWS=15 COLS=75><%=sql%></TEXTAREA><BR>
<P><INPUT TYPE=SUBMIT VALUE="Execute"><INPUT TYPE=RESET VALUE="Reset">
</FORM>
<!--#include virtual="/ASPSamp/Samples/srcform.inc"-->
</BODY>
</HTML>

When referencing recordset values in your code, you probably write something like this:
If rs("QuantityOrdered") < 1 then NoSale = True

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 31 de 87
There is a second way to write this code, by fully qualifying the recordset and field object references:
If rs.Fields("QuantityOrdered").Value < 1 then NoSale = True
If you refer to recordset values in your code quite a bit (and most of us do), there is a way to improve performance
tremendously with very little effort. Here's the secret: when referring to recordset elements, use the ordinal form.
This removes the requirement for a pseudo-dictionary lookup on the fieldname. That would mean our sample above
would look like this (assuming that the field QuantityOrdered was the 13th field in our recordset):
If rs(12) < 1 then NoSale = True
Note: Since the fields in the Recordset object are ordered with their index beginning at zero, rs(12) will get
the 13th element!
Here are some sample benchmarks for three runs using each method (not done under a controlled environment, but
close enough to prove the point!):
Form: rs("fieldname") rs.Fields("fieldname").Value rs(x)
Results:
2.967 2.936 1.650
(in seconds)
2.824 2.914 1.611
2.893 2.943 1.613
Average: 2.895 2.931 1.625
Now, you may say that using the ordinal notation decreases code readability, and I would agree. Several readers
have been anxious to point out that you can use constants to refer to recordset elements. Although this has a very
slight performance penalty in terms of script size and initial interpreter processing, it represents a nice trade-off
between code readability and efficiency, e.g.
const fldQuantityOrdered = 12 ... if rs(fldQuantityOrdered)
This also has the added benefit of making changes to your code easier should your recordset ordinal positions
change.
Remember, when it comes to optimizing your code for a high-volume website, be prepared and even anxious to try
(and test) several techniques to obtain the desired effect. Remember that when it comes to code optimization, in
some cases, the LEAST intuitive answer is the correct one.
Happy Programming!

Using Includes
The previous FAQ discussed the importance of using functions in your ASP to modularize your code. Unfortunately,
a function written in one ASP file cannot be accessed by a separate ASP file. That is what includes are useful for
(among other things).
Includes are similar to #include's in C++, or uses in Pascal. An include in ASP simple copies over the text from
the specified file into the current file. For example, say you had a file named PrintHelloWorld.asp, which had the
following code:
<%

Response.Write("Hello, world!")

%>
Now, we can include that code in another ASP file.
<%@ LANGUAGE="VBSCRIPT" %>

<HTML>

<BODY>

<!--#include file="PrintHelloWorld.asp"-->

</BODY>

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 32 de 87
</HTML>
This HTML file will output "Hello, World" to the client's browser screen. By using the include file, it was as if we
had just typed the text from the file PrintHelloWorld.asp directly into the above source code.
To include a file, the syntax is like an HTML comment. You need the <!--, followed by a #include. You can then
use one or two keywords, either file or virtual. What one you use depends on the location of the file you want
to include relative to the current file. If the file you want to include is in the same directory or a subdirectory of
where the current file is, use the file keyword, like we did in the example above.
If, however, the file is in a different directory altogether, you need to use virtual. For example, it could look like
this:
<!--#include virtual="/scripts/PrintHelloWorld.asp"-->
or
<!--#include virtual="../ASPDirectory/PrintHelloWorld.asp"-->
Let's look at one more quick example of #include's. Image that we have a file in our scripts directory named
SquareFunction.asp. In this file, we have an ASP function that will square a number. Here is what the file
SquareFunction.asp would look like:
<%

function Square(num)

Square = num * num

end function

%>
Now, if we have an ASP page that we want to use the square function, we would simply type the following code:
<%@ LANGUAGE="VBSCRIPT" %>

<!--#include virtual="/scripts/SquareFunction.asp"-->

<%

Dim MyAge

MyAge = CInt(20)

%>

<HTML>

<BODY>

Scott is <%=MyAge%> years old.

But he feels as if he's <%=Square(MyAge)%>!

</BODY>

</HTML>
Note that it was if we had typed in the file SquareFunction.asp into the ASP file above. The use of include files in
ASP is good programming technique, for it allows one copy of source code to be used multiple times. You should
strive to write your ASP applications as modular as possible, and include files help you do just that!

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 33 de 87
ADOVBS.inc... use it!
ADOVBS.inc is a file included with IIS that has all of the ADO constants defined. When you visit this web site
other related sites, you'll find a lot of sites, when connecting to databases, use constants with names like
adOpenForwardOnly and adLockReadOnly. These are just constants that are defined in the ADOVBS.inc
file.
It may seem out of place that I am recommending that you include a file that relates to ADO (which I've yet to
discuss), but it is good to get in the habit of including ADOVBS.inc on your ASP pages.
To includ ADOVBS.inc, all you need to do is add one simple line to the top of your ASP pages:
<!--#include virtual="/adovbs.inc"-->
and be sure to put ADOVBS.inc in your root web application directory.
You can download ADOVBS.inc from this site in streaming text format.

Em resposta a: Do que o java é capaz realmente? enviado por Ignorante em 15 de Dezembro de 1999 às 18:28:04:
Java virtual machine e uma abstracao de uma maquina real. Ou seja vc simula em software uma maquina real.
Logo se vc tiver uma maquina virtual padrao(como e no java) e tiver este software disponovel para varios ambientes
(SO) vc podera executar um mesmo programa utilizando a maquina virtual ,nao importanto em que SO ou maquina
ele esteja.
O java serve tanto para internet como para fazer aplicacoes.
Existem varias empresas que desenvolvem aplicacoes em java, principalmente
aquelas que desenvolvem softwares distribuidos.

JAVA SÓ PRESTA PRA CRIAR APPLETS


ELE É LENTO....UMA BOSTA!!!
ESSA HISTORIA DE JAVA JÁ TEM UM TEMPÃO
E VC JÁ VIU ALGUMA COISA QUE PRESTE ESCRITO EM JAVA??...ALÉM DO MAIS A SUN NÃO TEM
COMPETÊNCIA PRA DESENVOLVER ELE MAIS DO QUE JÁ CONSEQUIRAM(AGORA TENTA
RECUPERAR O DINHEIRO GASTO NO TERCEIRO MUNDO COMO O BRASIL, COBRANDO ABSURDOS
PELOS CURSINHOS QUE ELES OFERECEM)
SE VC ESTA PROCURANDO UMA LINGUAGUEM TEMTE APRENDER C++ , SE É PRA NET, APRENDA
CGI, PERL,
PHP, ETC.... TEM MAIS FUTURO!

Discordo da opinião do Tal Guru da informatica...


Java realmente exige maquina para rodar, hoje maquina nao é problema, mas é uma linguagem extremamente
apaixonante de programar, possui muitos recursos, voces faz muito com pouco código. Também, ela é portável ( O
C++ nao é ), isto é, roda em qualquer plataforma sem a necessidade alteracao de código, isso economiza um monte
de dor cabeca alem dos recursos da empresa. Eu estou atualmente trabalhando num projeto com java e está indo
muito bem, o projeto na versao anterior foi feito em C, e é muito confuso, como eu sempre digo "programando em
C, cada um faz a sua festa", em java se tornou mais simples e mais alto nivel, gracas as classes. Essa é a minha visao
e tem muita gente para defende-la, nao pude deixar esse comentario passar.

Concordo com o Melquior, e tem mais estas linguagens que o tal "Guru" sitou (Pearl, Cgi, Php) são apenas scripts
interpretados embutidos no HTML, o que os torna lentos e dependentes de plataforma ou browser. Quanto a
velocidade do Java já existem compiladores nativos que transformam os byte codes em binarios nativos, o que
elemina o problema de desempenho (apesar disso ser uma abuso a filosofia do Java). Graças ao estrutura montada
pela Sun, o Java é mais que uma linguagem de programação, ele pode se adaptar a qualquer plataforma deste um
palm pilot ou uma maquina de refrigerantes até um computador de grande porte, basta existir uma VM para Java e
pronto seu codigo roda sem precisar nem mesmo ser compilado.

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 34 de 87

Em resposta a: APPLET java chama ASP ? enviado por JOAO LUIS MOREIRA em 26 de Novembro de 1999 às
17:37:41:
Utilize o método showDocument passando como parâmentro um objeto do tipo URL.
Exemplo:
URL u = new URL("http:////PaginaAsp?P1=XXX")
context.showDocument(u);

Enviando E-mails através de páginas WEB


Como enviar e-mails por páginas Web? O ASPMail é uma opção simples e fácil. Grande
parte dos servidores possuem tal objeto, que é uma dll que pode ser encontrada na
serverobjects, e tem como função o envio de e-mail. Abaixo segue um exemplo de como
pode ser utilizado o ASPMAIL.
Enviando E-mail
<FORM METHOD="post" ACTION="enviar_email.asp" name="">
Nome:
<INPUT TYPE="text" NAME="nome" SIZE="20">
E-mail:
< INPUT TYPE="text" NAME="email" SIZE="20">
Assunto:
< INPUT TYPE="text" NAME="assunto" SIZE="20">
Texto:
< TEXTAREA NAME="texto" cols="25" rows="10"></textarea>
< INPUT type="submit" name="Submit" value="Enviar" font face="Verdana,
Arial, Helvetica, sans-serif" size="2">
</FORM>
Abaixo segue a programação!
<%
Set Mailer = Server.CreateObject("SMTPsvg.Mailer") - Conexão com a dll do servidor
Mailer.RemoteHost = " " Local onde você colocará o smtp. Ex. "smtp.ricardo.com"

Mailer.FromName=request.form("nome") - Procura no form o nome colocado


Mailer.FromAddress = request.form("email") - Procura no form o e-mail colocado
Mailer.AddRecipient "Ricardo Tardelli","tardelli@aspbrasil.com.br" - O nome de
quem está enviando e o E-mail
Mailer.Subject=request.form("assunto") - Procura no form o assunto colocado

Mailer.Bodytext = request.form("texto") - Procura no form o texto colocado

x = Mailer.SendMail

if x = true then

MSG = "E-MAIL ENVIADO COM SUCESSO!"

Else

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 35 de 87
MSG = " O E-MAIL NÃO FOI ENVIADO COM SUCESSO!"

end if

Response.write MSG

Acima uma condição onde se o E-mail for enviado com sucesso ele mostrará a MSG!

R: A resposta para essa pergunta é complicada pois engloba vários fatores. Uma coisa é
certa, um servidor Unix rodando um Apache e CGI Perl é muito! mais rápido e eficiente,
porém limitado. O ASP é um pouco mais lento, mas te oferece a total integração com a
família MS Office e MS Visual Studio, além da API do Windows. Isso pode ser infinitamente
vantajoso dependendo do seu projeto... Resumindo, tenho duas dicas essenciais para se ter
um servidor rápido e eficiente. Quase todas as tecnologias da Microsoft ocupam muita
memória e meu primeiro aviso é que o servidor tenha muita memória! A segunda coisa
pode sair mais cara, mas também garante o desempenho: crie uma máquina só para servir
dados... e coloque muita memória nessa máquina também, pois o ODBC do NT adora
travar. Outra dica importante é que você verifique pessoalmente todos os scripts ASP que
estiverem no servidor. Lembre-se de atribuir "Nothing" para os Recordsets e utilize
abandon.session para apagar as variáveis "Session", quando se fizer necessário.
Como os programas ASP rodam?
R: Um programa simples feito em ASP é composto por páginas HTML estáticas, páginas ASP
dinâmicas, uma base de dados que pode ser um arquivo do Access (*.MDB) e um arquivo
de configurações chamado GLOBAL.ASA. Este último arquivo não precisa necessariamente
ser criado, a não ser que seu projeto seja complexo o suficiente para fazer tratamento de
eventos globais do programa. Por hora, não esquente com esse arquivo. Importante é saber
que ASP é uma linguagem Script, ou seja, uma linguagem parecida com Basic e Fortram.
Justamente pelo método utilizado pelo Servidor para interpretar o programa. O Servidor na
verdade "decora" as linhas a as fica repetindo até montar uma página HTML na sequência
que você instruiu. Resumindo, ASP é uma linguagem de programação sequencial. A
vantagem é que você pode reaproveitar muito o código das páginas. Por exemplo, você não
precisa necessariamente criar duas páginas, a primeira sendo um formulário e a segunda a
página ASP. Você pode fazer um formulário ASP que ao carregar pela primeira vez, tenha
um comando de desvio que não execute comando nenhum. Quando o Submit do formulário
for acionado ele chamará a si próprio e lerá o código ASP "escondido" por uma rota de
desvio (um if, por exemplo).
ASP roda no UNIX?
R: Sim. ASP pode rodar perfeitamente num servidor UNIX rodando o Apache. Só é um
pouco mais complicado de configurar. A própria Microsoft tem alguma documentação sobre
o assunto. Acessando o site de suporte da Microsoft, pesquisei por "Apache". Veja o que
achei neste endereço:
http://search.support.microsoft.com/
searchbin/kb/search.idq?OL=1&D=Support&A
=T&T=B&SG=&S=F&SD=SO&T1=&FR=
0&DU=C&Sz=apache&O=apache
Veja dois links (em inglês também) de empresas que apresentam soluções para rodar ASP
em plataforma Unix:
iASP - Instatnt ASP

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 36 de 87
Tratamento de Erros sem complicação - 18/08/99 Este Script mostra de uma maneira
muito simples como fazer o Tratamento de Erros ao acessar o banco de dados

<%
On Error Resume Next
varErro = 0
Conexao.Open "blá blá..."
SQLStr = "SELECT * FROM MinhaTabela"
Set RS = Conexao.Execute(SQLStr)
If RS.EOF Or RS.BOF Then
varErro=1
Else
'coloque os comandos aqui.
End If
%>
<html><head>
<TITLE>dbsimple.asp</TITLE>
</head>
<body bgcolor="#FFFFFF">
<%If varErro = 1 Then%>
<p><h1>ERRO!</h1></p>
<%Else%>
<p>Coloque aqui a página de Resposta se correr tudo bem.</p>
<%End If%>
</body></html>

Só tem um detalhe. Aquela condição "If RS.EOF Or RS.BOF Then" é utilizada qndo sua SQL string é um SELECT,
que retorna dados. Quando vc está utilizando o DELETE ou UPDATE, vc deve substituir essa condição por: "If
Err.Num > 0 Then", ok.?

Mais funções para facilitar o depuramento de Erros - 20/08/99 Aqui um exemplo do


uso de duas rotinas básicas para tratamento de erros ao conectar no Banco de Dados.
Renato

DEFAULT.ASP
-------------------------------------------------------
<TITLE>Apurando Erros</TITLE>
<body bgcolor="#FFFFFF">
<!--#include file="lib_errors.asp"-->
<%
on error resume next
attempt="criando um objeto de conexão"
set conntemp=server.createobject("adodb.connection")
Call ErrorVBScriptReport(attempt)

attempt="abrindo conexao"
conntemp.open "DSN=Student;uid=student;pwd=magic"
Call ErrorVBScriptReport(attempt)
Call ErrorADOReport(attempt,conntemp)

attempt="select * from authors where AU_ID<16"


set rstemp=conntemp.execute(attempt)
Call ErrorVBScriptReport(attempt)

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 37 de 87
Call ErrorADOReport(attempt,conntemp)
If rstemp.eof then
response.write "Nenhum registro encontrado." & "<P>"
response.write attempt
response.end
end if

attempt="contando registros do recordset"


howmanyfields=rstemp.fields.count -1
Call ErrorVBScriptReport(attempt)
Call ErrorADOReport(attempt,conntemp)
%>
<table border=1>
<tr>
<% 'Pega os Títulos da Tabela
for i=0 to howmanyfields %>
<td><b><%=rstemp(i).name %></B></TD>
<% next %>
</tr>

<% ' Pegando todos os registros


do while not rstemp.eof %>
<tr>
<% for i = 0 to howmanyfields%>
<td valign=top><%=rstemp.fields(i)%></td>
<% next %>
</tr>
<%
rstemp.movenext
loop
rstemp.close
set rstemp=nothing
conntemp.close
set conntemp=nothing
%>
</table>
</BODY>
</HTML>
-------------------------------------------------------
-------------------------------------------------------
LIB_ERRORS.INC
-------------------------------------------------------
<%
SUB ErrorVBScriptReport(parm_msg)
If err.number=0 then
exit sub
end if
pad="&nbsp;&nbsp;&nbsp;&nbsp;"
response.write "<b>VBScript Errors Occured!<br>"
response.write parm_msg & "</b><br>"
response.write pad & "Error Number= #<b>" & err.number & "</b><br>"
response.write pad & "Error Desc.= <b>" & err.description & "</b><br>"
response.write pad & "Help Context= <b>" & err.HelpContext & "</b><br>"
response.write pad & "Help File Path=<b>" & err.helpfile & "</b><br>"
response.write pad & "Error Source= <b>" & err.source & "</b><br><hr>"

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 38 de 87
END SUB

SUB ErrorADOReport(parm_msg,parm_conn)
HowManyErrs=parm_conn.errors.count
IF HowManyErrs=0 then
exit sub
END IF
pad="&nbsp;&nbsp;&nbsp;&nbsp;"
response.write "<b>ADO Reports these Database Error(s) executing:<br>"
response.write SQLstmt & "</b><br>"
for counter= 0 to HowManyErrs-1
errornum=parm_conn.errors(counter).number
errordesc=parm_conn.errors(counter).description
response.write pad & "Error#=<b>" & errornum & "</b><br>"
response.write pad & "Error description=<b>"
response.write errordesc & "</b><p>"
next
END SUB
%>

Apresentando uma ListBox - 23/07/99 Este script mostra como fazer um formulário
contendo uma listbox "alimentada" automaticamente. E também mostra a página de
resposta para este formulário, apresentando a opção escolhida na listbox.
Renato

<html><head>
<TITLE>dblist.asp</TITLE>
</head><body bgcolor="#FFFFFF">
<%
myDSN="DSN=Student;uid=student;pwd=magic"
mySQL="select author from authors where AU_ID<100"

' Este ASP apresenta um campo do


' Banco de Dados em forma de listbox.
set conntemp=server.createobject("adodb.connection")
conntemp.open myDSN
set rstemp=conntemp.execute(mySQL)
' Verificando se a Query está vazia
if rstemp.eof then
response.write "Nenhum dado encontrado pela instrução:<br>"
response.write mySQL
conntemp.close
set conntemp=nothing
response.end
end if

%>
<form action="dblistrespond.asp" method="post">
<Select name="authorname">
<%
' Imprimindo os dados dentro da listbox
do until rstemp.eof %>
<option> <%=RStemp(0)%> </option>

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 39 de 87
<%
rstemp.movenext
loop

' Fechando e liberando os recursos


rstemp.close
set rstemp=nothing
conntemp.close
set conntemp=nothing
%>
<input type="submit" value="Choose Author">
</Select></form>
</body></html>

Os dois modos de acessar o banco de dados (DSN e DBQ) - 18/08/99 Aprenda a


diferença entre DSN (conexão usando o Painel de Controle do Windows) e DBQ (Conexão
via linha de código).

Qualquer script ASP que precisa conectar em um database, deve primeiramente abrí-lo no servidor.
Para isso existem duas formas:
- uma conexão via DSN
- uma conexão via DBQ, ou seja, sem DSN

Uma conexão via DSN requer que o Administrador do banco ou da rede, configure um DSN no servidor
Internet/Intranet usando o Painel de Controle (ODBC 32 bits).
Conexões via DSN geralmente requerem um nome de DSN, um usuário e uma senha.

Exemplo:
<%
set conntemp=server.createobject("adodb.connection")
conntemp.open "estudante","estudante","magic"
set rstemp=conntemp.execute("select * from autor")
%>

Abaixo está uma maneira de abrir um Data Source sem um DSN.


Note que você deve conhecer o path completo do arquivo no servidor, isto é, msapgt.mdb não é suficiente.
É preciso ter "Z:\users\pagamento\msapgt.mdb".
Existe uma função no ASP chamada server.mappath que pega um nome de arquivo e retorna o path completo do
arquivo no servidor.

Exemplo:
<%
set conntemp=server.createobject("adodb.connection")
cnpath="DBQ=" & server.mappath("sua_tabela.mdb")
conntemp.Open "DRIVER={Microsoft Access Driver (*.mdb)}; " & cnpath
set rstemp=conntemp.execute("select * from autor")
%>

Observação:
Para Access --> driver = {Microsoft Access Driver (*.mdb)};
Para SQL -----> driver = SQL Server;

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 40 de 87
Somando Campos de uma Tabela via SQL - 26/08/99 Crie um MDB (Access), uma
tabela chamada "Tabela1" e dois campos: "ID" e "Preco". Encha vários valores em vários
ID's, simulando cadastros.... e faça o seguinte script pra somar todos:
Renato

<% @ LANGUAGE="VBScript" %>


<%
varErro = 0

ConnString = "DBQ=c:\inetpub\wwwroot\teste\bd.mdb"
ConnString = ConnString & ";Driver={Microsoft Access Driver (*.mdb)}"

Set Connexao = Server.CreateObject("ADODB.Connection")


Connexao.Open ConnString
If Err.Number > 0 Then
varErro = 1
Else
SQLString = "SELECT Sum(Tabela1.Preco) AS Preco FROM Tabela1"
Set RS = Connexao.Execute(SQLString)
If RS.EOF Then
varErro = 1
End If
End If
%>
<HTML>
<HEAD>
<TITLE>Untitled</TITLE>
</HEAD>

<BODY>
<%If varErro = 1 Then%>
ERRO!
<%Else%>
OK!
<p>Total dos Preços = <%=RS("Preco")%>
<%End If%>
</BODY>
</HTML>
<%
RS.Close
Connexao.Close
Set RS = Nothing
Set Connexao = Nothing
%>

NOTA: Veja que o comando SUM precisa de "algumas frescuras" prá funcionar legal.... :( Eu mesmo fiz vários
testes até chegar neste resultado:

SELECT Sum([Tabela].[Campo]) AS [Alias] FROM [Tabela]

checkBissexto - 18/08/99 Retorna true se um determinado ano é bissexto. (Útil para


aplicações de calendário)
João

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 41 de 87
<%
dim auxAno, dialogo
ano = 2000
function bisexto(ano)
if ano mod 4 = 0 then
if ano mod 100 = 0 then
if ano mod 400 = 0 then
bisexto = true
exit function
end if
bisexto = false
exit function
end if
bisexto = true
exit function
else
bisexto = false
exit function
end if
end function

if bisexto(auxAno) then 'SE O ANO É BISSEXTO


dialogo = "é bissexto."
else
dialogo = "não é bissexto."
end if
%>
<html><head>
<TITLE>CHECK BISSEXTO</TITLE>
</head>
<body bgcolor="#FFFFFF">
O ano <%= auxAno %> <%=dialogo%>
</body>
</html>

Função para Formatar um TextBox de um Formulário - 19/08/99 Quando vc


disponibiliza um TextBox para o usuário preencher, vc recebe de volta uma porção de texto
com Enter's. Vc precisa converter estes Enter's para a linguagem HTML (ou seja, <br>) ao
apresentar o TextBox

<%
Private Function ConverteTexto(varTexto)
Dim y, x, z, limite
limite = Len(Trim(varTexto))
y = ""
for x = 1 to limite
z = Mid(varTexto, x, 1)
if z = CHR(10) Then
z = "<br>"
end if
y=y&z
next
ConverteTexto = y
End Function

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 42 de 87
%>
<HTML>
<HEAD>
<TITLE>Convertendo TextBox</TITLE>
</HEAD>

<BODY>
<%=ConverteTexto(Request.Form("Texto"))%>
</BODY>
</HTML>

Esta Subrotina exemplifica como abrir um arquivo texto, escrever dados nele e fechá-lo.

Sub CreateFile()
Dim fso, tf
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set tf = fso.CreateTextFile("c:\testfile.txt", True)
' Escreve uma linha no arquivo
tf.WriteLine("Testando 1, 2, 3.")
' Escreve 3 linhas em branco
tf.WriteBlankLines(3)
' Escreve uma linha sem quebrá-la
tf.Write ("Este é um teste.")
tf.Close
End Sub

Trabalhando com diretórios - 30/07/99 Esta Subrotina exemplifica como trabalhar com
diretórios, obtendo informações, criando novos e apagando-os.
Renato

Sub ShowFolderInfo()
Dim fso, fldr, s
' Criando uma instância do FSO
Set fso = CreateObject("Scripting.FileSystemObject")
' Pegando o objeto Drive
Set fldr = fso.GetFolder("c:")
' Imprime o nome do diretório raiz
Response.Write "Nome do diretório: " & fldr & "<br>"
' Imprime o nome do drive
Response.Write "Contido no drive: " & fldr.Drive & "<br>"
' Imprime se é ou não o diretório Root
If fldr.IsRootFolder = True Then
Response.Write "Este é o diretório Raiz." & ""<br>"<br>"
Else
Response.Write "Este diretório não é o diretório raiz." & "<br><br>"
End If
' Cria um novo diretório.
fso.CreateFolder ("C:\Teste")
Response.Write "Diretório criado C:\Teste" & "<br>"
' Imprime o nome de base do diretório.
Response.Write "Basename = " & fso.GetBaseName("c:\bogus") & "<br>"
' Apaga o diretório criado
fso.DeleteFolder ("C:\Teste")

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 43 de 87
Response.Write "Diretório deletado C:\Teste" & "<br>"
End Sub

Usando o objeto Drive do FileSystemObject - 30/07/99 A Subrotina abaixo


exemplifica como obter informações de um drive conectado ao servidor, utilizando o objeto
Drive do FSO

Sub ShowDriveInfo(drvPath) Dim fso, drv, s


Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set drv = fso.GetDrive(fso.GetDriveName(drvPath))
s = "Drive " & UCase(drvPath) & " - "
s = s & drv.VolumeName & "<br>"
s = s & "Total Space: " & FormatNumber(drv.TotalSize / 1024, 0)
s = s & " Kb" & "<br>"
s = s & "Free Space: " & FormatNumber(drv.FreeSpace / 1024, 0)
s = s & " Kb" & "<br>" Response.Write s
End Sub

Contador de Acessos com FSO - 06/08/99 Um contador que usa o File System Object
para acessar um arquivo de texto e incrementar o valor cada vez que a página é requisitada

<%
'-------------------------------------
'Marcelo Ricardo - mricardor@yahoo.com
'favor manter este cabçalho
'------------------------------------
dim Contador, tamanho, arquivo, valor, Hits
arquivo = Server.MapPath("contador.cnt")
set FsObject = Server.CreateObject("Scripting.FileSystemObject")
if FsObject.FileExists(arquivo) then
set Contador = FsObject.GetFile(arquivo)
set txtStream = Contador.OpenAsTextStream(1,0)
Hits = txtStream.Readall
Hits = Hits + 1
set txtStream = nothing
else
FsObject.CreateTextFile(arquivo)
set Contador = FsObject.GetFile(arquivo)
Hits = 0
end if
set txtStream = Contador.OpenAsTextStream(2,-2)
txtStream.Write Hits
set txtStream = nothing
Response.Write hits
%>

Gerando um Memorando Utilizando FSO - 19/08/99 Aprenda como criar um


memorando a partir de dados inseridos em um formulário HTML.
Renato

Para exemplificar isso, criei um Form HTML assim:

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 44 de 87
--------------------------------------------------------------
- default.asp ou index.html
--------------------------------------------------------------
<%
' Programa simples, exemplo de como utilizar
' FSO para escrever um Memorando para seu chefe
' e gravá-lo como HTML.
%>
<HTML>
<HEAD>
<TITLE>Formulário</TITLE>
</HEAD>

<BODY bgcolor="#FFFFFF">
<p><b><font face="Verdana, Arial, Helvetica, sans-serif" size="4">Formulário
Gerador de Memorando</font></b></p>
<form action="memo.asp" method="POST">
<p><b><font face="Verdana, Arial, Helvetica, sans-serif" size="2">De:</font></b>
<input type="Text" name="de" size="60" maxlength="255" tabindex="0">
<br>
<b><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Para:</font></b>
<input type="Text" name="para" size="60" maxlength="255" tabindex="1"></p>
<p><b><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Texto:</font></b><br>
'
'COMANDO SECCIONADO POIS DEU PROBLEMA NO CADASTRO DO SCRIPT !!!
'
< t e x t a r e a name="texto" cols="80" rows="10" wrap="PHYSICAL" > < / t e x t a r e a >
'
' CORTE FORA ESSES COMENTÁRIOS AO COPIAR O TEXTO...
'
</p>
<p><input type="Submit" name="Gerar" value="Gerar !" tabindex="3">
<input type="Reset" name="Limpar" value="Limpar !" tabindex="4">
</p>
</form>
</BODY>
</HTML>
--------------------------------------------------------------
Aí criei uma página chamada MEMO.ASP, gravando os dados digitados no formulário em um arquivo chamado
MEMORANDO.HTM. Mas para apresentar os dados do formulário de forma decente, utilizei uma função de
conversão chamada ConverteTexto para filtrar e converter os Enter's digitados pelo usuário no texto do memorando.
E também precisei escrever no MEMORANDO.HTM as TAGS necessárias para formatar o conteúdo do HTML e
apresentá-lo com fontes e enfeites decentes. Saiu mais ou menos assim:
--------------------------------------------------------------
- memo.asp
--------------------------------------------------------------
--------------------------------------------------------------
<%
Private Function ConverteTexto(varTexto)
Dim y, x, z, limite
limite = Len(Trim(varTexto))
y = ""
for x = 1 to limite
z = Mid(varTexto, x, 1)
if z = CHR(10) Then

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 45 de 87
z = "<br>"
end if
y=y&z
next
ConverteTexto = y
End Function
%>
<%
Dim fso, f1

varDe = Request.Form("de")
varPara = Request.Form("para")
varTexto = Request.Form("texto")

Set fso = CreateObject("Scripting.FileSystemObject")


Set f1 = fso.CreateTextFile("c:\memorando.htm", True)

f1.Write("<HTML>")
f1.Write("<HEAD>")
f1.Write("<TITLE>Memorando</TITLE>")
f1.WriteLine("</HEAD><BODY>")

f1.WriteBlankLines(1)

f1.Write("<font face=Verdana size=4><b>")


f1.Write("Memorando Criado a Partir do Formulário")
f1.WriteLine("</b></font>")

f1.Write("<p><font face=Verdana size=2><b>")


f1.Write("De:</b> " & varDe)
f1.Write("<br><b>")
f1.Write("Para:</b> " & varPara)
f1.WriteLine("</font></p>")

f1.WriteBlankLines(1)

f1.WriteLine("<p><font face=Verdana size=2><b>Mensagem:</b><br>")


f1.WriteLine(ConverteTexto(varTexto))
f1.WriteLine("</font></p>")

f1.WriteBlankLines(1)

f1.WriteLine("</BODY></HTML>")
f1.Close

Set f1 = Nothing
Set fso = Nothing
%>
<HTML>
<HEAD>
<TITLE>Resposta do Formulário</TITLE>
</HEAD>

<BODY>
<p><b><font face="Verdana, Arial, Helvetica, sans-serif" size="4">Formulário

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 46 de 87
Gerador de Memorando</font></b></p>
<p><b><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Relatório Criado!</font></b></p>
</BODY>
</HTML>
--------------------------------------------------------------

If I was charged a nickel for every time I wrote:


Dim objConn, objRS

Set objConn = Server.CreateObject("ADODB.Connection")

objConn.ConnectionString = ...

objConn.Open

Set objRS = objConn.Execute("...")


And was given a nickel for every time I wrote:
objRS.Close

Set objRS = Nothing

objConn.Close

Set objConn = Nothing


I would be loosing money... a lot of money! :) In fact, I think the vast majority of ASP developers would be in the
hole. While ASP should automatically close and free up all object instantiations, it is always a good idea to
explicitly close and free up object references yourself. Another good reason to do this, is because when using
connection pooling, you want to close and free your ADO objects as soon as possible, and if you do it explicitly
once you're done with the ADO object, it dumps the connection back into the pool sooner than if you wait until the
page terminates and let the terminating page implicitly close and free the ADO object.
So, take my advice: if you ever do a Set someVar = ..., be sure you follow it up with a Set someVar =
Nothing once you are through using someVar!
Read a related article...

Explicitly Freeing your ADO Objects


One of life's few truisms is that programmers are inherently lazy. This fact gets us into trouble more often than not,
and can get us into extremely hot water when dealing with database connectivity with ASP.
In ASP, we create connections to databases and capture the results of database queries using ADO; we use
ADODB.Connection and ADODB.Recordset, most frequently. Let's look at a quick example of how we might use
these two:
Dim objConn

Set objConn = Server.CreateObject("ADODB.Connection")

objConn.ConnectionString = "DSN=Northwind"

objConn.Open

Dim objRS

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 47 de 87
Set objRS = Server.CreateObject("ADODB.Recordset")

objRS.Open "SELECT * FROM Table1", objConn


(If you're unfamiliar with database-connectivity, be sure to read this article.)
We'd then go along our merry way, iterating through objRS. Once we're done using objRS, what do we do? Most
often, developers do nothing, they let ASP "clean up." When the Server.CreateObject calls are made, resources are
allocated on the server to handle new instances of these objects. If we don't explicitly inform the server that we're
done with these allocated resources, ASP should do it for us. Putting all of our faith into ASP is a bit of a risk. It's
much safer and much more reliable to explicitly close and clean up the instances of our recordset and connection
objects.
So, how do we explictly close our objects and free the memory associated with them? All we need to do is invoke
these following four lines when we're finished utilizing our two objects:
objRS.Close

Set objRS = Nothing

objConn.Close

Set objConn = Nothing


This will force the cleanup, rather than relying on the automated, implicit cleanup. Now, you may be wondering how
important it is to do this. Who wants to have to write four extra lines of code for each ASP page that utilizes
database connectivity? Well, the advantages to doing it far outweigh the disadvantages of having to do it. To make
my point, let me quote Charles Carroll, webmaster of ActiveServerPages.com:
"You must close recordset, set to nothing, close connections and set to nothing in that
sequence. The standard garbage collection is incomplete and unreliable. [By garbage
collection, Charles is referring to the implicit cleanup of allocated resources on the
server.]
"DataReturn[, an ASP webhosting company,] has many sites that fail horribly if they let
IIS do automatic garbage collection. Adding Close/Set Nothing makes the sites work like
champs again. It is mandatory in any high volume site."
If Charles's words didn't convince you, let me discuss a real world problem that was caused by a lack of explicit
memory reallocation calls. Brian Fairchild runs a high-volume ASP site that uses Access as the database backend.
He noted after a while, ASP pages would simply stop responding! HTML pages would display fine, but all ASP
pages would simply not process; a reboot of the server was needed. Eventually, Brian found out that by explicitly
closing and freeing all of his recordset and connection objects, the problems stopped. ( Read Brian's posts to the
messageboard regarding this issue.)
Another tip from Charles Carroll for those using Access is to increase the default number of threads. Here's what
Charles had to say:
"The default threads of 4 in the registry bites for Access. Increasing it to 20 will do
wonders for all aspects of the server, but specifically Access. Our server was 100% CPU
solid from 8-5pm but this simple change made it calm down so I have tested this tweak."
To learn more about increasing the threads, be sure to visit:
http://www.aspmagazine.com/aspmagazine/issue10kb.asp
Well, lazy coders out there, I hope this article has convinced you to spend the extra few seconds to explicitly close
your ADO objects. I have trouble myself, taking the few moments and writing those needed lines!

If you are hitting a database to populate a table or select box, you can use a method available with ADO 2.0,
GetString. Using this method increases the efficiency of your ASP script! I won't go into it here, since there
is already a good article on using GetString here on 4Guys.

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 48 de 87

Speeding up ASP by Using GetString


* This article describes how to speed up your ASP scripts by using GetString as opposed to multiple
Response.Write's
Most every ASP developer has had the experience of needing to display a certain database query in an HTML table.
Chances are we've implemented it this way:
<%
'Create connection / recordset

'Populate data into recordset object


%>

<TABLE>
<% Do While not rs.EOF %>
<TR>
<TD><%=rs("Field1")%></TD>
<TD><%=rs("Field2")%></TD>
...
</TR>
<% rs.MoveNext
Loop %>
</TABLE>
For large queries, this can slow down your ASP script processing time, since many Response.Write commands must
be processed by the server. It would be much quicker if you could have the entire string (from <TABLE> to
</TABLE> created then outputted using Response.Write just once. Well, the fine people at Microsoft have made this
possible. (Note, this is an ADO 2.0 feature. This will not work if you are still using ADO 1.5. You can obtain ADO
2.0 freely at http://www.microsoft.com/data/download.htm.)
The GetString method allows us to display our string with only one Response.Write; it elminates the DO ... LOOP
and our conditional which tests if the recordset is at EOF.
Here is the syntax (all parameters are optional):
String = recordset.GetString(StringFormat, NumRows, ColumnDelimiter,
RowDelimiter, NullExpr)
To populate a table with the results from a recordset, we only need to worry about three of the four parameters
above: ColumnDelimiter (what HTML we separate each column in the recordset with), RowDelimiter (what HTML
we separate each row in the recordset with), and NullExpr (what HTML we use if the column we're currently on is
NULL).
As you can see from the table-populating ASP example above, each column is delimited by a <TD>...</TD>, and
each row is delimited by a <TR>...</TR>. That being said, let's look at some code.
<%@ LANGUAGE="VBSCRIPT" %>
<% Option Explicit 'Good coding technique
'Establish connection to DB
Dim conn
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "DSN=Northwind;"

'Create a recordset
Dim rs
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "SELECT * FROM table1", conn

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 49 de 87
'Store our one big string
Dim strTable
strTable = rs.GetString(,,"</td><td>","</td></tr><tr><td>","&nbsp;") %>
<HTML>
<BODY>
<TABLE>
<TR><TD>
<% Response.Write(strTable) %>
</TR></TD>
</TABLE>
</BODY>
</HTML>
<%
'Cleanup!
rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing
%>
The string strTable will contain a lengthy string of all our columns and rows returned by our SQL statement
"SELECT * FROM table1". Between each row the HTML </td><td> will appear, and between each row, the HTML
</td></tr><tr><td> will appear. This will produce the exact HTML we need with only one Response.Write. Let's
quickly look at an example. Imagine that our query returned the following rows and columns:
Col1 Col2 Col3
Row1 Bob Smith 40
Row1 Ed Frank 43
Row1 Sue Void 42
The resulting string from our GetString statement would be:
Bob</td><td>Smith</td><td>40</td><td></td></tr><tr><td>Ed ...
and so on. Granted, this string is not pretty, but it gets the job done. (Note that we put the <TABLE><TR><TD> at
the beginning and the </TD></TR></TABLE> at the end of the raw HTML. This is because our formatted string
lacks these beginning and ending strings.)
To see an example of using GetString to populate a SELECT box, check out Charles Carroll's article:
http://www.learnasp.com/learn/dbgetstring.asp.
If you have any questions or comments, please response to this email. I'd also like to invite you to use the ASP
Message board available at http://www.ASPMessageboard.com. Have a great day!
Happy Programming!
*****************************************************************

Please forward this information to a friend, including the subscription URL! Happy Programming!
Related Articles
Optimizing your ASP Code

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 50 de 87
Speeding up your ASP Scripts
Using ADO 2.0's GetString to Speed up your ASP Scripts
How to Use Connection Pooling to Speed up your Queries

Optimizing ASP Performance


* This article discusses programming techniques for developing optimized Active Server Pages applications.
Last article I discussed connection pooling, and how it can be used to increase the efficiency with which your ASP
applications connect to the databases you are using. And if you'll recall, a few articles ago I wrote about optimizing
your ASP code for maintainability and reliability. This article I intend on discussing techniques which you can easily
employ to optimize your ASP code's performance.
The first step to not only increasing your ASP performance, but to also making your ASP more user friendly, is to
abandon the use of ALL Session variables (unless they are absolutely needed). Session variables are maintained by
cookies on the client side; so if the web surfer has cookies turned off in his browser, the Session variables won't
work! Also, Session variables have a lengthy lifetime. An instance of each session variable is instantiated when a
new user hits the webserver. From the time this user makes his last request, there is still a good 20 minutes until the
Session variable instance is deleted. (The length can be set by the Session.Timeout property or through the registry.)
So, if you are storing large numbers of complex objects in your Session variables, then you are asking for decreased
performance. Some things, you may argue, MUST be put in the Session. If this is the case, at least try your hardest
NOT to put large and complex objects in the Session, such as large, dynamic arrays, ADO Objects, or instances of
business objects.
Another useful tip to increase your database performance is to use stored procedures as opposed to dynamically
created queries on the ASP level. As I mentioned in a previoous article, the desired Web Application architecture
consists of three tiers. The top tier is your ASP code, the middle tier are your business objects, and your bottom tier
is the SQL Server backend. The desired approach consists of ASP calling business object methods, which in turn call
stored procedures in the SQL database. This, as I explained earlier, is desired because maintenance is extraordinarily
easier when you add levels of abstraction. Another plus to using SQL stored procedures is that once the procedure is
executed once, an execution plan is cached in SQL's memory, and subsequent runs execute quicker.
Let's say you are writing a page which does nothing but inputs a row into your Employee table. It receives
information from another page based on a form. Let's look at some code:
<%

'Establish connection

Dim Name, Salary, strSQL

Name = Request("txtName")

Salary = Request("Salary")

strSQL = "INSERT Employee (Name,Salary) VALUES('" & _

Name & "'," & Salary & ")"

Conn.Execute(strSQL)

Response.Redirect("SomePage.htm")

%>
We can use stored procedures instead to optimize this code. To create a stored procedure, you just need to go into
SQL Server, expand the database you want to create a stored procedure. You'll see a "Stored Procedures" folder.
Right click on it, and select "New Stored Procedure." Now, just type in your query and hit save!
Here is what the procedure will look like:
CREATE PROCEDURE sp_InsertEmployee (@Name varchar(100), @Salary money)

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 51 de 87
AS

INSERT Employee (Name,Salary)


VALUES(@Name,@Salary)

GO
In your ASP, you can call the procedure in two ways. The first way is to do something like:
<%

'Make connection to database

Conn.Execute("sp_InsertEmployee '" & Request("Name") & _

"'," & Request("Salary"))

...

%>
The other way is to use the Parameters collection inherent in ADO. I will save this dicussion for a future WebDaily
article.
Happy Programming!
*****************************************************************
To subscribe to WebDaily, point your browser to:
http://www.4GuysFromRolla.com/webtech/webdaily
*****************************************************************
Connection Pooling
* This article describes how to utilize connection pooling in your ASP application.
If your ASP applications interact with databases at all (and I am sure they do, else why use Active Server Pages?),
then you can experience a great increase in database performance if you are utilizing connection pooling. The time
and resources needed to create a connection to a database are not trivial. If for every page where you create a
connection instance, a new connection must be created, and then deleted once the page is finished executing, your
users will notice the performance lost if there are many people hitting your server simultaneously.
Connection pooling keeps the connection instances around after a particular page is through using it. For example,
say that you have an ASP file that creates a connection to a SQL database, retrieves some data, and displays it on the
web page. Without connection pooling enabled, here are the sequence of steps that ASP performs:
Create a connection to the database Send the query to the database Get back the resultset
Display the resultset Destroy the connection
Each user who hits this page will have to go through each of these steps. With connection pooling, however, the
steps involved look more like this:
See if an unused connection exists in our "pool" of connections If so, use it, else create a
new connection Send the query to the database Get back the resultset Display the
resultset Return the connection to the "pool"
It is much less costly to reuse a connection than to have to create a brand new one each and every time a page needs
to establish a connection to a database.
Now, let's look at how we can make sure our ASP applications use connection pooling. There are two steps which
you need to take to utilize connection pooling: one, you must make sure your ASP registry settings have connection
pooling enabled; two, you must have SQL server set up to use TCP/IP Sockets.
First, to edit the registry so that our ASP programs use connection pooling you will need to run the REGEDIT
program and alter the following registry entry:

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 52 de 87
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC\ASP\Parameter
s
(If this value is not set, go ahead and insert this key into your registry)
Find the StartConnectionPool entry and change the value from 0 (zero) to 1 (one). Once this change has been made,
ADO and ASP will utilize connection pooling.
The final step is to set SQL server to use TCP/IP Sockets. To set your SQL Server to use TCP/IP Sockets, you need
to go into SQL Server and select the SQL Server Client Configuration Utility (via Start / Programs / Microsoft SQL
Server / SQL Server Client Configuration Utility). Once the utility opens, click on the Net Library tab. Under the
Default Network setting, choose TCP/IP Sockets. That's all there is to it! (Note: Connection Pooling will not work
with Access as the backend. If there is a workaround that someone knows, please email me with the solution.
Thanks!)
Happy Programming!

- ----------

Now, you might be wondering, what does he mean, Don't skimp on the variables? Well, often times it is more
efficient to use variables to store results from ADO queries or from objects, and then reference the variable as
opposed to continuously referencing the object.
For example, you could do this:
If Request.QueryString("Name") = "Frank" Then

...

End If

If Request.QueryString("Name") = "Steve" Then

...

End If

Response.Write("Your name is " & Request.QueryString("Name"))


Each time you use the Request object, ASP has to go read the QueryString variable name. You can reduce this to
having to just read this once by doing the following:
Dim strName

strName = Request.QueryString("Name")

If strName = "Frank" Then

...

End If

If strName = "Steve" Then

...

End If

Response.Write("Your name is " & strName)


Plus, I personally think the above scenario is easier to read. It's easier, I think, to mentally associate strName to be
the user's name as opposed to associating Request.QueryString("Name") as the user's name. Just my two
cents, though!

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 53 de 87

As your ASP applications get more advanced and grow in size, little bugs start becoming very difficult to catch and
fix! It is important to grow your debugging skills while you grow your coding skills! Here are some tips that will
hopefully aid you in your debugging:
Use Response.Write's like there's no tomorrow! Don't be afraid to print out the contents
of your variables at different times during the execution of the script. This helps
tremendously! Also, think logically. Step through your code one line at a time, perhaps
writing down on a piece of paper the current states of your variables, for loops,
conditionals, etc.
Comment out code that you think might be causing an error. If you just comment out a
line at a time until the error or problem goes away, simple induction tells you that the
error last commented before the error disappeared was the error-causing line!
Simplify, man! If there is a ton of code, but you know the error or bug is within a small
subsection of the rest of the source, cut the rest of the code out of the page for the time
being just to clear everything up, removing the clutter. You can paste the non-offending
code back in once you have trapped the error.
Here is a related article, that may help!

I've found that many ASP developers don't like repetitive tasks, yet many developers do the following: on each page
using database connectivity, they write the follwoing code:
Dim objConn

Set objConn = Server.CreateObject("ADODB.Connection")

objConn.ConnectionString = Session("ConnectionString")

objConn.Open
Now why write all of this? First off, is a Session variable really needed here? No. Should we have to retype all of
this on each page we want to have database connectivity? No. A simpler solution is to use an include file, which
contains the above lines (and the connection string hard coded in).
Let's say we do this in a file named dbConn.asp, and put it in our /scripts directory. dbConn.asp might
look something like this:
<%

Dim objConn

Set objConn = Server.CreateObject("ADODB.Connection")

objConn.ConnectionString = "DSN=Blah"

objConn.Open

%>
Then, in every page we want to use database connectivity, we just need to add this one line:
<!--#include virtual="/scripts/dbConn.asp"-->

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 54 de 87
Isn't this way much easier? Whenever we need to refer to a database connection object (such as in the Open method
of the recordset object, we simply use objConn, the name of the connection object in dbConn.asp.
For more information on include files, read Using Includes. For more information on database connections, read
Database Connectivity. Happy Programming!

Enviando e-mails a partir de consultas a bancos de dados

Você tem um banco de dados online, com vários nomes cadastrados e gostaria de enviar e-
mails a todas essas pessoas? O ASPMail é uma opção simples e fácil. Grande parte dos
servidores possuem tal objeto, que é uma dll que pode ser encontrada na serverobjects, e
tem como função o envio de e-mail a partir de formulários (vide tutorial anterior) bem como
a partir de bases de dados.

Abaixo segue um exemplo:

Enviando E-mail

<FORM METHOD="post" ACTION="enviar_email.asp" name="">


<p>Digite a baixo o assunto e o texto da mensagem que será enviada a todos os
cadastrados.</p>
Assunto: <INPUT TYPE="text" NAME="assunto" SIZE="20">
Texto: <TEXTAREA NAME="texto" cols="25" rows="10"></textarea>
<INPUT type="submit" name="Submit" value="Enviar"><font face="Verdana,
Arial, Helvetica, sans-serif" size="2">
</FORM>

Abaixo segue a programação!

<%
ConnString="DBQ=e:\aspbrasil\teste.mdb;Driver={Microsoft Access Driver
(*.mdb)}"
sqlstmt = "select nome, email from cadastro"
Set Conn = Server.CreateObject("ADODB.Connection")
set rsquery = conn.execute(sqlstmt)

nr_emails_corretos = 0
nr_emails_errados = 0
nr_geral = 0

while not rsquery.eof

Set Mailer = Server.CreateObject("SMTPsvg.Mailer")


Mailer.RemoteHost = "smtp.testeaspbrasil.com.br"
Mailer.FromName = "TESTE - ASPBRASIL"
Mailer.FromAddress = "contato@aspbrasil.com.br"
Mailer.AddRecipient rsquery("nome"),rsquery("email")
Mailer.Subject=request.form("assunto")
Mailer.Bodytext = "Caro " & rsquery("nome") & "," & chr(13) &
request.form("texto")
x = Mailer.SendMail

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 55 de 87
if x = true then
MSG = "E-MAIL ENVIADO COM SUCESSO!"
nr_emails_corretos = nr_emails_corretos + 1
Else
MSG = " O E-MAIL NÃO FOI ENVIADO COM SUCESSO!"
nr_emails_errados = nr_emails_errados + 1
end if
nr_geral = nr_geral + 1
Response.write nr_geral & " - " & MSG
rsquery.movenext

wend

Response.write "Numero Total de Emails: " & nr_geral & "<br>"


Response.write "Numero de Emails enviados: " & nr_emails_corretos & "<br>"
Response.write "Numero de Emails não enviados: " & nr_emails_errados & "<br>"

rsquery.close
set rsquery = nothing
set conn = nothing
%>

Enviando E-mails através de páginas WEB

Como enviar e-mails por páginas Web? O ASPMail é uma opção simples e fácil. Grande
parte dos servidores possuem tal objeto, que é uma dll que pode ser encontrada na
serverobjects, e tem como função o envio de e-mail. Abaixo segue um exemplo de como
pode ser utilizado o ASPMAIL.
Enviando E-mail
<FORM METHOD="post" ACTION="enviar_email.asp" name="">
Nome:
<INPUT TYPE="text" NAME="nome" SIZE="20">
E-mail:
< INPUT TYPE="text" NAME="email" SIZE="20">
Assunto:
< INPUT TYPE="text" NAME="assunto" SIZE="20">
Texto:
< TEXTAREA NAME="texto" cols="25" rows="10"></textarea>
< INPUT type="submit" name="Submit" value="Enviar" font face="Verdana,
Arial, Helvetica, sans-serif" size="2">
</FORM>

Abaixo segue a programação!


<%
Set Mailer = Server.CreateObject("SMTPsvg.Mailer") - Conexão com a dll do servidor

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 56 de 87
Mailer.RemoteHost = " " Local onde você colocará o smtp. Ex. "smtp.ricardo.com"

Mailer.FromName=request.form("nome") - Procura no form o nome colocado


Mailer.FromAddress = request.form("email") - Procura no form o e-mail colocado
Mailer.AddRecipient "Ricardo Tardelli","tardelli@aspbrasil.com.br" - O nome de
quem está enviando e o E-mail
Mailer.Subject=request.form("assunto") - Procura no form o assunto colocado

Mailer.Bodytext = request.form("texto") - Procura no form o texto colocado

x = Mailer.SendMail

if x = true then

MSG = "E-MAIL ENVIADO COM SUCESSO!"

Else

MSG = " O E-MAIL NÃO FOI ENVIADO COM SUCESSO!"

end if

Response.write MSG

Acima uma condição onde se o E-mail for enviado com sucesso ele mostrará a MSG!

Banco de Dados, SQL e ODBC - parte VI

Além de Consultas, Inserções e exclusões, existe também sintaxe para alteração de dados
já existentes numa tabela, como segue:

sintaxe: "update tabela set campo1 = 'valor1', campo2 = 'valor2', campo3 =


'valor3' where campo4 = 'valor4' ..."

Veja os exemplos a seguir:

"update cadastro set nome='Fernando', email = 'dangelo@aspbrasil.com.br' where


nome = 'Rafael'" - atualiza os campos nome e email de todos os registros onde o nome é
Rafael. No caso, todos os registos cujo nome é Rafael terão o campo nome alterado para
Fernando, mesmo que o campo nome seja o campo utilizado na clausula where.

"update cadastro set nome= 'Fernando', email='dangelo@aspbrasil.com.br' " -


atualiza todos os registros do banco de dados para os valores Rafael no campo nome e
dangelo@aspbrasil.com.br no campo email.

Abaixo, Exemplo Prático com a string de alteração de dados:

Estrutura do Banco de Dados:


nome do banco de dados: teste.mdb

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 57 de 87
path do banco de dados: c:\teste
nome da conexao ODBC: TESTE_ODBC
tabela a ser consultada: agenda
campos da tabela agenda:codigo, nome, email, cidade, estado, idade

O campo codigo é chave primaria, ou seja, não existem 2 cadastros com o mesmo valor
neste campo.

<%

sqlstmt = "update agenda set nome='Fernando' where codigo = 25"

Set conn = server.createobject("adodb.connection") 'abre a conexão com o banco


de dados

conn.open "nome_da_ligacao_ODBC" 'avisa qual banco de dados será utilizado na


consulta

set rsquery = conn.execute(sqlstmt) 'executa a instrução SQL contida na variavel


sqlstmt

set rsquery = nothing

set conn = nothing

'Note que não é necessário fechar a rsquery. Isso ocorre devido à string de
alteração não ficar armazenada na memória , para futura consulta. Ela é
executada, e automaticamente, fechada. Isso também ocorre nas strings de
atualização e inserção.

%>

Acompanhe agora este outro exemplo:

Página para Alteração dos dados

<form method="post" action="deletar_registro.asp">

<p>Digite o código da pessoa que você deseja alterar o nome</p>

<input type="text" name="codigo" value="">

<p>Digite o novo valor do campo nome</p>

<input type="text" name="nome" value="">

<input type="submit" name="submit" value="Alterar">

</form>

Página de Exclusão dos Dados (deletar_registro.asp):

<%

codigo_local = request.form("codigo")

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 58 de 87
nome_local = request.form("nome")

sqlstmt = "update agenda set nome = '" & nome_local & "' where codigo =" &
codigo_local

set conn = server.createobject("adodb.connection")

conn.open "TESTE_ODBC"

set rsquery = conn.execute(sqlstmt)

response.redirect("alterado_com_sucesso.htm")

%>

Abaixo, página alterado_com_sucesso.htm

<html>

<body>

<p>Alterado com Sucesso</p>

</body>

</html>

Banco de Dados, SQL e ODBC - parte V

Além de Consultas e Inserções, Existe também sintaxe para deleção (exclusào) de dados
numa tabela, como segue:

sintaxe: "delete from tabela where campo1 = 'valor1' (and/or) campo2 = 'valor2'
(and/or) campo3 = valor3 ..."

Veja os exemplos a seguir:

"delete from cadastro where nome = 'Fernando'" - a sintaxe ao lado apaga todos os
registros cujo campo nome é fernando.

"delete from cadastro where nome = 'Fernando' and idade = 23 " - deleta todos os
registros cujo campo nome é fernando e o campo idade é 23.

"delete from cadastro" - deleta todos os registros da tabela cadastro.

Abaixo, Exemplo Prático com a string de deleção de dados:

Estrutura do Banco de Dados:


nome do banco de dados: teste.mdb
path do banco de dados: c:\teste
nome da conexao ODBC: TESTE_ODBC

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 59 de 87
tabela a ser consultada: agenda
campos da tabela agenda:codigo, nome, email, cidade, estado, idade

O campo codigo é chave primaria, ou seja, não existem 2 cadastros com o mesmo valor
neste campo.

<%

sqlstmt = "delete from agenda where nome='Fernando'"

Set conn = server.createobject("adodb.connection") 'abre a conexão com o banco


de dados

conn.open "nome_da_ligacao_ODBC" 'avisa qual banco de dados será utilizado na


consulta

set rsquery = conn.execute(sqlstmt) 'executa a instrução SQL contida na variavel


sqlstmt

set rsquery = nothing

set conn = nothing

'Note que não é necessário fechar a rsquery. Isso ocorre devido à string de
exclusão não ficar armazenada na memória , para futura consulta. Ela é
executada, e automaticamente, fechada. Isso também ocorre nas strings de
inserção e atualização.

%>

Acompanhe agora este outro exemplo:

Página para exclusão

<form method="post" action="deletar_registro.asp">

<p>Digite o código da pessoa que você deseja remover do cadastro</p>

<input type="text" name="codigo" value="">

<input type="submit" name="submit" value="Deletar">

</form>

Página de Exclusão dos Dados (deletar_registro.asp):

<%

codigo_local = request.form("codigo")

sqlstmt = "delete from agenda where codigo = '" & codigo_local & "'"

set conn = server.createobject("adodb.connection")

conn.open "TESTE_ODBC"

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 60 de 87
set rsquery = conn.execute(sqlstmt)

response.redirect("deletado_com_sucesso.htm")

%>

Abaixo, página deletado_com_sucesso.htm

<html>

<body>

<p>Deletado com Sucesso</p>

</body>

</html>

O que é o Jscript?

A Microsoft, como não poderia deixar de ser, sempre faz alguma coisa contra a maré dos
outros fabricantes. Ocorreu com a linguagem Java, C++, XML e agora destaco o que
ocorreu com a linguagem Java Script, originalmente criada por Brendan Eich em 1995
quando trabalhava para Sun Microsystems.

Java Script, uma linguagem executável pelo navegador Web, é capaz de oferecer maior
dinamismo aos sites. Ela facilitou, e muito, o trabalho dos servidores, que antes tinham que
executar as tarefas mais banais, como validar se um determinado campo de um formulário
estaria vazio ou não. Uma tarefa como essa, pode ser escrita em Java Script em pelo menos
3 linhas, rodando na máquina do usuário, consequentemente deixando a rede mais livre
para se navegar.

Foi inicialmente interpretada pelo Netscape Navigator 2.0, na época, o navegador mais
usado pelos internautas. Logo depois, a Microsoft percebeu o valor daquela tecnologia e
implementou a Versão 3.0 do seu Internet Explorer suportando tanto Java Script quanto
Java - Outra linguagem desenvolvida pela Sun com aplicação em redes.

Hoje, a Microsoft lidera o mercado de Navegadores Web graças ao seu revolucionário


Internet Explorer 4.0, mais rápido e pronto para executar as principais tecnologias
disponíveis no mercado. Como forma de aproveitar os novos recursos desse navegador a
Microsoft adicionou inúmeros recursos a linguagem Java Script, passando a chamá-la de
Jscript. Muitos dos recursos dessa linguagem não são interpretados por outros navegadores,
portanto, é uma solução proprietária a plataforma Microsoft.

Programando em ASP utilizando Jscript

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 61 de 87
Por ter a maior plataforma instalada do mundo, qualquer tecnologia criada pela Microsoft é
bem vinda. Com ASP não poderia ser diferente. É umas das soluções mais produtivas no
desenvolvimento de Aplicações Web do mercado. Desbanca o tradicional CGI tanto no
tempo de desenvolvimento quanto na velocidade de Execução; por rodar no servidor, é
compatível com todos os Navegadores do mercado; minimiza o tráfego na rede, entre
outras vantagens.

Uma grande característica dessa tecnologia é a possibilidade de ser escrita tanto em


VBscript quanto em Jscript, as duas principais linguagens Script da Microsoft.

Em algumas ocasiões, durante as minhas implementações, enfrentei diversos problemas


com a linguagem VBscript. Quando o problema perdurava por alguns dias sem solução,
implementava em Jscript, linguagem que tenho maior familiaridade. Hoje, sou um dos
poucos desenvolvedores a optar esta estratégia definitivamente. Isso é facilmente notado,
quando consultamos informações em sites especializados, entre eles o ASP BRASIL. A
grande maioria do conteúdo documentado utiliza a linguagem VBscript por ser mais fácil de
implementar.

JScript é tão funcional quanto VBscript. O incrementos criados pela Microsoft para aquela
linguagem são semelhantes as existentes em VBscript, tornando-a muito produtiva para
pessoas com bom conhecimento. A única desvantagem é sua menor legibilidade, pois se
assemelha bastante com a linguagem C++. Em contra partida a sua sintaxe é mais enxuta,
exigindo menos digitação do programador. Muitos desenvolvedores reclamam da sua forte
sensibilidade ao contexto, isto é, os métodos devem ser escritos com a primeira letra
maiúscula. Confesso que essa característica não foi uma barreira para a minha migração.

Para que você perceba um pouco as diferenças entre as duas linguagens observe o código
abaixo:

MySql="Select * from Contatos where Idade > 20"


Set MyConn=Server.CreateObject("ADODB.Connection")
MyConn.Open "Clientes"
Cont = MyConn.Execute MySql
MyConn.Close

O código acima obtém informações de um banco de dados, cujo Data Source chama-se
"Clientes". Foi implementado em Vbscript. Agora faça uma comparação com o código
abaixo:

var MyConn = Server.CreateObject( "ADODB.Connection" );


var MySql = "Select * from Contatos where Idade > 20";
MyConn.Open("Work");
MyConn.Execute(MySql);
MyConn.Close();

Este código faz a mesma coisa que o primeiro. A diferença básica é a forma diferenciada
como os métodos são chamados nas diferentes sintaxes.

Se você for uma pessoa curiosa, certamente tentará implementar a solução Jscript
imediatamente. Espero que você não desista no primeiro erro que encontrar, pois isso
certamente ocorrerá se você não incluir o seguinte comando logo no início do código: <%@
language="JScript" %>. É natural que você nunca tenha feito isso antes, pois o servidor

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 62 de 87
tem Vbscript como linguagem principal, por isso é necessário avisá-lo sobre o uso de outra
linguagem.

Para os interessados nessa aventura, existe uma documentação no site da Microsoft no


endereço: www.microsoft.com/jscript que descreve bem todas as funcionalidades de
JScript. Você também pode encontrar uma lista de discussão especializada no assunto no
endereço: www.learnasp.com.

Passando um pouco de experiência própria, decidi usar ASP com Jscript para homogeneizar
o código, pois Java Script, linguagem mais aceita entre os browsers, é a que eu utilizo para
funcionalidades no lado do cliente, e Jscript com ASP no lado do servidor. Isso facilita
bastante na hora de documentar o código.

Para mais informações, escreva para programer@uol.com.br. Pretendo documentar algumas


informações no endereço: http://www2.ivia.com.br/velocidade .

Samples: Hello World!


How Does This Sample Work?
The HTML for the page has two salient features.
First, there is an <INPUT> tag that creates a button named BtnHello. The OnClick part
identifies the code that should be run when the button is clicked.
<INPUT TYPE=BUTTON VALUE="Click me" NAME="BtnHello" OnClick="sayhello()">
Second, there is a <SCRIPT LANGUAGE> section that contains Microsoft® JScript® code,
which defines the sayhello function. To run the sayhello function, click BtnHello, which
causes an Alert dialog box to be displayed. The Alert method is supplied by the browser.

<SCRIPT LANGUAGE="JavaScript">
<!--

function sayhello ()
{
alert("Hello world!")
}

//-->
</SCRIPT>

Samples: Welcome
How Does This Sample Work?

As the page is loaded, <SCRIPT> tags are encountered by the browser. These <SCRIPT>
tags contain code that executes as the HTML page is being parsed. This code writes content
into the page using an object supplied by the browser. For this example, the Microsoft®
JScript® code calls the document object's Write method, and passes it a string. All of this
is done on the client side: no special server side processing, no PERL hacking, no fuss, no
muss!

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 63 de 87
The code

<SCRIPT LANGUAGE="JavaScript">
<!--

// These next lines of code execute when the script tag is parsed.

var d = new Date()


var h = d.getHours()

if (h < 12)
document.write("Good morning!")
else
if (h < 17)
document.write("Good afternoon!")
else
document.write("Good evening!")

document.write("<br><br>Welcome to the world of JScript. ")


document.write("<br>Just in case you were wondering, it's " + d + ".")

//-->
</SCRIPT>

Hospedagem Gratuíta

A maior dificuldade dos pequenos programadores em relação ao ASP é fazer o teste para a
verificação on line do que foi efetuado, se estaria correto ou não. Até um mês atrás, uma
maneira muito simples, porém cara seria fazer uma hospedagem paga para fazer os teste.
Pois bem, essa época já acabou... agora estão surgindo sites de hospedagem gratuítos.
Geocities, Yahoo, AltaVista? Não! Os sites dão sustento a várias linguagens dentre elas o
ASP. Basta fazer os seus Cadastros e utilizar um FTP comum para a tranferência dos dados.
Abaixo estão os sites. Bom aproveito e boa programação!!!!

http://www.webhostme.com

http://www2.ewebcity.com/home/index.asp

http://domaindlx.com

http://www.pointi.com.br

Melhor site para jscript

http://developer.netscape.com/docs/manuals/communicator/jsref/index.htm

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 64 de 87
Procure em www.javasite.com.br. Lá existem alguns exemplos. Outro site interessante é
www.zdnet.com

Em resposta a: Não consigo fazer PWS funcionar... enviado por Alex SS Amaral em 08 de Março de 2000 às
09:21:44:
1) Abra o gerenciador, vá em avançado, e adicione uma pasta virtual, ex. meusite, indicando o caminho fisico.
Marque Executar e Script.
2) Veja no gerenciador, o enereço http de sua maquina (se o serviço não estiver iniciado, clique no botão iniciar).
Deve ser parecido com http://nomedomeucomputador
3) Abra o browser e digite http://nomedomeucomputador. Se aparecer a pagina do IIS, está OK.
4) Digite http://nomedomeucomputador/meusite.

Em resposta a: Re: Não consigo fazer PWS funcionar... enviado por CArlos ALberto em 08 de Março de 2000 às
10:49:07:
Com relaçao a este assunto tenho algumas informações para somar e duvidas a tirar
- quando faço testes com paginas asp usando o endereço físico no blowser onde se encontra a homepage que criei
(ex: c:/webshared/wwwroot/intranet). Ao chamar uma página asp, me aparece a tela com a opçao de salvar no disco
ou abrir a pagina.
- quando uso o endereço virtual http://marcos/intranet me aparece a pagina default do ie 5 dizendo que a pagina não
foi encontrada.
- antes de rodar a homepage tenho que ativar o servidor PWS tanto http como o ftp.
- gostaria de saber por que nao funciona o asp usando o endereço virtual. Se alguem souber de mais informações
agradeço

Em resposta a: Desvantagem do ASP enviado por John em 07 de Março de 2000 às 21:15:52:


A primeira é que o ASP é uma linguagem de script logo é interpretada no servidor o que consome mais tempo de
processamento. Outras tecnologias que não têm este problema são: ISAPI, NSAPI, WIN-CGI, CGI executavel. OS
primeiros são DLLS que ficam no servidor e seu carregamento é mais rápido que o executavel. O Delphi 4 pode
desenvolver aplicativos nestas tecnologias. Outra forma é você utilizar servlets em Java, porém ainda~são pouco
difundidos aqui no Brasil e o tempo de procesaamento das classes java ainda é auto, pórem talez o caminho da
Internet este nela pois é muito poderosa com objetos distribuidos

Companheiros,
Tenho o seguinte:
o cara vai digitar um CGC e o o sistema busca na base para imprimir os dados em tela.
O registro existe, tanto que ele não entra na parte de final de arquivo.
set Conexao=Server.CreateObject("ADODB.CONNECTION")
ConnString="DBQ=c:\inetpub\wwwroot\ntcweb\_private\Entidade.mdb;DRIVER={Microsoft Access Driver
(*.mdb)}"
Conexao.Open ConnString
Consulta="Select * From Clientes Where cnpj ='"& Request.Form("cnpj") & "'"
Set Rs = Conexao.Execute(Consulta)
If Rs.Eof then
Response.write "Registro não encontrado ..."
Else
vcontrole=request.querystring("controle")
vempresa=request.querystring("empresa")
vendereco=request.querystring("endereco")

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 65 de 87
vbairro=request.querystring("bairro")
vcidade=request.querystring("cidade")
vestado=request.querystring("estado")
vcep=request.querystring("cep")
... Gostaria agora de mandar para a tela, essas variaveis atraves (se não me engano) do response.write, mas devo
estar colocando a sintaxe errada. Até consigo colocar "Nome da Empresa.: " porem o conteudo da variavel sai em
branco. Alguem poderia dar uma dica ???
Deduzo que o codigo acima esta correto.
Obrigado ...

Tente fazer isto.


Usei $ para representar MENOR QUE e usei # para representar MAIOR QUE, porque este fórum não permite estes
caracteres.

$%
set Conexao=Server.CreateObject("ADODB.CONNECTION")
ConnString="DBQ=c:\inetpub\wwwroot\ntcweb\_private\Entidade.mdb;DRIVER={Microsoft Access Driver
(*.mdb)}"
Conexao.Open ConnString
Consulta="Select * From Clientes Where cnpj ='"& Request.Form("cnpj") & "'"
Set Rs = Conexao.Execute(Consulta)
If Rs.Eof then %#
$H1# NÃO ENCONTRADO $/H1#
$% Else %#
$% = rs.fields(0).value %#
$% = rs.fields(1).value %#
$% = rs.fields(2).value %#
$% = rs.fields(3).value %#
$% = rs.fields(4).value %#
$% = rs.fields(5).value %#
$% End If %#
fields(0....n) retorna o conteúdo contido no campos do registro.
Por nada Marcelo

Sim Amigo você está correto com o vcontrole, vempresa,vendereco...


faça o seguinte use :
% Response.Write vcontrole %
% Response.Write vempresa %
% Response.Write vendereco %
e assim por diante....
ou use o atalho para o Response.Write :
%= vcontrole %
%= vempresa %
%= vendereco %
e assim por diante.

Em resposta a: Onde Hospedar Gratis HP que Suporte ASP/Access enviado por Marcos Kako em 05 de Março de
2000 às 18:45:15:
Marcos,
Uma ótima, que além de suportar ASP/Access, é em português, e trás muitas outras vantagens, é a POINTI.
(www.pointi.com.br)

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 66 de 87

Em resposta a: Nao consigo usar o WSP = SOCORRO = TUTORIAL enviado por Carlos Alberto em 25 de
Fevereiro de 2000 às 23:53:22:
Se voce instalou o PWS, então já pode rodar seu script ASP em sua maquina. Coloque o diretorio com as paginas
ASP abaixo do diretorio WEB do PWS (em geral na pasta C:\inetpub\wwwroot\) , por exemplo,
C:\inetpub\wwwroot\teste. Abra o nevegador e defina em Exibir, Opcoes da Internet, Conecção o uso de Conectar-se
a Internet Usando Rede Local.
Digite como endereço o nome de sua maquina ou IP (se nao souber, clique duas vezes no icone do PWS que fica na
barra de INICIAR e veja qual é), por exemplo http://oraculo/teste/pagina.asp
Lembre-se que para funcionar o acesso ao MDB deve ser reconfigurado como se sua maquina fosse o servidor, por
exemplo:
set conn = server.createobject("adodb.connection")
conn.open "DBQ=C:\inetpub\wwwroot\teste\arquivo.mdb;Driver={Microsoft Access Driver (*.mdb)};"
Pronto, seu ASP vai funcionar como se estivesse no servidor.

Desenvolvi uma pagina em ASP com acesso a banco de dados. Uma parte do codigo segue abaixo:
%
dim rstemp, con, SQL
set con = Server.CreateObject("ADODB.Connection")
con.ConnectionTimeout = Application("Conn1_ConnectionTimeout")
con.CommandTimeout = Application("Conn1_CommandTimeout")
con.Open Application("Conn1_ConnectionString"), Application(Conn1_RuntimeUserName),
Application("Conn1_RuntimePassword")
Essas "Application" estao declaradas no Global.asa.
Na linha con.open application... dá o seguinte erro:
Provider error '80040154'
Class not registered
/validacao.asp, line 7
Será que alguem poderia me ajudar, preciso de uma solucao com urgencia. O computador onde eu rodei essa pagina
é um WinNT, com IIS4. Nao possui ferramentas para desenvolvimento de asp, como o InterDev.
Agradeço qualquer ajuda.

Carinha, é o seguinte, para cada APPLICATION, você precisa declarar um Con.Open. Dessa forma, declare da
seguinte forma:
con.Open Application("Conn1_ConnectionString")
con.Open Application("Conn1_RuntimeUserName")
con.Open Application("Conn1_RuntimePassword")
Não se esqueça, também das aspas na segunda application

Desculpe a burrice mas eu nunca vi esse tipo de chamada.


A que eu conheço (talvez seja meu conhecimento que é limitado)
set con = server.createobject("adodb.connection")
con.open "driver={Sql Server};;user;pass;database"
Ou seja na CON.OPEN você passa uma string de conexão e não os parâmetros da conexão.
Se eu estiver errado por favor me avise, pois essa eu não conheço.

É que eu estou fazendo a conexao com o banco via ODBC. E as variaveis com os parametros estao declaradas no
Global.asa. Valeu pela a sua ajuda, mas o problema, acredito eu, é no objeto ADODB.CONNECTION.

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 67 de 87
Em resposta a: O ASP so pode retornar uma pagina ? enviado por Alex SS Amaral em 23 de Fevereiro de 2000 às
09:00:07:
Você pode usar o componente Advertisement Rotator para retornar uma baner diferente a cada carregamento de
página.
Para isto, crie um frame somente com Banner e coloque um Header HTTP com o refresh com o tempo que você
quiser, e o banner vai ser atualizado sem a intervenção do usuário.

Em resposta a: ASP PARA IMPRIMIR A PAGINA enviado por Regis W. Silva em 17 de Fevereiro de 2000 às
15:33:13:
Caro Colega;
Use em javascript mesmo :
window.print() - Só tá pronto!

Gostaria de saber aonde os dados das variaveis sessions sao armazenadas, se no servidor ou na maquina cliente.
Se for no servidor, como ele sabe diferenciar um usuario do outro e como ele sabe quando um usuario fechou o
browser apagando a session dele?
Se for no cliente, aonde ele grava essa variavel, se no cookie ou outro lugar, e como o servidor puxa esses dados?

Por favor me corrijam se eu estiver errado, mas me parece que os dados são armazenados no servidor, mas na hora
em que é aberta a sessão ele envia um cookie para a máquina do usuário (para identificação). A sessão é encerrada
quando o usuário fecha o browser ou quando ocorre o timeout da sessão. O timeout tem como valor default 20
minutos, mas pode ser configurado para valores diferentes
Só complementando, a sessão também pode ser encerrada explicitamente, utilizando o método "Session.Abandon".
Assim, é comum colocar uma opção de "Logout" na página.

A variável de sessao fica gravada no servidor. Porem cada Browser de cada usuario QUE ACEITA COOKIE ,
possue um "Session ID". A partir desta informação recuperada pelo servidor, sabe-se qual o valor da variável de
sessão deste usuário...

Em resposta a: Como posso trocar banners em uma página carregada? enviado por Rogerio Teixeira em 15 de
Fevereiro de 2000 às 17:44:37:
Eu fiz o seguinte, eu criei um banco de dados para colcar os banners, cada registro tem um ID (numero), nome da
figura, URL e um título.
O ID é feito em sequencia (1,2,3,4,5,....)
Em
http://www.asp101.com/samples/random_number.asp
tem um código pra gerar números aleatórios, eu coloquei esse número aleatório numa consulta por ID... então toda
vez que carrega a página ele gera um número que é jogado numa consulta por ID...
Vc pode definir o intervalo em que o número vai variar... por isso o ID tem que ser sequencial pra não corra o risco
de gerar um número que não exista no banco de dados...
E esse código de número aleatório pode ser alterado e fazer com que ele gere mais de um número aleatório...
podendo fazer com que apareça mais de um banner diferente na mesma página...
A explicação tá meio bagunçada (num sei explicar nada)... mas acho que dá pra entender... qualquer coisa deixe uma
mensagem aqui...

Isto é simples!
O que normalmente é feito é o seguinte:

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 68 de 87
Vc divide a pagina em dois frames; em um fica o banner, e em outro o conteudo da pagina.
E utilizando a meta-tag refresh vc recarrega a pagina que tem o banner de tempos em tempos.
Outra forma é fazer uma pagina, e dentro dela colocar um IFRAME com a pagina do banner, e nesta pagina com o
banner vc utiliza a meta-tag refresh tb.

Uma dúvida. A tag IFRAME funciona no Netscape 4.7 ? Fiz um teste e parece nao funcionar.. Está correto?

A tag iframe só funciona em browser Microsoft...

==========
Temos dois conceitos importantes que podem ser aprendidos aqui. Variáveis de sessão valem para a sessão de um
usuário, ou seja, se eu estou navegando pelo site e uma página preenche uma variável de sessão para mim, ela vale
apenas para minha navegação, outra pessoa terá outra variável de sessão, inclusive podendo ter outro valor. Não se
preocupe, elas não se mistura.

Existem as chamadas variávels de aplicação (application) que são únicas para o site todo. neste caso, todas as
sessões enxergam o mesmo valor. Suponhamos que durante a navegação uma página ASP quando eu a executo
coloca o valor 1 em uma variável de aplicação:
application("exemplo")=1

Se outro usuário estiver navegando em outra página que ler esta variável verá também o valor 1, diferente do que
acontece com as variáveis de sessão.

Para declarar ambas as variáveis é só instanciá-las na página ASP. Por exemplo:


session("habilita")="ok"

A partir daí, durante esta sessão, ela terá este valor, até que você a mude através de uma nova atribuição ou que a
sessão expire. Para encerrar uma sessão isto pode acontecer basicamente de três maneiras.
- usando o comando session.abandon;
- quando o usuário fecha o browser;
- quando ocorre um timeout, pois o tempo de sessão é definido no servidor, normalmente 15 ou vinte minutos.

Espero que tenha dado para entender um pouco o funcionamento.

Qualquer coisa é só postar no fórum.

================================================================================

Acho que não consegui me explicar direito. Eu sou o responsável pelo site. Tenho um arquivo que vou disponibilizar
para download. Crio um link para este arquivo .doc que está no servidor. Dependendo das configurações do IE do
cliente, este arquivo .doc abre dentro do frame da minha aplicação, ao invés de fazer a clássica pergunta: quer salvar
este arquivo?

Gostaria de saber se existe uma tag ou algo que o valha que eu possa obrigar o browser cliente a fazer o download e
não abrir o documento no frame da minha aplicação.

Creio que eu não tenho como fazer isso, mas em todo caso...

Valeu Manifesto e espero que agora tenha conseguido me explicar melhor


eu não sei com que Linguagem CGI ou Script vc esta trabalhando, mas eu creio que, para forcar o
download, se vc já fez a verificação das propriedades odo IE, vc poderia usar algo semelhante a

if browser_unabled then
response.redirect "url_do_DOC"

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 69 de 87
end if

ou então

window.location='url_do_DOC';

se vc preferir javaScript

Se o browser não tem uma referencia para abrir o arquivo (como teoricamente já verificado antes), ele
vai abrir a janela para download.

A session expira automaticamente, se não me engano em 15 min, vc pode diminuir essa configuração no
servidor ou então no prg:
session("suasessão")=""

Pra começar depende de que protocolo pretende usar: hhtp ou ftp.


Se for FTP uma solução que já me apresentaram é fazer um ActiveX que pega o arquivo no HD do cliente e envia
via FTP para um servidor deste tipo.
Particularmente eu vou usar HTTP e para isso vou comprar um produto chamado ASPUPLOAD, que nada mais é do
que um objeto que faz o upload usando a porta http. Vantagens: funciona em qualquer browser (acima de 4.0), não
tem ActiveX (que roda só no IE), é simples de trabalhar (parece FSO) e bem poderoso.

Espero ter ajudado.

A propósito, você pode baixar uma versão trial de 30 dias na página www.aspupload.com

Preciso de ajuda. Alguém sabe de algum servidor GRATUÍTO que suporte ASP, que não seja o www.point.com.br (é
uma &%$#*@, sai sempre fora do ar e é lento), www.ewebcity.com (também sai direto do ar e não tem como eu ver
E-Mail a partir dele) ou o www.webhostme.com (só pode ser atualizado via ftp)??? Qualquer coisa, menos esses
três... Aguém me ajude!!!!

Além desses 3, existe o http://domaindlx.com

www.pointi.com.br

Olá a todos.
Meu problema é que executo uma página ASP que faz uma consulta simples a um BD (na verdade simplíssima)
chamada de um formulário. Na primeira vez tudo funciona beleza. Só que na SEGUNDA VEZ tudo trava. O que
pode ser? Uso PWS 4.0, Win 98 e Access 97.
PS.: Estou usando o método .Close para fechar a conexão e o RecordSet; estou usando Set Conexao = nothing e Set
Rs = nothing também. Por isso não encontrei uma explicação convincente.
Desculpem pois não posso mandar o fonte agora. Se acharem necessário mandarei-o-o.

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 70 de 87
Estamos desenvolvendo um sistema em ASP que envolve consulta em banco de dados e estamos tendo um
problema.
Quando dois computadores acessam o sistema simultaneamente, um deles recebe uma mensagem de erro, como se o
arquivo do banco de dados não desse permissão de acesso.

O erro é:
(Microsoft OLE DB provider for ODBC drivers error '8000405' - Could not use '(unknown)', file already in use ).

O sistema operacional em que está rodando o meu sistema é Windows Nt 2000 e o banco de dados é Access.

Você saberia dizer qual pode ser a causa do erro. Ficaríamos muito gratos se obtivéssemos uma resposta.

Por favor, se possível enviem-me resposta por e-mail.

Configuração de DSN (ODBC)


Quando criamos um drive ODBC para o banco que iremos usar, surgem três formas de declarar:
1) User DSN - o banco será aberto para um usuário específico;
2) System DSN - o banco será aberto para qualquer usuário ("É O MAIS INDICADO");
3) File DSN - é apenas uma descrição do BD.
Verifique o seu DSN para saber se o seu banco não foi criado no modo USER DSN.

Se sim, verifique na configuração do ODBC, se não está sendo aberto em modo exclusivo !

Verifique no código ASP se as conexões estão sendo fechadas, algo do tipo:


cn.Close
set cn = Nothing
onde cn é o nome da conexão.

Em resposta a: Conexão de banco de dados em pasta virtual enviado por Gustavo em 13 de Março de 2000 às
18:55:38:
Abrir página
http://www.allnet.com.br
depois entrar em SUPORTE
DEPOIS EM FAQ
DEPOIS EM ASP
e lá está explicando detalhadamente.

Depois de terminado e hospedado o seu site, temos que colocá-lo nos principais sites de
busca na Internet, senão ninguém irá saber que ele existe! Afinal, a propaganda é a alma
do negócio!

Catálogos e Motores de Busca

Existem dois tipos de sites de busca na web: os catálogos e os motores de busca. No


primeiro, você entra com todas as informações sobre o seu site, e estas informações são
conferidas uma a uma por uma equipe responsável pela inclusão dos sites no cadastro. A
grande desvantagem deste sistema é a demora para o seu site constar no catálogo, mas é
compensado por uma melhor organização dos assuntos.

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 71 de 87
Os motores de busca lançam mão de programas especiais conhecidos como "spiders"
(também denominados "worms" ou "crawlers"). Estes programas rastream a Internet,
colhendo dados das páginas acessadas e anexando-os a um banco de dados. Esses dados
são fornecidos através de meta tags que são colocados na sua página (clique aqui para
aprender mais sobre meta tags). A vantagem de se usar os spiders é que o cadastro é mais
rápido, já que os robôs trabalham 24 horas por dia, 7 dias da semana. Mas como também a
organização dos assuntos é feito de forma automática, a procura em um site desses pode
ficar mais difícil.

Cadastrando a sua URL em 20.000 sites de busca ou apenas 20?

Para cadastrar seu site em um catálogo, você entra no site e geralmente há um local
(normalmente conhecido como "inclusão") onde você preenche os dados do seu site. Dentro
de alguns dias ou semanas, o seu site estará constando no sistema de busca.

Nos motores de busca, você tem que ter no seu site meta tags específicos (veremos como
fazê-los mais adiante) que irão conter as informações sobre o seu site ou página que
servirão para alimentar a base de dados do sistema de busca. A visita do robô ao seu site
pode ser agendada, bastando para isso ir no site de busca e marcar a visita.

Existem vários sites na Internet que realizam o cadastro automático em 20, 100 ou 20.000
mecanismos de busca. Alguns são gratuitos e outros cobram uma pequena taxa. A
vantagem disso é que você tem que preencher os dados do seu site em apenas um único
momento.

Bem, opinião pessoal minha é que cadastrar seu site em mais de 20 mecanismos de busca é
perda de tempo, pois é fato que, mais de 90% das visitas aos mecanismos de busca
nacionais se concentram no Cadê, Yahoo!, Família Miner (que usa o cadastro do Cadê),
Zeek e Radar UOL. Portanto, cadastrando nesses sites (e mais os que listo mais adiante) é o
caminho para o melhor retorno. Não quero menosprezar os outros mecanismos de busca
(existem centenas no Brasil), mas o retorno que eles te darão não compensará o esforço
para cadastrar o seu site neles. O mesmo vale para os mecanismos de busca no
estrangeiro. Cadastre o seu site nos mecanismos listados mais adiante.

Muito cuidado com a descrição do seu site

O grande ponto para seu site aparecer nas buscas dos internautas nos mecanismos de
busca é a descrição do seu site. Qualquer palavra da descrição é usada na busca. Por isso,
tente colocar o máximo de palavras-chave que possam estar relacionadas com seu site na
descrição. Por exemplo, veja a descrição de um site sobre programação, por exemplo.

"Site de Programação - Aprenda aqui a programar em diversas linguagens"

Agora veja este outro:

"Site de Programação - Aprenda aqui a programar em diversas linguagens


(Visual Basic, Delphi, Cobol, etc.)"

Vamos supor que você seja um programador em Delphi e esteja procurando um site sobre
Delphi. Que palavra você digitaria em um mecanismo de busca: "programação", "Delphi" ou
"Programação Delphi"? Em qualquer uma das três tentativas, seria mostrada a segunda
descrição do site. A primeira descrição só apareceria se o navegador tentasse buscar por
"Programação".

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 72 de 87
Configurando meta tags da sua página para os motores de busca

Como já vimos, para os spiders dos motores de busca conseguirem alguma informação
sobre o nosso site, temos que fornecê-las a eles através das meta tags. Existe um artigo na
seção HTML (veja aqui) fornecendo mais informações sobre meta tags. Aqui só ilustrarei
quais tags você tem que por na seção head da sua página.

<HEAD>
<TITLE>Título do site</TITLE>
<META NAME=DESCRIPTION CONTENT="descrição do site">
<META NAME=KEYWORDS CONTENT="lista de palavras-chave adicionais">
</HEAD>

Basicamente, são as informações acima que são usadas pelos motores de busca (pode
ocorrer algumas variações, dependendo do mecanismo de busca. Para saber se existe algo
diferente a ser configurado em sua página, é bom que se visite o site do serviço). Já
falamos sobre a importância da descrição do site, referenciada pela variável DESCRIPTION,
mas outra tag importante é a KEYWORDS. Nela você fará uma relação de palavras-chave
que não aparecem na descrição, mas que também serão usadas na busca. Essas palavras
devem ser separadas por vírgula.

Principais ferramentas de busca no Brasil e no Exterior.

Brasil

Achei (http://www.achei.com.br)
- Catálogo

Aonde (http://www.aonde.com) (20/05/1999)


- Catálogo

Cadê (http://www.cade.com.br)
- Catálogo

GlobalMedia (http://www.globalmedia.com.br)
- Catálogo

Guia Starmedia (http://www.starmedia.com/guia)


- Catálogo (12/10/1999)

IMais (http://www.imais.com.br)
- Catálogo NOVO! (16/11/1999)

Lycos Brasil (http://www.lycos.com.br)


- Motor de busca (07/11/1999)

Netscópio (http://www.netscopio.com.br) (23/07/1999)


- Motor de busca

Onde Ir? (http://www.ondeir.com.br)


- Catálogo

RadarUOL (http://www.radaruol.com.br)
- Motor de busca

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 73 de 87
Surf (http://www.surf.com.br)
- Catálogo

Yahoo! (http://www.yahoo.com.br) (14/06/1999)


- Catálogo

Zeek! (http://www.zeek.com.br) (11/03/1999)


- Catálogo

Exterior

Altavista (http://www.altavista.com)
- Motor de busca

AOL (http://netfind.aol.com)
- Motor de busca

Excite (http://www.excite.com)
- Motor de busca

Hotbot (http://www.hotbot.com)
- Motor de busca

Infoseek (http://www.infoseek.com)
- Motor de busca

Lycos (http://www.lycos.com)
- Motor de busca

Webcrawler (http://www.webcrawler.com)
- Motor de busca

Yahoo! (http://www.yahoo.com)
- Catálogo

Sites que cadastram o seu site em vários mecanismos de busca

Nacional

@Find It! (http://www.a-findit.com) (29/08/1999)

Mr. Multimídia - Meta Cadastro (http://www.mrmultimidia.com/metasub/)


NOVO! (16/11/1999)

Siscad (http://www.infomarket.com.br/siscad/) (29/08/1999)

Quem? (http://www.quem.com.br/submit/) (29/08/1999)

Web Way (http://www.convert.com.br/webway/) (29/08/1999)

Exterior

One-Click Free Submit


(http://www.sitecrafters.com/support/tools/submitsite.asp)

Submit It! (http://www.submit-it.com) (29/08/1999)

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 74 de 87

Pela definição encontrada no help do FrontPage 98, um Meta Tag é "um tag
HTML que aparece na seção <head> da sua página. Ele fornece informações
sobre a página mas não afeta a sua aparência". Por exemplo, um meta tag
padrão, "generator", é usado para indicar o tipo de editor que criou a sua
página HTML. É por isso que, em qualquer página criada no FrontPage,
aparece esta linha na porção <head>:

<meta name="GENERATOR" content="Microsoft FrontPage


3.0">

Um meta tag pode ter dois atributos possíveis:

 HTTP-EQUIV="name" CONTENT="content"

 NAME="name" CONTENT="content"

Os meta tags com HTTP-EQUIV (conhecidos como variáveis de sistema)


servem para enviar instruções especiais ao browser quando a página é
carregada, como uma data de expiração de browser ou um valor de
atualização ("refresh"). Veja o exemplo abaixo:

<meta HTTP-EQUIV="refresh"
CONTENT="5;URL=http://www.teste.com.br/page.htm">

Este exemplo diz ao browser que dentro de 5 segundos, automaticamente


carregue a página descrita acima. Legal, não?

Já os meta tags com NAME (conhecidos como variáveis definidas pelo


usuário) são usados para guardar informações sobre a página. São usados
principalmente nos mecanismos de buscas com robôs (veja mais sobre esses
mecanismos de busca aqui).

Um meta tag é composto de duas partes: identificador e conteúdo. O


identificador da tag é referenciado na parte name do comando e o seu
conteúdo, ou valor, pela parte content.

A seguir veremos alguns meta tags mais utilizados.

Meta tags HTTP-EQUIV

Expires - Especifica a data e a hora em que o documento deve ser


considerado expirado (quando a página se torna obsoleta). Controla o uso do
cache. Por exemplo, se uma requisição para um documento cujo prazo
expirou, irá gerar uma nova requisição de rede. Uma data de expiração ilegal,
tipo "0", é interpretada como "now" (agora). Setando expires para 0 pode ser
usado para forçar uma checagem de modificação a cada visita.

<meta HTTP-EQUIV="Expires" CONTENT="Mon, 19 Jul 1999 09:32:57 GMT">

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 75 de 87
A data deve ser informada no formato GMT, como está mostrado acima.
Robôs de web podem deletar documentos expirados de um mecanismo de
busca, ou agendar uma nova visita (para saber mais sobre robôs de web,
clique aqui).

Pragma - Com o valor "no-cache", faz com que o browser não coloque a
página no cache local.

<meta HTTP-EQUIV="Pragma" CONTENT="no-cache">

Refresh - Especifica um intervalo em segundos para que o browser depois


recarregue automaticamente o documento. Também pode abrir uma página
diferente.

<meta HTTP-EQUIV="Refresh"
CONTENT="3;URL=http://members.tripod.com/marcalhokama/index.htm">

No exemplo acima, o browser espera 3 segundos e depois carrega


automaticamente a página especificada pela string "URL".

Meta tags NAME

Description - Breve descrição da página ou do site. É usado pelos motores


de busca para descrever o seu documento. Tente limitar o conteúdo da sua
descrição para menos de 200 caracteres.

<meta NAME="Description" CONTENT="Página sobre a construção de sites">

Keywords - Palavras-chave usadas pelos motores de busca para indexar o


seu documento, adicionadas às palavras do título e do corpo do documento.
Geralmente é usada para adicionar sinônimos e alternativas para as palavras
do título.

<meta NAME="keywords" CONTENT="programação,páginas,ASP">

Author - Identifica o autor do documento.

<meta NAME="author" CONTENT="Marçal L. Hokama">

Generator - Identifica o nome e a versão da ferramenta de publicação


utilizada para criar a página.

<meta NAME="Generator" CONTENT="NoteTab">

Copyright - Informações sobre direitos autorais.

<meta NAME="Copyright" CONTENT="Copyright 1999 Marçal">

Onde encontrar mais informações

 HTML, META, REL and REV tags (http://vancouver-


webpages.com/META/)

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 76 de 87
 HTML's META-Tag - Artigo de Alan Richmond para o Web Developer's
Virtual Library (http://wdvl.com/Authoring/HTML/Head/Meta/)

Temos dois conceitos importantes que podem ser aprendidos aqui. Variáveis de sessão valem para a
sessão de um usuário, ou seja, se eu estou navegando pelo site e uma página preenche uma variável de
sessão para mim, ela vale apenas para minha navegação, outra pessoa terá outra variável de sessão,
inclusive podendo ter outro valor. Não se preocupe, elas não se mistura.

Existem as chamadas variávels de aplicação (application) que são únicas para o site todo. neste caso,
todas as sessões enxergam o mesmo valor. Suponhamos que durante a navegação uma página ASP
quando eu a executo coloca o valor 1 em uma variável de aplicação:
application("exemplo")=1

Se outro usuário estiver navegando em outra página que ler esta variável verá também o valor 1,
diferente do que acontece com as variáveis de sessão.

Para declarar ambas as variáveis é só instanciá-las na página ASP. Por exemplo:


session("habilita")="ok"

A partir daí, durante esta sessão, ela terá este valor, até que você a mude através de uma nova
atribuição ou que a sessão expire. Para encerrar uma sessão isto pode acontecer basicamente de três
maneiras.
- usando o comando session.abandon;
- quando o usuário fecha o browser;
- quando ocorre um timeout, pois o tempo de sessão é definido no servidor, normalmente 15 ou vinte
minutos.

Espero que tenha dado para entender um pouco o funcionamento.

Qualquer coisa é só postar no fórum.

Estou com um problema em indicar o caminho do meu bd em meus scripts. Eu tenho um banco que esta em um
diretorio e quero que uma pagina que esta em outro diretorio (dentro do que contem o bd) possa acessar esse banco.
tentei o server.mappath mas nao funcionou. Alguma sugestao?

O caminho do Server.MapPath é aonde a sua página se encontra na Internet.


Suponhamos que a sua página seja www.paulo.com.br e você tenha um banco num sub-diretorio
chamado "..\banco". Então você pode fazer o seguinte.
Response.Write "Meu banco está em " & Server.MapPath & "\banco"

Alzair obrigado pela ajuda, mas continua sem funcionar. O problema e o seguinte:
o banco esta em www.paulo.com.br/banco1.mdb
porem as paginas que acessarao o banco estao em:
www.paulo.com.br/diretorio1/pagina.asp.
assim quando uso o server mappath ele retorna o endereço da pagina um e nao do diretorio do banco.

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 77 de 87
Um carrinho de um comercio eletronico não passa de uma tabela de um banco que quando o
usuario termina a compra os dados desta tabelas são excluídos.
Um produto de um carrinho de compras não passa de um registro em uma tabela com os seus
respectivos campos necessários.
qualquer duvida ...

(Para quem não está acompanhando é o seguinte:


Ao acessar um BD usando ASP, na primeira vez tudo funciona normal, porém na segunda, trava
tudo)
Um colega meu me disse para atualizar o MDAC (Microsoft Data Access
Components, se não me engano)
(o meu estava na versão 1.5).
Vá no site http://www.microsoft.com/data e lá procure pela atualização do
MDAC. Escolha a versão 2.5 English.
É uns 7.6MB se fosse menor poderia passar por email, mas não dá :^(((

Recordcount continua retornando -1, já estou p.... enviado por Felippe em 23 de Março de 2000
às 08:40:52:
Você não deve estar usando o tipo de cursor correto. Veja :
(...)
SQL = "Select * form produtos where codprod = '" & CodDigitado & " ' "
Rs.Open Sql, Conexão, 3, 3
Response.write "Foram Encontrados "& Rs.RecordCount & "registros"
(...)
Onde : Rs.Open Sql, Conexão, 3, 3
Tipo de Cursor : Static (3)
Tipo Trava : Batch Otimistic (3)
Programo em VB e quando acontece isso:
Mova o cursor para o ultimo registro e logo apos mova o cursos para o primeiro de volta e puxe
o recordcount.

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 78 de 87
Ju, tente o seguite
SELECT COUNT(*) FROM arquivo WHERE condição
Esta instrução vai retornar o total de registros do arquivo que atendam a condição, para usar o
resultado
TotRec = RsTemp.FIELDS(0).VALUE
Qualquer coisa me mande um e-mail, espero ter ajudado.

: Diferenca entre Method Post e Get enviado por Celso em 11 de Março de 2000 às 23:31:56:
Celso,
Não tenho uma resposta técnica para te dar, vou falar sobre a minha opinião pessoal.
O método POST é mais "limpo" pois não fica passando parâmetros na cara do usuário, às vezes
pode até ser inseguro isso.
Já o método GET tem uma vantagem que costumo usar. Se você está numa página ASP e precisa
passar um parâmetro para outra página que está chamando
procuro passar o parâmetro através da URL sempre que possível. uns preferem usar variáveis de
sessão, mas creio que onera o servidor sem necessidade e se você tem muitos acessoa ao site
pode ser que o número de variáveis de sessão tenha que ser controlado.
Neste caso faço um response.redirect para a página com a variável na URL, do tipo "teste.asp?
msg=1001" e na página teste.asp faço um request.querystring("msg").
Fora este caso, uso sempre POST.
Este é jeito que trabalho, outros podem ter explicações melhores e neste caso também gostaria de
conhecê-las.
Abraços, Ben Hur

Criei uma base com um campo Memo.


Mas não estou conseguindo listar o mesmo.
Como faço para o HTML entender e fazer as quebras de linhas

Para listá-lo corretamente no HTML, você tem que usar o TEXTAREA%...%/TEXTAREA.


Somente desse jeito ele fará corretamente a quebra de linhas... Infelizmente, o TEXTAREA não
consegue ser travado, mas é essa a solução que encontrei.

Travado como asssim?


Se vc se refere a impedir que se edite um campo TEXTAREA, ou qualquer outro, acrescente na
tag a opcao "disabled" ou "readonly", sem aspas, e veja o que acontece
http://www.learnasp.com http:// www.aspbrasil.com.br
FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 79 de 87

Interessante... lendo as perguntas e respostas acima, não sabia que dava pra desabilitar o textarea.. é. vivendo e
aprendendo
Caro "Alguém"
Nao so TEXTAREA, mas qualquer campo do formulario pode ser desabilitado utilizando as
propriedades informadas acima - "disabled" e/ou "readonly"

Enviando e-mails utilizando CDONTS

Enviando e-mails com CDONTS

Abaixo, um exemplo de envio de e-mails para pessoas cadastradas em um banco de dados,


utilizando o componente CDONTS, objeto integrante do IIS 4, e que tem, entre outras
funções, a função de enviar e-mails.

Abaixo segue um exemplo: Enviando E-mail

Digite a baixo o assunto e o texto da mensagem que será enviada a todos os cadastrados.

<form method="post" action="enviar_email.asp" name="">


Assunto:
<input type="text" name="assunto" size="20">
Texto: <textarea name="texto" cols="25" rows="10"></textarea>
<input type="submit" name="Submit" value="Enviar">
</form>

Abaixo segue a programação!

<%

function enviar_email(de_email,de_nome,para_email,para_nome,assunto,texto)
Set objmail = Server.CreateObject("CDONTS.NewMail")
objmail.from = de_email
objmail.to = para_email
objmail.subject = assunto
objmail.body = texto
objmail.send

Response.Write "Email enviado para : " & para_nome & " || " & para_emailtime & "

set objmail = nothing


end function

ConnString="DBQ=e:\aspbrasil\teste.mdb;Driver={Microsoft Access Driver (*.mdb)}"


sqlstmt = "select nome, email from cadastro"
Set Conn = Server.CreateObject("ADODB.Connection")
set rsquery = conn.execute(sqlstmt)
nr_geral = 0

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 80 de 87
assunto = request.form("assunto")
texto = replace(request.form("texto"),chr(13),"&nbsp;<br>")

while not rsquery.eof


enviar_email("dangelo@aspbrasil.com.br","ASPBRASIL",rsquery("email"),rsquery("nome"),a
ssunto,texto)
nr_geral = nr_geral + 1

wend

Response.write "Numero Total de Emails: " & nr_geral & "

rsquery.close
set rsquery = nothing
set conn = nothing

%>

Enviando e-mails com tags HTML

Hoje em dia, a maioria dos programas de recebimento de e-mail já aceitam tags HTML.
Levando em consideração tal número, porque não enviar e-mails utilizando essas tags?
Essas tags permitem a inserção de imagens, links, mudança de cor e tamanho das fontes,
permitindo a confecção de e-mails mais bonitos e organizados. Abaixo, segue um exemplo
utilizando o objeto ASPMAIL, da ServerObjects.

Abaixo segue um exemplo:

Enviando E-mail

No formulário abaixo, é permitida a inserção de TAGS HTML

<FORM METHOD="post" ACTION="enviar_email.asp" name="">


<p>Digite a baixo o assunto e o texto da mensagem que será enviada a todos os
cadastrados.</p>
Assunto: <INPUT TYPE="text" NAME="assunto" SIZE="20">
Texto: <TEXTAREA NAME="texto" cols="25" rows="10"></textarea>
<INPUT type="submit" name="Submit" value="Enviar"><font face="Verdana,
Arial, Helvetica, sans-serif" size="2">
</FORM>

Abaixo segue a programação!

<%
ConnString="DBQ=e:\aspbrasil\teste.mdb;Driver={Microsoft Access Driver
(*.mdb)}"
sqlstmt = "select nome, email from cadastro"
Set Conn = Server.CreateObject("ADODB.Connection")
set rsquery = conn.execute(sqlstmt)

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 81 de 87
nr_emails_corretos = 0
nr_emails_errados = 0
nr_geral = 0

while not rsquery.eof

Set Mailer = Server.CreateObject("SMTPsvg.Mailer")


Mailer.ContentType = "text/html"
Mailer.RemoteHost = "smtp.testeaspbrasil.com.br"
Mailer.FromName = "TESTE - ASPBRASIL"
Mailer.FromAddress = "contato@aspbrasil.com.br"
Mailer.AddRecipient rsquery("nome"),rsquery("email")
Mailer.Subject=request.form("assunto")
Mailer.Bodytext = "Caro <b>" & rsquery("nome") & ",</b><br>" &
request.form("texto")
x = Mailer.SendMail

if x = true then
MSG = "E-MAIL ENVIADO COM SUCESSO!"
nr_emails_corretos = nr_emails_corretos + 1
Else
MSG = " O E-MAIL NÃO FOI ENVIADO COM SUCESSO!"
nr_emails_errados = nr_emails_errados + 1
end if
nr_geral = nr_geral + 1
Response.write nr_geral & " - " & MSG
rsquery.movenext

wend

Response.write "Numero Total de Emails: " & nr_geral & "<br>"


Response.write "Numero de Emails enviados: " & nr_emails_corretos & "<br>"
Response.write "Numero de Emails não enviados: " & nr_emails_errados & "<br>"

rsquery.close
set rsquery = nothing
set conn = nothing
%>

Enviando e-mails a partir de consultas a bancos de dados

Você tem um banco de dados online, com vários nomes cadastrados e gostaria de enviar e-
mails a todas essas pessoas? O ASPMail é uma opção simples e fácil. Grande parte dos
servidores possuem tal objeto, que é uma dll que pode ser encontrada na serverobjects, e
tem como função o envio de e-mail a partir de formulários (vide tutorial anterior) bem como
a partir de bases de dados.

Abaixo segue um exemplo:

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 82 de 87
Enviando E-mail

<FORM METHOD="post" ACTION="enviar_email.asp" name="">


<p>Digite a baixo o assunto e o texto da mensagem que será enviada a todos os
cadastrados.</p>
Assunto: <INPUT TYPE="text" NAME="assunto" SIZE="20">
Texto: <TEXTAREA NAME="texto" cols="25" rows="10"></textarea>
<INPUT type="submit" name="Submit" value="Enviar"><font face="Verdana,
Arial, Helvetica, sans-serif" size="2">
</FORM>

Abaixo segue a programação!

<%
ConnString="DBQ=e:\aspbrasil\teste.mdb;Driver={Microsoft Access Driver
(*.mdb)}"
sqlstmt = "select nome, email from cadastro"
Set Conn = Server.CreateObject("ADODB.Connection")
set rsquery = conn.execute(sqlstmt)

nr_emails_corretos = 0
nr_emails_errados = 0
nr_geral = 0

while not rsquery.eof

Set Mailer = Server.CreateObject("SMTPsvg.Mailer")


Mailer.RemoteHost = "smtp.testeaspbrasil.com.br"
Mailer.FromName = "TESTE - ASPBRASIL"
Mailer.FromAddress = "contato@aspbrasil.com.br"
Mailer.AddRecipient rsquery("nome"),rsquery("email")
Mailer.Subject=request.form("assunto")
Mailer.Bodytext = "Caro " & rsquery("nome") & "," & chr(13) &
request.form("texto")
x = Mailer.SendMail

if x = true then
MSG = "E-MAIL ENVIADO COM SUCESSO!"
nr_emails_corretos = nr_emails_corretos + 1
Else
MSG = " O E-MAIL NÃO FOI ENVIADO COM SUCESSO!"
nr_emails_errados = nr_emails_errados + 1
end if
nr_geral = nr_geral + 1
Response.write nr_geral & " - " & MSG
rsquery.movenext

wend

Response.write "Numero Total de Emails: " & nr_geral & "<br>"


Response.write "Numero de Emails enviados: " & nr_emails_corretos & "<br>"
Response.write "Numero de Emails não enviados: " & nr_emails_errados & "<br>"

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 83 de 87
rsquery.close
set rsquery = nothing
set conn = nothing
%>

Enviando E-mails através de páginas WEB

Como enviar e-mails por páginas Web? O ASPMail é uma opção simples e fácil. Grande
parte dos servidores possuem tal objeto, que é uma dll que pode ser encontrada na
serverobjects, e tem como função o envio de e-mail. Abaixo segue um exemplo de como
pode ser utilizado o ASPMAIL.
Enviando E-mail
<FORM METHOD="post" ACTION="enviar_email.asp" name="">
Nome:
<INPUT TYPE="text" NAME="nome" SIZE="20">
E-mail:
< INPUT TYPE="text" NAME="email" SIZE="20">
Assunto:
< INPUT TYPE="text" NAME="assunto" SIZE="20">
Texto:
< TEXTAREA NAME="texto" cols="25" rows="10"></textarea>
< INPUT type="submit" name="Submit" value="Enviar" font face="Verdana,
Arial, Helvetica, sans-serif" size="2">
</FORM>

Abaixo segue a programação!


<%
Set Mailer = Server.CreateObject("SMTPsvg.Mailer") - Conexão com a dll do servidor
Mailer.RemoteHost = " " Local onde você colocará o smtp. Ex. "smtp.ricardo.com"

Mailer.FromName=request.form("nome") - Procura no form o nome colocado


Mailer.FromAddress = request.form("email") - Procura no form o e-mail colocado
Mailer.AddRecipient "Ricardo Tardelli","tardelli@aspbrasil.com.br" - O nome de
quem está enviando e o E-mail
Mailer.Subject=request.form("assunto") - Procura no form o assunto colocado

Mailer.Bodytext = request.form("texto") - Procura no form o texto colocado

x = Mailer.SendMail

if x = true then

MSG = "E-MAIL ENVIADO COM SUCESSO!"

Else

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 84 de 87

MSG = " O E-MAIL NÃO FOI ENVIADO COM SUCESSO!"

end if

Response.write MSG

Acima uma condição onde se o E-mail for enviado com sucesso ele mostrará a MSG!

Manipulando arquivos TXT - parte I

Por ser uma das formas mais antigas de armazenamento de dados, e também uma das
mais simples, os arquivos TXT ainda são uma grande arma no armazenamento de
informações, e como tal, tem seu destaque na linguagem ASP. Integração de diferentes
bases de dados a baixo custo, armazenamento de grande quantidade de informação não
padronizada e aceitabilidade em 100% dos sistemas operacionais são algumas das
características/vantagens dos arquivos TXT.

Um objeto chamado FileSystemObject foi desenvolvido com o intuito de permitir acesso a


arquivos TXT a partir de ASP, e dispõe das seguintes funções: LER arquivos TXT, CRIAR
arquivos TXT e adicionar dados em arquivos TXT.

O ASPBRASIL dividiu este tutorial em 4 partes, como segue:

1. LER arquivos TXT


2. CRIAR arquivos TXT e gravar informações iniciais
3. ADICIONAR informações a um arquivo TXT já existente
4. ASPECTOS AVANÇADOS do objeto FileSystemObject

Abaixo, segue um exemplo de leitura de um arquivo TXT.

nome do arquivo: teste.txt (abaixo, layout do arquivo teste.txt)

<b>TESTE de leitura de arquivo TXT</b>


<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Este arquivo txt pode
conter tanto texto puro quanto texto com formato HTML. </font></p>
<p> <div><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Este tutorial será
dividido em 4 partes, como segue:</font></div>
<div><font size="2" face="Verdana, Arial, Helvetica, sans-serif">1. A primeira parte,
ensinara a ler um arquivo TXT</font></div>
<div><font size="2" face="Verdana, Arial, Helvetica, sans-serif">2. A segunda parte, a
criar e gravar em um arquivo TXT</font></div>
<div><font size="2" face="Verdana, Arial, Helvetica, sans-serif">3. A terceira parte, a
adicionar conteúdo a um arquivo TXT já existente</font></div>
<div><font size="2" face="Verdana, Arial, Helvetica, sans-serif">4. A quarta parte
discutirá algumas funções avançadas e algumas aplicações dos arquivos TXT</font></div>

Abaixo, rotina ASP que lê arquivos TXT

<!--#include file="fobjvbs.inc"-->

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 85 de 87
<%
path_do_arquivo = "e:/teste/"
nome_do_arquivo = "teste.txt"

'as linhas abaixo faz a conexão com o objeto FileSystemObject e abre o arquivo txt
especificado.
Set fs = CreateObject("Scripting.FileSystemObject")
Set thisfile = fs.OpenTextFile(path_do_arquivo & nome_do_arquivo, forreading, False)

while (not thisfile.AtEndOfStream) and response.isclientconnected()

'as linhas abaixo lêem o arquivo TXT e então escrevem o seu conteúdo no Browser.
linha_txt = thisfile.readline
response.write linha_txt

wend

thisfile.Close
set thisfile=nothing
set fs=nothing
%

Manipulando arquivos TXT - parte II

Seguindo com o minitutorial sobre arquivos TXT, iremos abordar a criação de arquivos TXT
e também a adição de dados a este arquivo. Exemplificaremos tais ações com o código de
geração de arquivos LOG, que funciona da seguinte forma: Todo dia é criado um arquivo
TXT, cujo nome é a data no formato invertido (aaaa/mm/dd). Para cada usuário que acessa
uma página onde existe essa rotina, o arquivo TXT especificado recebe uma linha a mais.
Caso este arquivo não exista, ele é criado, deixando assim o sistema totalmente
automatizadol.(o primeiro acesso de cada dia irá perceber a falta do arquivo TXT do dia, o
qual é criado neste momento.)

Abaixo, rotina ASP que Cria e adiciona dados em arquivos TXT

<%
path_do_arquivo = "e:/teste/"

Const forReading = 1, forWriting = 2, forAppending = 8


Const TriDef = -2, TriTrue = -1, TriFalse = 0

Dia = Day(Date())
if Dia < 10 then Dia = "0" & Dia
Mes = Month(Date())
if mes < 10 then mes = "0" & mes
Ano = Year(Date())

'a linha abaixo gera o nome do arquivo de acordo com o dia. (todo dia tem que ser criado

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 86 de 87
um arquivo novo)
arquivo = path_do_arquivo & Ano & Mes & Dia & ".log"

'a linha abaixo abre a instância com o objeto Scripting. FileSystemObject


Set ObjFSO = CreateObject("Scripting.FileSystemObject")

'abaixo, é feita a verificação da existência do arquivo procurado. Caso ele ainda não exista
(o que ocorre 1 vez por dia, no primeiro acesso), ele é criado
If ObjFSO.FileExists(arquivo) = False then
'abaixo, a linha que cria o arquivo TXT especificado
objFSO.CreateTextFile(arquivo)
End If

'a linha abaixo abre o arquivo desejado. Lembre-se, ou ele já existe ou ele foi criado na
rotina acima.
Set ObjFile = objFSO.GetFile(arquivo)
'a linha abaixo diz o tipo de manipulação que será utilizada no arquivo TXT, no caso é para
adicionar dados.
Set objStream = ObjFile.OpenAsTextStream(forAppending,TriDef)

'abaixo, são criadas algumas variáveis com valores que serão colocados no LOG (hora, IP,
versão do Browser)
Hora = Time()
IpNum = Request.ServerVariables("REMOTE_ADDR")
BrowVer = Request.ServerVariables("HTTP_USER_AGENT")

'o comando WriteLine, abaixo, grava os dados no arquivo TXT especificado.


ObjStream.WriteLine Hora & " | " & Dia & "/" & Mes & "/" & Ano & " | " & IpNum
& " | " & BrowVer & " --> "

'abaixo, o objeto ObjStream é fechado


ObjStream.close
Set ObjStream = nothing

%>

BEAT - Horário Mundial da Internet

Quem ainda não teve dificuldades em marcar encontros na Internet devido à grande
confusão ocasionada pelos fuso-horários e mudanças devido aos horários de verão ou
inverno? Pensando nessa confusão, a Swatch (aquela que fabrica relógios esquisitos e
despojados) criou o .BEAT.

O .BEAT é o horário mundial da INTERNET, e em qualquer lugar que estivermos, ele terá o
mesmo valor. Nessa nova medida de tempo, não existem fuso-horários nem horários de
verão ou inverno. A contagem também é diferente. Ao invés de dividir o dia em horas,
minutos e segundos, a Swatch dividiu o dia em 1000 BEATS. Cada .BEAT equivale a 1
minuto e 26.4 segundos. O símbolo utilizado para representar o BEAT é o @, e o BEAT
@000 equivale às 0:00 horas de BIEL, a cidade suiça onde a Swatch está sediada.

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa
ASPDICA4.DOC Página 87 de 87
Veja a tabela a seguir:
País Horário BEAT

Brasil(Brasillia) 12:07 @630


Venezuela 11:07 @630
Grã-Bretanha 15:07 @630
Bélgica 16:07 @630
Cingapura 22:07 @630
Taiwan 23:07 @630
Japão 24:07 @630
...aqui (ou melhor), aí xx:07 @630
Concluindo, não importa de onde o internauta esteja navegando, o horário mundial .BEAT é
sempre o mesmo.

Para converter o horário local em BEAT, é necessário saber o fuso horário do local em
relação à Biel. No horário de Brasilia, estamos a -3 horas em relação a Biel. Não podemos
esquecer que, no horário de verão, a diferença aumenta para -4 horas.

Se soubermos quantos segundos se passaram das 0:00 horas até o momento desejado e
adicionarmos as 3 horas de fuso horário (em segundos), e então dividirmos pelo valor de 1
BEAT (86.4 segundos), teremos o horário em BEAT para o horário local desejado.

Observe:

BEAT = ( n_segundos + (3 * 3600)) div 86.4

http://www.learnasp.com http:// www.aspbrasil.com.br


FM www.flavioaraujo.cjb.net ou www10.ewebcity.com/flavioaraujo/fa

Вам также может понравиться