(Parte 2 de 6)

Exemplo Completo1a. Parte

Vamos analisar 3 exemplos de script.O primeiro exemplo (1a. parte) mostra uma tabela parecida com o exemplo de tabelas que foi visto anteriormente, com exceção dos links que aparecerão nas colunas iniciais. Clicando em um dos links o segundo exemplo será chamado e receberá um ID como parâmetro. No segundo exemplo será permitido alterar as informações e após clicar no botão Submit, o exemplo 3 será chamado para processar as informações e atualizá-las no banco em SQL. Vamos por partes...

Exemplo 1

1 <html>2 <head>3 <title>dbfull1.asp</title>4 </head>5 <body bgcolor="#FFFFFF">6 <body bgcolor="#FFFFFF">7 <% 8 ' Conexão com o banco9 set conntemp=server.createobject("adodb.connection")10 conntemp.open "Estudante","Estudante","magic"11 12 set rstemp=conntemp.execute("select * from autores where AU_ID<100")13 qtde_campos=rstemp.fields.count -114 %>15 <table border="1">16 <tr>17 <td valign="top">---</td>18 <% 'Preenche a primeira linha com o nome dos campos19 for i=0 to qtde_campos %>20 <td><b><%=rstemp(i).name %></b></td>21 <% next %>22 </tr>23 <% ' Preenche a tabela com os registros do banco24 do while not rstemp.eof %>25 <tr>26 <td valign="top"><a HREF="dbfull2.asp?str_ID=<%=rstemp("AU_ID")%>">Editar</a></td>27 <% for i = 0 to qtde_campos%>28 <td valign="top"><% = rstemp.fields(i).value %></td>29 <% next %>30 </tr>31 <% rstemp.movenext32 loop33 conntemp.close%>34 </table>35 </body>36 </html>

Exemplo 2 (2a. Parte)

1 <html>2 <head>3 <title>dbfull2.asp</title>4 </head>5 <body bgcolor="#FFFFFF">6 </body>7 </html>8 <html>9 <% ' Conecta com o banco e pega o valor do str_ID permitindo a edicao do registro10 set conntemp=server.createobject("adodb.connection")11 conntemp.open "Estudante","Estudante","magic"12 13 ID=request.querystring("str_ID")14 sqltemp="select * from autores where AU_ID=" & ID15 set rstemp=conntemp.execute(sqltemp)16 atual_ID=rstemp("AU_ID")17 atual_nome=rstemp("autor")18 atual_ano_nasc=rstemp("ano_nasc")19 %>20 <body>21 <form name="meu_autor" action="dbfull3.asp" method="GET">22 <p>ID: <input type="TEXT" name="id" value="<%=atual_id%>"></p>23 <p> Nome do autor: <input type="TEXT" name="nome" value="<%=atual_nome%>"></p>24 <p> Ano de Nascimento: <input type="TEXT" name="ano" value="<%=atual_ano_nasc%>"></p>25 <p> <input type="SUBMIT"> </p>26 </form>27 </body>

Exemplo 3 (3a. Parte)

1 <HTML><HEAD>2 <TITLE>dbfull3.asp</TITLE>3 <body bgcolor="#FFFFFF"></HEAD>4 <%5 on error resume next6 au_nome=request.querystring("nome")7 ' Corrige os apóstrofos8 au_nome=Replace(au_nome, "'", "''") 9 10 au_ano=request.querystring("ano")11 au_ID=request.querystring("ID")12 Set Conn = Server.CreateObject("ADODB.Connection")13 conn.open "Estudante","Estudante","magic"14 15 SQLstmt = "UPDATE autores "16 SQLStmt = SQLstmt & "SET autor='" & au_nome & "',"17 SQLstmt = SQLstmt & "ano_nasc=" & au_ano 18 SQLStmt = SQLStmt & " WHERE AU_ID=" & au_ID 19 Set RS = Conn.Execute(SQLStmt)20 If err.number>0 then21 response.write "Ocorreram erros no script:" & "<P>"22 response.write "Número=" & err.number & "<P>"23 response.write "Descrição=" & err.description & "<P>"24 response.write "Help Context=" & err.helpcontext & "<P>" 25 response.write "Help Path=" & err.helppath & "<P>"26 response.write "Native Error=" & err.nativeerror & "<P>"27 response.write "Source=" & err.source & "<P>"28 response.write "SQLState=" & err.sqlstate & "<P>"29 else30 response.write "Nenhum problema aconteceu!" & "<P>"31 end if32 IF conn.errors.count> 0 then33 response.write "Ocorreram erros com o banco de dados" & "<P>"34 response.write SQLstmt & "<P>"35 for counter= 0 to conn.errors.count36 response.write "Número do erro:" & conn.errors(counter).number & "<P>"37 response.write "Descrição --> " & conn.errors(counter).description & "<P>"38 next39 else40 response.write "Parece que tudo está ok. O Autor foi atualizado!" & "<P>"41 end if42 Conn.Close43 %>44 </BODY>45 </HTML>

List Boxes

Esta página mostra a funcionalidade de mostrar uma list box através de uma consulta SQL. O exemplo abaixo é o mais simples possível. Existem outros tipos utilizando Múltiplas List Boxes e Modularidade. Os exemplos utilizam um DSN, mas você pode executá-los sem.

1 <html><head>2 <TITLE>dblist.asp</TITLE>3 </head><body bgcolor="#FFFFFF">4 <% 5 ' Conexão com o Database6 set conntemp=server.createobject("adodb.connection")7 ' DSN usuário senha8 conntemp.open "Estudante","Estudante","magic"9 set rstemp=conntemp.execute("select autor from autores where AU_ID<100")10 %>11 <Form>12 <Select>13 <% ' Loop para preencher os nomes14 do while not rstemp.eof %>15 <option> <%=RStemp(0)%> </option>16 <% rstemp.movenext17 loop18 conntemp.close%>19 </Select>20 </form>21 </BODY>22 </HTML>

Adicionando Registros com o método ADO Add New

1 <TITLE>dbnewADO.asp</TITLE>2 <body bgcolor="#FFFFFF">3 <HTML>4 <%5 on error resume next6 aunome=request.querystring("nome")7 auano=request.querystring("ano")8 auID=request.querystring("ID")9 Set Conn = Server.CreateObject("ADODB.Connection")10 ' DSN usuário senha11 conn.open "Estudante","Estudante","magic"12 Set RS = Server.CreateObject("ADODB.Recordset")13 RS.Open "autores",Conn,3,314 RS.AddNew15 RS("AU_ID")=auid16 RS("autor") = aunome17 RS("ano_nasc")= int(auano)18 RS.Update19 RS.Close20 Conn.Close21 If err.number>0 then22 response.write "Ocorreram Erros:" & "<P>"23 response.write "Número=" & err.number & "<P>"24 response.write "Descrição=" & err.description & "<P>"25 response.write "Help Context=" & err.helpcontext & "<P>" 26 response.write "Help Path=" & err.helppath & "<P>"27 response.write "Native Error=" & err.nativeerror & "<P>"28 response.write "Source=" & err.source & "<P>"29 response.write "SQLState=" & err.sqlstate & "<P>"30 else31 response.write "Nenhum erro apareceu!" & "<P>"32 end if33 IF conn.errors.count> 0 then34 response.write "Ocorreram erros no Database!" & "<P>"35 for counter= 0 to conn.errors.count36 response.write "Número " & conn.errors(counter).number & "<P>"37 response.write "Descrição -> " & conn.errors(counter).description & "<P>"38 next39 else40 response.write "Nenhum ocorreu no Database!" & "<P>"41 end if42 %>43 </BODY>44 </HTML>

Adicionando Registros com Statement SQL

Esta página demonstra como adicionar registros em um Database com um statement sql. Para melhor entender o exemplo, suponha que a página chamada seja: http://www.geap.com.br/tutorial_asp/asp_dbnewSQL.asp?nome="Alexandre Barreto"&id=9000&ano=1974

1 <TITLE>dbnewrecSQL.asp</TITLE>2 <body bgcolor="#FFFFFF">3 <HTML>4 <%5 on error resume next6 aunome=request.querystring("nome")7 auano=request.querystring("ano")8 auID=request.querystring("ID")9 Set Conn = Server.CreateObject("ADODB.Connection")10 ' DSN usuário senha11 conn.open "Estudante","Estudante","magic"12 SQLStmt = "INSERT INTO autors (AU_ID,autor,ano_nasc) "13 SQLStmt = SQLStmt & "VALUES (" & auid 14 SQLStmt = SQLStmt & ",'" & aunome & "'"15 SQLStmt = SQLStmt & "," & int(auano) & ")"16 Set RS = Conn.Execute(SQLStmt)17 If err.number>0 then18 response.write "Ocorreram Erros:" & "<P>"19 response.write "Erro Número=" & err.number & "<P>"20 response.write "Descrição=" & err.description & "<P>"21 response.write "Help Context=" & err.helpcontext & "<P>" 22 response.write "Help Path=" & err.helppath & "<P>"23 response.write "Native Error=" & err.nativeerror & "<P>"24 response.write "Source=" & err.source & "<P>"25 response.write "SQLState=" & err.sqlstate & "<P>"26 else27 response.write "Não ocorreram erros!!" & "<P>"28 end if29 IF conn.errors.count> 0 then30 response.write "Ocorreram erros no Database" & "<P>"31 for counter= 0 to conn.errors.count32 response.write "Número " & conn.errors(counter).number & "<P>"33 response.write "Descrição -> " & conn.errors(counter).description & "<P>"34 next35 else36 response.write "Não ocorreram erros no Database!" & "<P>"37 end if38 Conn.Close39 %>40 </BODY>41 </HTML>

Abrindo Databases

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 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) ou utilize um componente ASP que implementado no seu script pode fazer mudanças na registry do servidor e criar o DSN necessário. Esses componentes são de terceiros e podem ser encontrados em sites especializados em ASP.

Conexões via DSN geralmente requerem um nome de DSN, um usuário e uma senha. Abaixo temos o código que abre um banco com DSN igual a "estudante", usuário igual a "estudante" e uma senha igual a "magic". Isso segue o mesmo procedimento realizado nos relatórios do sistema de pagamento.

1 set conntemp=server.createobject("adodb.connection")2 conntemp.open "estudante","estudante","magic"3 set rstemp=conntemp.execute("select * from autor")

O que acontece se não tivermos um DSN? Se você conhece o nome do arquivo (baseado em databases como Access, Paradox, FoxPro, etc.) ou o nome do Data Source (SQLserver por exemplo) tudo pode ser resolvido. 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, mas não é muito segura.

1 set conntemp=server.createobject("adodb.connection")2 cnpath="DBQ=" & server.mappath("sua_tabela.mdb")3 conntemp.Open "DRIVER={Microsoft Access Driver (*.mdb)}; " & cnpath4 set rstemp=conntemp.execute("select * from autor")

Aqui estão os tipos mais comuns de nomes para drives ODBC que você pode precisar:

Para Access --> driver = {Microsoft Access Driver (*.mdb)};Para SQL -----> driver = SQL Server;

Tabela com consulta SQL

Esta página demonstra a utilização de tabela construída a partir de uma consulta SQL.

1 <TITLE>dbtable.asp</TITLE>2 <body bgcolor="#FFFFFF">3 <% 4 ' Programa ASP que se comunica com um database5 set conntemp=server.createobject("adodb.connection")6 ' DSN, usuário e senha7 conntemp.open "Student","student","magic"8 set rstemp=conntemp.execute("select * from authors where AU_ID<100")9 qtde_campos=rstemp.fields.count -110 %>11 <table border=1>12 <tr>13 <% 'Coloca o cabeçalho de cada coluna com o nome do campo14 for i=0 to qtde_campos %>15 <td><b><%=rstemp(i).name %></B></TD>16 <% next %>17 </tr>18 <% ' Preenche a tabela com os registros19 do while not rstemp.eof %>20 <tr>21 <% for i = 0 to qtde_campos%>22 <td valign=top><% = rstemp.fields(i).value %></td>23 <% next %>24 </tr>25 <% rstemp.movenext26 loop27 conntemp.close%>28 </table>29 </BODY>30 </HTML>

Atualizando Registros

Esta página demonstra a funcionalidade de se atualizar registros em um database através de uma consulta SQL. Supomos que o arquivo ASP seja chamado da seguinte forma:dbupdate.asp?nome=Alexandre&id=9000&ano=1901

O script abaixo faz uma atualização no sql através do statement Update. É aconselhável que todas as inclusões, alterações e exclusões no sql seja feita através de Stored Procedures. Assim, fica mais fácil controlar permissões de execução e segurança ainda maior com relação aos códigos.

1 <TITLE>dbupdate.asp</TITLE>2 <body bgcolor="#FFFFFF">3 <HTML>4 <%5 on error resume next6 aunome=request.querystring("nome")7 auano=request.querystring("ano")8 auID=request.querystring("ID")9 Set Conn = Server.CreateObject("ADODB.Connection")10 conn.open "Estudante","Estudante","magic"11 12 SQLstmt = "UPDATE autores "13 SQLStmt = SQLstmt & "SET autor='" & aunome & "',"14 SQLstmt = SQLstmt & "ano_nasc=" & auano 15 SQLStmt = SQLStmt & " WHERE AU_ID=" & auid 16 Set RS = Conn.Execute(SQLStmt)17 If err.number>0 then18 response.write "Ocorreram erros no Script:" & "<P>"19 response.write "Número =" & err.number & "<P>"20 response.write "Descrição =" & err.description & "<P>"21 response.write "Help Context=" & err.helpcontext & "<P>" 22 response.write "Help Path=" & err.helppath & "<P>"23 response.write "Native Error=" & err.nativeerror & "<P>"24 response.write "Source=" & err.source & "<P>"25 response.write "SQLState=" & err.sqlstate & "<P>"26 else27 response.write "Nenhum problema aconteceu!" & "<P>"28 end if29 IF conn.errors.count> 0 then30 response.write "Ocorreram erros com o Database" & "<P>"31 for counter= 0 to conn.errors.count32 response.write "Número " & conn.errors(counter).number & "<P>"33 response.write "Descrição -> " & conn.errors(counter).description & "<P>"34 next35 else36 response.write "Tudo parece ok. O Autor foi atualizado!" & "<P>"37 end if38 Conn.Close39 %>40 </BODY>41 </HTML>

Do While

Para revisar, quando falamos de estruturas de controle significa instruções que fazem com que o programa rode em outra ordem que não seja a linha 1, linha 2, linha 3 etc.IF...Then e Select Case fazem com que linhas do código sejam executadas e outras não. Call e GoTo fazem com que o programa vá para outra localização no código. As estruturas de Loop fazem com que alguns comandos sejam repetidos. As estruturas de Loop possuem duas opções: For...Next e Do While ... Loop. Se você conhecer a quantidade de repetições que devem ser realizadas, utilize o comando FOR...NEXT, caso não saiba, utilize a estrutura Do While...Loop.

Todas as linhas de código dentro dos comandos DO WHILE e LOOP serão repetidas várias vezes até que o teste que vem depois do WHILE seja falso. Assim as repetições param e o programa passa para o código seguinte ao LOOP.

Sintaxe:

DO WHILE condiçãolinhas de códigoLOOP

Existe a possibilidade do Loop nunca acabar. Então se previna usando um IF para terminar, como:

contador=1contador = contador +1If contador>100 thenexit doEnd If

Exemplo 1:

1 <html><head>2 <title>DoLoop2.asp</title>3 <body bgcolor="#FFFFFF"></head>4 <p>DoLoop2.asp Exemplo<br>5 Faz com que o programa imprima somente a quantidade de meses.</p>6 <p>7 <P>8 <%9 contador = 110 mes_atual = month(now())11 Do while contador < mes_atual + 112 response.write "Número do Mês = " & contador & " "13 response.write "______________________________" & "<BR><br>"14 If contador >13 then15 exit do16 end if17 contador = contador+118 Loop19 %>20 <hr></body></html>

Exemplo 2:

1 <html><head>2 <title>DoLoop3.asp</title>3 </head><body bgcolor="#FFFFFF">4 <form action="DoLoopBack.asp" method = post>5 <p>DoLoop3 Exemplo<br>6 instead of form to print, make form for electronic submission</p>7 <p></p> 8 <%9 contador = 110 mes_atual = month(now())11 Do while contador < mes_atual + 112 response.write "Número do mês " & contador & " "13 TempTextField = "<input type = " & chr(34) & "text" & chr(34)14 TempTextField = TempTextField & "name=" & chr(34) & contador & chr(34)15 TempTextField = TempTextField & ">" 16 response.write TempTextField & "<br><br>"17 If contador >13 then18 exit do19 end if20 contador = contador+121 Loop22 %>23 <input type=submit>24 </form><hr></body></html>

For Next

O Loop com o número inicial e vai até o número final. Como foi colocado anteriormente, o FOR...NEXT é para ser usado quando se sabe a quantidade de repetições que devem ser feitas.

Sintaxe:

For contador = inicio to fim'linhas de códigoNext

Para que seu loop não seja infinito você pode colocar um IF para pará-lo, como:

If contador>100 thenexit ForEnd If

Exemplo:

1 <html><head>2 <title>fornext.asp</title>3 <body bgcolor="#FFFFFF"></head>4 5 exemplo<br>Espere e veja o funcionamento do for...next<br>6 <%for contador = 1 to 57 response.write "estamos no looping" & "<br>"8 next%><hr>9 10 exemplo 2<br>Você pode usar a variável contador no seu código<br>11 <%for contador = 1 to 512 response.write "Agora o número de loops aparecem " & contador & "<br>"13 next%><hr>14 15 exemplo 3<br>Você pode dar passos maiores que 1<br>16 <%for contador = 0 to 25 step 517 response.write "Agora o número do loop é: " & contador & "<br>"18 next%><hr>19 20 exemplo 4<br>Você não precisa começar do 1<br>21 <%for contador = 25 to 50 step 522 response.write "Agora o número do loop é: " & contador & "<br>"23 next%><hr>24 25 exemplo 5<br>26 (mude os passos para negativo e tenha certeza do início ser maior que o fim)<br>27 <%for contador = 50 to 25 step -528 response.write "Agora o número do loop é: " & contador & "<br>"29 next%><hr>30 </body></html>

Formatando Datas

A maneira mais fácil de demonstrar a formatação de datas é mostrar um código exemplo com várias permutações do comando.

FormatDateTime(Data[,Formato_do_nome])

A função FormatDateTime tem as seguintes partes:

Parte

Descrição

Data

Obrigatório.Data que será formatada

Formato_do_nome

Opcional. Valor numérico que indica o formato date/time que será usado. Se for omitido, o formado vbGeneralDate será usado.

Parâmetros

O argumento Formato_do_nome tem o seguinte domínio:

Constante

Valor

Descrição

vbGeneralDate

0

Mostra a data e/ou hora. Se houver uma data, mostrará como short date. Se for hora, mostrará como long time. Se houver data e hora ambas serão mostradas.

vbLongDate

1

Mostra a data usando o formato long date especificado nas Configurações Regionais do Painel de Controle

vbShortDate

2

Mostra a data usando o formato short date especificado nas Configurações Regionais do Painel de Controle.

vbLongTime

3

Mostra a hora usando o formato especificado nas Configurações Regionais do Painel de Controle.

vbShortTime

4

Mostra a hora usando o formato 24-horas (hh:mm).

1 <html><head>2 <title>formatdates.asp</title>3 </head><body bgcolor="#FFFFFF"><html>4 <%'ASP que formata data5 response.write "<hr>"6 for counter=0 to 47 currentdate=now()8 response.write "today is..." & "<br>"9 response.write currentdate & "<P>"10 select case counter11 case 012 whichformat="vbgeneraldate"13 case 114 whichformat="vblongdate"15 case 216 whichformat="vbshortdate"17 case 318 whichformat="vblongtime"19 case 420 whichformat="vbshorttime"21 end select22 response.write "FormatDate(now()," & whichformat & ")="23 response.write Formatdatetime(currentdate,counter) & "<P><HR>"24 next%>25 </body></html>

FormatNumber - Referência

Frequentemente você quer que o número apareça em um determinado formado. A função FormatNumber formata o número e retorna em um específico formato.

Sintaxe: FormatNumber(expression, iDigits, bleadingDigit, bParen, bGroupDigits)

Argumento

Significado

expression

variável que contém o número

iDigits

número de dígitos depois da casa decimal

bleadingDigit

1 para mostrar os zeros antes da vírgula0 para não mostrar os zeros antes da vírgula

bParen

1 para parêntesis ao redor de números negativos0 para não ter parêntesis ao redor de números negativos

bGroupDigits

1 para mostrar o número de acordo com as Configurações Regionais do Painel de Controle0 para ignorar as configurações do Painel de Controle

Exemplo:

1 <html><head>2 <TITLE>formatnumbers.asp</TITLE>3 </head><body bgcolor="#FFFFFF">4 <% 5 ' Exemplo de formatação de números6 mynumber=123.45677 response.write "<hr>" & mynumber & "<br>"8 response.write "formatnumber(mynumber,0)" & "<br>"9 response.write formatnumber(mynumber,0) & "<hr>"10 response.write "formatnumber(mynumber,2)" & "<br>"11 response.write formatnumber(mynumber,2) & "<hr>"12 response.write "formatnumber(mynumber,6)" & "<br>"13 response.write formatnumber(mynumber,6) & "<hr>"14 15 mynumber=.456716 response.write mynumber & "<br>"17 '0 significa não mostrar os zeros antes da virgula18 response.write "formatnumber(mynumber,2,0)" & "<br>"19 response.write formatnumber(mynumber,2,0) & "<hr>"20 '1 significa mostrar os zeros antes da virgula21 'response.write "formatnumber(mynumber,2,1)" & "<br>"22 'response.write formatnumber(mynumber,2,1) & "<hr>"23 24 'mynumber=-123.456725 'response.write mynumber & "<br>"26 '0 não mostra os parêntesis para números negativos27 'response.write "formatnumber(mynumber,2,0,0)" & "<br>"28 'response.write formatnumber(mynumber,2,0,0) & "<hr>"29 '1 mostra os parêntesis para números negativos30 'response.write "formatnumber(mynumber,2,0,1)" & "<br>"31 'response.write formatnumber(mynumber,2,0,1) & "<hr>"32 %>33 </body></html>

Formulários

Formulários HTML são geralmente o "front end" de um script asp. A divisão abaixo facilitará o apredizado.

(Parte 2 de 6)

Comentários