Você está na página 1de 730

Sumrio

CRIANDO SITES
DINMICOS COM

ASP 3.0
Jlio Battisti

Criando Sites Dinmicos com ASP 3.0

Copyright 2000 by Jlio Battisti


Copyright 2000 by Axcel Books do Brasil Editora Ltda.
Nenhuma parte desta publicao poder ser reproduzida sem autorizao
prvia e escrita de Axcel Books do Brasil Editora.
Editora de Produo: Gisella Narcisi
Editor Responsvel: Ricardo Reinprecht

Criando Sites Dinmicos com ASP 3.0


Jlio Battisti
ISBN: 85-7323-141-6

Suporte Tcnico ao Leitor


Limite de garantia: Nosso suporte tcnico limita-se ao contedo especfico do livro,
e no a questes gerais referentes ao(s) software(s) descrito(s), cessando caso esta
publicao tenha sido esgotada. Para obter esse suporte tcnico especfico,
o leitor deve informar ttulo, autor e pgina, somente via e-mail.
Todos os originais de livros enviados para avaliao pela Editora sero destrudos,
caso no sejam aprovados. No ser feita sua devoluo em nenhuma hiptese.
Os conceitos emitidos nesta obra so de inteira responsabilidade do Autor.

E-mail:
editora@axcel.com.br
Visite nossa Home Page
http://www.axcel.com.br

Axcel Books do Brasil Editora


Av. Paris, 571 Bonsucesso
21041-020 Rio de Janeiro RJ
Tel. (21) 2564-0085

II

Sumrio

Crditos
Produo
Alexandre Ramires
Carlos Alberto S Ferreira

Reviso
Vanessa Garcia

Arte e Diagramao
Ingo Bertelli

Supervisor de Produo
Carlos Alberto S Ferreira

Capa
Ingo Bertelli

Editora de Produo
Gisella Narcisi

Editor Responsvel
Ricardo Reinprecht

III

Criando Sites Dinmicos com ASP 3.0

Agradecimentos
Embora este seja o meu segundo livro, a emoo e a satisfao de concluir mais esse trabalho
talvez at maior do que no lanamento do primeiro. Foram meses de trabalho rduo,
escrevendo captulos entre uma viagem e outra. Felizmente conseguimos concluir esse livro
no tempo estimado. E o principal que saiu conforme o planejado. Penso que esse livro pode
ajudar bastante aqueles que querem aprender a tecnologia ASP, e at mesmo programadores
mais experientes.
No entanto, um trabalho como este no pode ser realizado sem que vrias pessoas contribuam,
formando uma verdadeira equipe. Devo citar e agradecer, mais uma vez, a pacincia, o amor, a
dedicao e o apoio de minha esposa Lu, diante de mais este desafio. Sei que no foi fcil ficar ao
meu lado, um final de semana aps o outro, apenas escutando o barulho das teclas do computador.
Sem o seu apoio e compreenso, tudo seria muito mais difcil, para no dizer impossvel. Prometo
que o prximo trabalho ter somente umas 200 pginas.
Gostaria tambm de agradecer o amor e apoio da minha me Dona Lucy. Pessoa que sempre
me incentivou, apoiou, acreditou no meu trabalho e fez despertar em mim o amor pelos
livros. Me, mais uma vez agradeo por tudo o que fizestes e continuas fazendo por mim.
Agradeo mais do que tudo, o amor que sempre me deste, fazendo com que eu crescesse com
a certeza de estar sendo amado e querido.
Tambm quero agradecer a equipe da Axcel Books, pela sua pacincia em corrigir e revisar
mais este trabalho, sempre com sugestes para a melhoria do mesmo, de tal forma que o
amigo leitor possa obter uma obra de qualidade.
Devo citar ainda minhas irms: Rose, Lacy e Sandra que sempre renovam minhas foras com
seus elogios sinceros e verdadeiros. Os momentos que passamos juntos, embora poucos, so
verdadeiros e profundos. Uma simples conversa, um almoo, um passeio; so momentos de
parada e reflexo. Momentos que nos mostram o quanto a vida vale a pena. Espero podermos
passar mais tempo juntos.

IV

Sumrio

Sobre o Autor
Jlio Battisti profissional certificado da Microsoft, tendo sido aprovado em 16 Exames da
Microsoft, com os quais obteve certificaes como: MCP, MCP+I, MCSE, MCSE+I e MCDBA.
Gerente de rede na Secretaria da Receita Federal, e conhece a tecnologia ASP desde sua
primeira verso. Tambm autor de artigos de informtica e trabalha com o desenvolvimento
e administrao de Web sites. Autor do livro: Srie Curso Bsico & Rpido Microsoft Windows
2000 Server, publicado pela Editora Axcel Books. Atua como instrutor de cursos de
informtica na Secretaria da Receita Federal, em outros cursos particulares e tambm para
turmas em Universidades.

Criando Sites Dinmicos com ASP 3.0

VI

Sumrio

Sumrio
Introduo ........................................................................................................................................ 1
Sites Dinmicos com ASP 3.0 ......................................................................................................... 1
Equipamento e Software Necessrio ............................................................................................... 3
Instalando e Testando o IIS 5.0 ........................................................................................................ 4
Novidades e Melhorias do IIS 5.0 .................................................................................................. 10
Administrao e Servios .............................................................................................................. 11
Desenvolvimento de Aplicaes Internet/Intranet ................................................................. 12
Hora de Comear ......................................................................................................................... 13
Viso Geral dos Captulos do Livro ........................................................................................ 13
Ento, Mos obra ............................................................................................................... 14
Captulo 1 Uma Introduo Tecnologia ASP ......................................................................... 15
Era uma Vez uma Internet com Contedo Esttico ....................................................................... 16
Um Comeo Quase sem Querer .............................................................................................. 16
Uma Viso Geral da Internet e de Seus Elementos ................................................................ 17
Contedo Dinmico na Internet .................................................................................................... 19
A Era do Comrcio Eletrnico ....................................................................................................... 23
Aplicaes Para a Web ................................................................................................................... 29
A Complexidade de Gerenciamento do Modelo
Cliente/Servidor e Aplicaes em Duas Camadas .................................................................. 29
Aplicaes em Duas Camadas ................................................................................................ 30
Aplicaes em Trs Camadas ................................................................................................. 31
Aplicaes em Quatro Camadas ............................................................................................. 33
Questes a Considerarmos nos Modelos em Trs ou Mais Camadas .................................... 34
O que ASP? .................................................................................................................................. 35
Preparando o Servidor Para Acompanhar os Exemplos ................................................................ 37
Criando a Estrutura de Pastas e Subpastas ............................................................................. 37
Tornando a Pasta Livro Parte dos Servidor IIS ....................................................................... 38
Alguns Exemplos Prticos ...................................................................................................... 44
O Tradicional Hello World ................................................................................................... 44
Um Exemplo de Pgina Dinmica .......................................................................................... 48
Captulo 2 Uma Introduo ao VBScript .................................................................................. 53
Introduo ...................................................................................................................................... 54
O que VBScript ............................................................................................................................ 54
Uma Reviso Rpida de HTML...................................................................................................... 56
Estrutura Bsica de uma Pgina HTML .................................................................................. 56
Tags Para a Criao de Formulrios HTML ............................................................................. 60
Criando o Formulrio a tag <FORM> </FORM> ....................................................... 60
Criando uma Caixa de Texto a Tag <INPUT TYPE=TEXT> ................................... 62
Criando uma Caixa de Texto Para a Digitao
de Senhas a tag <INPUT TYPE=PASSWORD> ....................................................... 64
Criando um Check Box a tag <INPUT TYPE=CHECKBOX> ............................... 66

VII

Criando Sites Dinmicos com ASP 3.0

Criando um Conjunto de Radio Buttons a tag <INPUT TYPE=RADIO> ............ 68


Criando um Campo Para Digitao de Comentrios
e Textos Maiores a tag <TEXTAREA> </TEXTAREA> .............................................. 70
Criando uma Lista de Opes (Caixa de Combinao) a tag
<SELECT></SELECT> em Combinao com <OPTION></OPTION> .................... 72
Finalizando o Formulrio com os Botes Enviar Dados e Limpar Dados
as Tags <INPUT TYPE=SUBMIT> e <INPUT TYPE=CLEAR> ......................... 75
Declarao e Utilizao de Variveis no VBScript ........................................................................ 78
O que uma Varivel ? ........................................................................................................... 78
Inserindo Cdigo VBScript ..................................................................................................... 78
Declarao e Tipo de Varivel .............................................................................................. 79
Fazendo Clculos e Comparaes com o VBScript Operadores ................................................ 83
Fazendo Clculos com os Operadores Aritmticos ................................................................ 83
Comparando Valores com os Operadores de Comparao .................................................... 87
O Escopo das Variveis, no VBScript ............................................................................................ 91
Estruturas Para Controle de Fluxo em VBScript ........................................................................... 95
Estruturas de Deciso .............................................................................................................. 95
A Estrutura If...Then ........................................................................................................ 96
A Estrutura If...Then...Else ............................................................................................... 96
A Estrutura If...Then...ElseIf...Else ................................................................................... 97
A Estrutura Select...Case .................................................................................................. 99
Estruturas de Repetio ........................................................................................................ 100
A Estrutura For...Next ..................................................................................................... 100
A Estrutura Do...Loop ..................................................................................................... 102
A Estrutura Do While Condio...Loop ......................................................................... 102
A Estrutura Do... Loop While Condio ........................................................................ 103
A Estrutura Do Until Condio...Loop .......................................................................... 106
A Estrutura Do... Loop Until Condio ......................................................................... 107
Concluso ..................................................................................................................................... 110
Captulo 3 Funes, Procedimentos e Eventos com VBScript ................................................ 111
Tipos de Dados e Funes Para Converso de Tipos ................................................................... 112
Determinando o Tipo de Dados Contido em uma Varivel .................................................. 112
A Funo IsArray ............................................................................................................ 113
A Funo VarType ........................................................................................................... 115
A Funo IsDate .............................................................................................................. 118
A Funo IsEmpty .......................................................................................................... 121
A Funo IsNull .............................................................................................................. 122
A Funo IsNumeric ....................................................................................................... 124
A Funo IsObject .......................................................................................................... 125
Funes Para Converso de Tipos ......................................................................................... 127
Funo Cbool .................................................................................................................. 127
Funo CByte .................................................................................................................. 128
Funo CCur ................................................................................................................... 129
Funo CDate .................................................................................................................. 130
Funo CDbl ................................................................................................................... 131
Funo CInt .................................................................................................................... 132
Funo CLng ................................................................................................................... 133

VIII

Sumrio

Funo CSng ................................................................................................................... 134


Funo CStr .................................................................................................................... 135
Funes Int e Fix ............................................................................................................ 135
Outras Funes do VBScript Tratamento
de String, Datas e Funes Matemticas ..................................................................................... 136
Funes Para Tratamento de String ...................................................................................... 136
Funo Asc ..................................................................................................................... 136
Funo Chr ..................................................................................................................... 136
Funo Len ..................................................................................................................... 137
Funo LCase .................................................................................................................. 137
Funo UCase ................................................................................................................. 138
Funo Left ..................................................................................................................... 138
Funo Right ................................................................................................................... 138
Funo Mid ..................................................................................................................... 139
Funo String .................................................................................................................. 140
Funes Para Tratamento de Data e Hora ............................................................................. 140
Funo Date .................................................................................................................... 140
Funo Time ................................................................................................................... 141
Funo Day ..................................................................................................................... 141
Funo Month ................................................................................................................. 142
Funo Now .................................................................................................................... 142
Funo MonthName ....................................................................................................... 143
Funo Hour ................................................................................................................... 143
A funo DateDiff ........................................................................................................... 144
A Funo DateAdd ......................................................................................................... 145
Funo Year ..................................................................................................................... 147
Funo WeekDay ............................................................................................................ 147
Funo WeekDayName ................................................................................................... 148
Funes Para Clculos Matemticos ..................................................................................... 149
Criando Suas Prprias Funes e Procedimentos ....................................................................... 151
Criando e Utilizando Sub-rotinas ......................................................................................... 151
Criando e Utilizando Funes ............................................................................................... 154
Trabalhando com Eventos no VBScript ...................................................................................... 157
Principais Eventos dos Objetos do Internet Explorer .......................................................... 159
Concluso ..................................................................................................................................... 167
Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0 .......................................... 169
Introduo .................................................................................................................................... 170
Entendendo e Utilizando ASP ..................................................................................................... 170
Como e Onde uma Pgina ASP Processada? ..................................................................... 171
O que uma Pgina ASP Retorna Para o Navegador do Cliente? ........................................... 172
O que Preciso Para Criar e Acessar Pginas ASP? ............................................................. 175
Objetos do ASP 3.0 ....................................................................................................................... 176
Uma Viso Geral do Modelo de Objetos do ASP 3.0 ............................................................ 177
O Objeto Request.......................................................................................................................... 179
Colees do Objeto Request .................................................................................................. 179
A Coleo Form do Objeto Request .............................................................................. 179
A Coleo QueryString do Objeto Request.................................................................... 186

IX

Criando Sites Dinmicos com ASP 3.0

Alguns Campos que Merecem Consideraes Especiais .............................................. 189


A Coleo ServerVariables do Objeto Request .............................................................. 193
A Coleo Cookies do Objeto Request ........................................................................... 199
A Coleo ClientCertificate do Objeto Request ............................................................. 203
Propriedade do Objeto Request ............................................................................................ 203
Mtodo do Objeto Request .................................................................................................... 204
O Objeto Response ....................................................................................................................... 206
Coleo do Objeto Response ................................................................................................. 206
Propriedades do Objeto Response ........................................................................................ 211
A Propriedade Buffer do Objeto Response .................................................................... 211
A Propriedade CacheControl do Objeto Response ........................................................ 212
A Propriedade CharSet do Objeto Response ................................................................. 213
A Propriedade ContentType do Objeto Response ......................................................... 214
A Propriedade Expires do Objeto Response .................................................................. 215
A Propriedade ExpiresAbsolute do Objeto Response ................................................... 216
A Propriedade IsClientConnected do Objeto Response ................................................ 217
A Propriedade PICS do Objeto Response ...................................................................... 218
A Propriedade Status do Objeto Response .................................................................... 219
Mtodos do Objeto Response ................................................................................................ 219
O Mtodo AddHeader do Objeto Response ................................................................... 220
O Mtodo AppendToLog do Objeto Response ............................................................... 220
O Mtodo BinaryWrite do Objeto Response .................................................................. 221
O Mtodo Clear do Objeto Response ............................................................................. 222
O mtodo End do Objeto Response ............................................................................... 223
Comentrios ................................................................................................................... 223
O Mtodo Flush do Objeto Response ............................................................................ 224
O Mtodo Redirect do Objeto Response ........................................................................ 225
O Mtodo Write do Objeto Response ............................................................................. 226
Alguns Exemplos Prticos de Aplicao ..................................................................................... 227
Exemplo 1: Validao dos Dados de um Formulrio ............................................................ 227
Exemplo 2: Formulrio Para Clculo de Imposto ................................................................. 239
Concluso ..................................................................................................................................... 248
Captulo 5 Conectando Pginas ASP com Bancos de Dados .................................................. 249
Uma Reviso dos Conceitos Bsicos de Banco de Dados ........................................................... 251
Entidades e Atributos ............................................................................................................ 251
Chave Primria ...................................................................................................................... 252
Relacionamentos Entre Tabelas ............................................................................................ 253
Relacionamento do Tipo Um Para Um .......................................................................... 254
Relacionamento do Tipo Um Para Vrios ...................................................................... 255
Relacionamento do Tipo Vrios para Vrios ................................................................. 255
Integridade Referencial .................................................................................................. 256
Normalizao de Tabelas ...................................................................................................... 257
Primeira Forma Normal .................................................................................................. 258
Segunda Forma Normal .................................................................................................. 259
Terceira Forma Normal ................................................................................................... 260
Passos Para Projetar um Banco de Dados .............................................................................. 261

Sumrio

Etapas na Estruturao de um Banco de Dados ............................................................ 261


Dicas Para Determinao dos Campos em uma Tabela ................................................. 262
Como Escolher o Campo que Ser a Chave Primria? .................................................. 262
Noes Bsicas da Linguagem SQL Structured Query Language ............................................ 263
Introduo ............................................................................................................................. 263
A Instruo SELECT ............................................................................................................. 264
A Instruo UPDATE ............................................................................................................. 272
A Instruo INSERT .............................................................................................................. 273
A Instruo Delete ................................................................................................................. 274
Uma Viso Geral de ADO e OLE DB ............................................................................................ 275
Um Pouco Sobre ODBC Open Database Conectivity ........................................................ 275
Criando uma Fonte ODBC Para um Banco de Dados do Microsoft Access 97 ............. 276
Criando uma Fonte ODBC Para um Banco de Dados do Microsoft SQL Server 2000 ....... 282
Um Pouco Sobre OLE DB e ADO .......................................................................................... 288
Uma Viso Geral do Modelo de Objetos ADO ............................................................................ 290
O Objeto Connection ................................................................................................................... 292
O Primeiro Exemplo .............................................................................................................. 295
Modificando um Pouco o Nosso Exemplo ............................................................................ 304
Um Pouco Mais Sobre o Objeto Connection ............................................................................... 306
Criando um Formulrio Para Pesquisa ......................................................................................... 311
Criando a Pgina HTML com o Formulrio de Pesquisa ...................................................... 312
Criando a Pgina ASP Para Pesquisar no Banco de Dados .................................................. 313
Concluso ..................................................................................................................................... 318
Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I ................................. 321
Introduo .................................................................................................................................... 322
Estabelecendo Conexes sem a Utilizao de ODBC .................................................................. 323
A Propriedade ConnectionString ................................................................................................. 324
Configurando Conexes com Bancos de Dados do Microsoft Access .......................... 324
Configurando Conexes com Bancos de Dados do Microsoft SQL Server ................... 326
Configurando Conexes com Bancos de Dados ORACLE ............................................. 331
Alguns Detalhes Finais Sobre o Objeto Connection ................................................................... 333
O Mtodo Close ..................................................................................................................... 333
Pool de Conexes ............................................................................................................... 334
O Objeto RecordSet ...................................................................................................................... 335
Cursores .......................................................................................................................... 336
Localizao do Cursor .................................................................................................... 339
Lock de Registros ............................................................................................................ 341
Propriedades do Objeto RecordSet ................................................................................ 343
Mtodos do Objeto RecordSet ........................................................................................ 345
Uma Pgina ASP Para Inserir Informaes no Banco de Dados ................................................. 347
Editando Registros em um Banco de Dados ................................................................................ 361
A Pgina ASP Para Selecionar o Produto a ser Alterado produto.asp .............................. 362
A Pgina que Localiza o Registro do Produto a ser Atualizado localiza.asp ........................... 365
A Pgina que Atualiza os Dados na Tabela Produtos do Banco de
Dados Nwind.mdb Atualiza.asp ........................................................................................ 370
Utilizando o Nosso Exemplo de Alterao de Registro ........................................................ 372
Eliminando Registros de um Banco de Dados ............................................................................ 375

XI

Criando Sites Dinmicos com ASP 3.0

A Pgina ASP Para Excluir o Produto Selecionado Exclui.asp ......................................... 375


Utilizando o Nosso Exemplo de Excluso de Registro ......................................................... 377
A Propriedade Filter do Objeto RecordSet .................................................................................. 380
Concluso ..................................................................................................................................... 385
Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II ................................ 387
O Objeto Command ..................................................................................................................... 389
Um Breve Introduo ao Objeto Command ......................................................................... 389
Os Mtodos do Objeto Command ......................................................................................... 393
As Propriedades do Objeto Command ................................................................................. 393
Consultas Parametrizadas no Microsoft Access ................................................................... 397
O Objeto Parameter ...................................................................................................................... 402
Utilizando o Objeto Command Para Passar Parmetros Para uma Consulta Parametrizada ...... 403
Utilizando o Nosso Exemplo ................................................................................................ 414
Um Desafio Para o Amigo Leitor ........................................................................................... 415
Um Pouco Mais Sobre Pesquisas em Banco de Dados ................................................................ 417
A Utilizao do Operador Like ............................................................................................. 418
A Utilizao de Mltiplos Critrios ...................................................................................... 423
O Operador And ............................................................................................................. 423
O Operador Or ................................................................................................................ 424
Alguns Exemplos de Utilizao de Mltiplos Critrios ....................................................... 424
Utilizando Funes de Agregao ......................................................................................... 426
Alguns Exemplos de Utilizao de Funes de Agregao .................................................. 427
Um Formulrio Genrico Para Pesquisas ..................................................................................... 437
Utilizando o Nosso Formulrio de Pesquisa ......................................................................... 446
Concluso ..................................................................................................................................... 450
Captulo 8 Aplicativos Web e Componentes .......................................................................... 453
Introduo .................................................................................................................................... 454
O que uma Aplicao Web no IIS? ........................................................................................... 454
Uma Aplicao Cliente/Servidor Tradicional ...................................................................... 455
Aplicaes Web um Novo Paradigma ................................................................................ 456
Aplicaes Web no IIS .......................................................................................................... 457
O Arquivo Global.asa ................................................................................................................... 465
Um Aplicativo s Pode ter um Arquivo Global.asa ...................................................... 466
O Objeto Application ................................................................................................................... 468
Eventos do Objeto Application ............................................................................................. 469
Evento Application_OnStart .......................................................................................... 469
Evento Application_OnEnd ........................................................................................... 478
Colees do Objeto Application ........................................................................................... 478
A Coleo Contents ........................................................................................................ 479
A Coleo StaticObjects ................................................................................................. 483
Mtodos do Objeto Application ............................................................................................ 483
O Objeto Session .......................................................................................................................... 486
Eventos do Objeto Session .................................................................................................... 487
O Evento Session_OnStart ............................................................................................. 488
Evento Session_OnEnd .................................................................................................. 496
Colees do Objeto Session .................................................................................................. 496

XII

Sumrio

A Coleo Contents ........................................................................................................ 497


A Coleo StaticObjects ................................................................................................. 501
Mtodos do objeto Session ................................................................................................... 501
Propriedades do Objeto Session ........................................................................................... 503
Concluso ..................................................................................................................................... 506
Captulo 9 Segurana de Aplicaes Web com IIS e ASP ...................................................... 509
Autenticao de Usurios com o IIS 5.0 ..................................................................................... 512
O Acesso Annimo ...................................................................................................................... 512
Como Definir a Conta Para Acesso Annimo no IIS 5.0 ...................................................... 515
Verificando as Configuraes da Conta Para
Acesso Annimo no Windows 2000 Server ......................................................................... 519
Configurando Permisses NTFS em Pastas do Servidor Web .............................................. 525
Sistemas de Arquivos no Windows 2000 e Permisses NTFS ............................................. 526
Definindo Permisses NTFS .......................................................................................... 529
Autenticao Bsica ..................................................................................................................... 539
Autenticao Integrada do Windows ........................................................................................... 540
Autenticao Utilizando Certificados ......................................................................................... 541
Mapeamento do Certificado Cliente ..................................................................................... 541
Configurando o Tipo de Autenticao no IIS .............................................................................. 542
Mais Configuraes de Segurana do IIS .................................................................................... 546
Configurando Opes Gerais de Segurana ......................................................................... 546
Configurao de Segurana Para Aplicativos Web no IIS .................................................... 550
Definindo Restries de Acesso a Nvel de Endereo IP ............................................................ 552
Mecanismos de Segurana do Banco de Dados .......................................................................... 557
Concluso ..................................................................................................................................... 561
Captulo 10 Utilizando Componentes do IIS .......................................................................... 563
Introduo .................................................................................................................................... 564
O Objeto Server ............................................................................................................................ 564
Propriedade do Objeto Server ............................................................................................... 565
Mtodos do Objeto Server ..................................................................................................... 566
O Mtodo CreateObject .................................................................................................. 566
O Mtodo Execute(url) ................................................................................................ 568
Exemplo .............................................................................................................................. 569
O Mtodo GetLastError( ) ............................................................................................... 570
O Mtodo URLEncode(texto) ...................................................................................... 571
O Mtodo MapPath(url) .............................................................................................. 573
O Mtodo Transfer(url) ............................................................................................... 574
O Mtodo HTMLEncode(texto) ................................................................................... 575
Um Exemplo Prtico de Utilizao do Objeto Server ................................................................. 576
Utilizando Componentes do Servidor em Pginas ASP ............................................................. 586
O Componente Content Link ................................................................................................ 586
Criando um Objeto do Tipo Content Link ..................................................................... 588
Mtodos do Objeto Content Link ................................................................................... 588
Um Exemplo que Utiliza o Componente Content Link ................................................ 591
O Componente Ad Rotator .................................................................................................... 596
O Arquivo de Programao da Rotatria ....................................................................... 597

XIII

Criando Sites Dinmicos com ASP 3.0

URL ..................................................................................................................................... 598


Largura ................................................................................................................................ 598
Altura .................................................................................................................................. 598
Borda ................................................................................................................................... 599
URL_anncio ...................................................................................................................... 599
URL_home_page_anncio .................................................................................................. 599
Texto .................................................................................................................................... 599
Impresses .......................................................................................................................... 599
Exemplo .............................................................................................................................. 600
O Arquivo de Redirecionamento ................................................................................... 600
Exemplo .............................................................................................................................. 600
Propriedades do Objeto Ad Rotator ............................................................................... 601
Mtodo do Objeto Ad Rotator ........................................................................................ 602
O Componente Page Counter ................................................................................................ 605
Os Mtodos do Componente Page Counter ................................................................... 606
O Componente Browser Capabilities Capacidades do Navegador ................................... 609
Concluso ..................................................................................................................................... 615
Captulo 11 Os Objetos FileSystemObject, Drive, Folder e File ............................................. 617
Introduo .................................................................................................................................... 618
O Objeto FileSystemObject .......................................................................................................... 618
Propriedade do Objeto FileSystemObject ............................................................................. 619
Mtodos do Objeto FileSystemObject .................................................................................. 620
Mtodos do Objeto FileSystemObject Para Trabalho com Drives ................................. 620
Mtodos do Objeto FileSystemObject Para Trabalho com Pastas ................................. 621
Mtodos do Objeto FileSystemObject Para Trabalho com Arquivos ............................ 628
O Objeto Drive .............................................................................................................................. 634
Propriedades do Objeto Drive ............................................................................................... 634
O Objeto Folder ............................................................................................................................ 637
Propriedades do Objeto Folder .............................................................................................. 638
Mtodos do Objeto Folder ..................................................................................................... 642
O Objeto File ................................................................................................................................ 644
Propriedades do Objeto File .................................................................................................. 644
Mtodos do Objeto File ......................................................................................................... 647
Exemplo Prtico ........................................................................................................................... 649
Concluso ..................................................................................................................................... 652
Captulo 12 Tratamento de Erros, Transaes e Outros Assuntos ......................................... 655
O Objeto ASPError ....................................................................................................................... 657
Propriedades do Objeto ASPError ........................................................................................ 657
Algumas Dicas Para Minimizar Erros .......................................................................................... 658
Erros de Sintaxe .................................................................................................................... 658
Erros de Semntica ou de Tempo de Execuo .................................................................... 659
Erros Lgicos ......................................................................................................................... 661
Algumas Dicas Para Reduzir a Ocorrncia de Erros ............................................................ 662
O Conceito de Transaes e a Utilizao de Transaes em Pginas ASP ................................. 663
O Conceito de Transao ...................................................................................................... 664

XIV

Sumrio

Colocando uma Pgina ASP no Contexto de uma Transao .............................................. 665


Estabelecendo um Script Transacional ................................................................................ 666
Restabelecendo ou Abortando um Script ............................................................................. 667
Gravando Eventos de Transao ........................................................................................... 667
Registrando um Componente no Gerenciador de Servios de Componente ...................... 669
Escopo de Objeto ................................................................................................................... 672
Colocando Transaes em Fila ............................................................................................. 672
Utilizando a Diretiva #include .................................................................................................... 673
As Diretivas @ ............................................................................................................................. 675
A Diretiva de Processamento @CODEPAGE ........................................................................ 676
A Diretiva de Processamento @ENABLESESSIONSTATE .................................................. 677
A Diretiva de Processamento @LANGUAGE ....................................................................... 678
A Diretiva de Processamento @LCID ................................................................................... 678
A Diretiva de Processamento @TRANSACTION ................................................................. 679
Concluso ..................................................................................................................................... 680
Apndice Referncia Rpida da Linguagem VBScript ........................................................... 681
Declarando Variveis com VBScript ............................................................................................ 683
Operadores ................................................................................................................................... 684
Estruturas de Deciso e Laos de Controle em VBScript ............................................................ 685
Estrutura de Deciso If Then Else ........................................................................................ 685
Estrutura de deciso If Then ElseIf ....................................................................................... 686
O Lao For...Next ................................................................................................................... 686
O Lao For Each...Next .......................................................................................................... 686
A Estrutura Select Case...End Select .................................................................................... 686
A Estrutura Do While Condio...Loop ................................................................................ 687
Loop ....................................................................................................................................... 687
A Estrutura Do... Loop While Condio ............................................................................... 688
A Estrutura Do Until Condio...Loop ................................................................................. 689
A Estrutura Do... Loop Until Condio ................................................................................ 690
Comentrios em VBScript ........................................................................................................... 691
Funes no VBScript .................................................................................................................... 692
Funes Para Converso de Valores ............................................................................................. 692
ASC(String) .................................................................................................................... 692
Chr(nmero) ................................................................................................................... 692
CBool(expresso) ............................................................................................................ 692
CByte(expresso) ............................................................................................................ 693
CCur(expresso) ............................................................................................................. 693
CDate(data) ..................................................................................................................... 693
CDbl(data) ....................................................................................................................... 694
CInt(expresso) ............................................................................................................... 694
CLng(expresso) ............................................................................................................. 694
CSng(expresso) ............................................................................................................. 694
CStr(expresso) ............................................................................................................... 695
Fix(expresso) ................................................................................................................. 695
Hex(expresso) ............................................................................................................... 695
Int(expresso) ................................................................................................................. 695

XV

Criando Sites Dinmicos com ASP 3.0

Oct(expresso) ................................................................................................................ 695


Round(expresso,numcasasdecimais) ........................................................................... 695
Sgn(expresso) ................................................................................................................ 696
Funes Para Trabalho com Datas ............................................................................................... 696
Date( ) ............................................................................................................................. 696
DateAdd(intervalo,numerodeintervalos,data) ............................................................... 696
DatePart(intervalo,data) ................................................................................................. 697
DateSerial(ano,ms,dia) ................................................................................................. 698
DateValue(String) ........................................................................................................... 698
Day(data) ........................................................................................................................ 698
Hour(tempo) ................................................................................................................... 698
Minute(tempo) ................................................................................................................ 698
Month(data) .................................................................................................................... 698
MonthName(data) .......................................................................................................... 699
Now( ) ............................................................................................................................. 699
Second(tempo) ............................................................................................................... 699
Time( )............................................................................................................................. 699
TimeSerial(hora,minuto,segundo) ................................................................................. 699
TimeValue(String) .......................................................................................................... 700
WeekDay(data) ................................................................................................................ 700
WeekDayName(nmero) ................................................................................................ 700
Year(data) ........................................................................................................................ 700
Funes Matemticas ................................................................................................................... 700
Atn(nmero) ................................................................................................................... 701
Cos(nmero) ................................................................................................................... 701
Exp(nmero) ................................................................................................................... 701
Log(nmero) ................................................................................................................... 701
Randomize( ) .................................................................................................................. 701
Rnd(nmero) .................................................................................................................. 701
Sin(nmero) ................................................................................................................... 702
Sqr(nmero) ................................................................................................................... 702
Tan(nmero) ................................................................................................................... 702
Funes Para Manipulao de Strings ......................................................................................... 702
FormatCurrency(expresso) ........................................................................................... 702
FormatDateTime(expresso,opo) ................................................................................ 702
FormatNumber(expresso,numdigitos) ......................................................................... 703
FormatPercent(expresso,numdigitos) ........................................................................... 703
InStr(String1,String2) ..................................................................................................... 703
LCase(string) ................................................................................................................... 704
Left(string,nmero) ........................................................................................................ 704
Len(string) ...................................................................................................................... 704
LTrim(string) ................................................................................................................... 704
Mid(string,start,nmero) ................................................................................................ 704
Replace(string,ocorrncia,substituio) ........................................................................ 705
Right(string,nmero) ...................................................................................................... 705
RTrim(string) .................................................................................................................. 705
Space(nmero) ............................................................................................................... 705
StrComp(String1,String2) .............................................................................................. 705

XVI

Sumrio

String(nmero,caractere) ............................................................................................... 706


StrReverse(string) ........................................................................................................... 706
Trim(string) ..................................................................................................................... 706
UCase(string) .................................................................................................................. 706
ndice Remissivo .......................................................................................................................... 707

XVII

Introduo Sites Dinmicos com ASP 3.0

Introduo
Sites Dinmicos
com ASP 3.0

Criando Sites Dinmicos com ASP 3.0

Neste livro vamos abordar diversos assuntos relacionados com a criao de sites dinmicos.
Desta forma, o leitor ter condies de aprofundar os seus conhecimentos em contedos de
grande importncia para a criao de aplicativos para a Web. Iremos apresentar, juntamente
com conceitos tericos, um grande nmero de exemplos e aplicaes prticas em detalhes,
para que o leitor tenha condies de entender com clareza os assuntos abordados.
O trabalho de criar sites e aplicaes para Intranet/Internet tornou-se bastante complexo. O
profissional da Web precisa conhecer um nmero cada vez maior de ferramentas e tecnologias.
A criao de sites, simplesmente atravs da utilizao de pginas HTML, j no capaz de
gerar os resultados necessrios. Hoje, um site na Internet ou na Intranet de uma empresa,
deve apresentar as caractersticas destacadas a seguir:
Gerao dinmica de contedo.
Conexo de pginas com banco de dados.
Personalizao do contedo, de acordo com as preferncias de cada usurio.
Segurana no acesso a reas restritas do site, somente para usurios autorizados e com
nvel de acesso adequado.
Criptografia dos dados transmitidos, ofererecendo garantia de autenticidade e integridade
das informaes, principalmente para sites de Comrcio Eletrnico, onde o usurio deve
digitar informaes importantes, tais como o nmero do carto de crdito.
Servios como envio de mensagens ou grupos de discusso, diretamente atravs do site.
Mecanismos de pesquisa rpidos e precisos.
Layout atraente e funcional, de tal forma que o internauta possa, rapidamente, localizar
o contedo desejado.
Bom contedo e atualizao constante.
Desenvolver um site, que contenha essas caractersticas, no uma tarefa simples. Exige o
uso de diversas tecnologias e ferramentas de apoio, alm, claro, de profissionais competentes
e adequadamente treinados.
Com a utilizao da tecnologia ASP 3.0 Active Server Pages podemos obter bons resultados
na criao de sites com este nvel de complexidade. Ao estudar os captulos deste livro, o
leitor aprender a utilizar essa tecnologia. O aprendizado de ASP simples, principalmente
para quem j conhece o Visual Basic ou o Visual Basic for Applications (linguagem de desenvolvimento para o Microsoft Office). Em vrias situaes, o cdigo bastante semelhante.
A tecnologia est disponvel atravs da utilizao do Internet Information Services 5.0, como
servidor Web, o qual pode ser instalado juntamente com o Windows 2000 Server. Podemos
notar uma mudana no nome do servidor Web da Microsoft. A verso anterior era denominada
Internet Information Server 4.0 IIS 4.0; e a nova, Internet Information Services 5.0 IIS 5.0.

Introduo Sites Dinmicos com ASP 3.0

Observe que o Server foi substitudo por Services. No tpico sobre as novidades do IIS 5.0,
irei explicar o que significa, na prtica, esta mudana.
Durante a instalao do Windows 2000 Server, podemos optar por instalar, ou no, o Internet
Information Services 5.0. Ao longo deste livro estarei utilizando a abreviatura IIS 5.0 (para
manter coerncia com o padro utilizado pela Microsoft no Resource Kit do Windows 2000
Server), ao fazer referncia ao Internet Information Services 5.0. Caso no tenhamos instalado
o IIS 5.0 na instalao do Windows 2000 Server, podemos adicion-lo quando for necessrio.
Para isso, utilizamos o cone Adicionar ou remover programas, no Painel de controle. No
prximo tpico desta introduo, veremos como instalar o IIS 5.0.
importante salientar que o IIS 5.0, somente est disponvel no Windows 2000 Server. Isso
significa que no possvel voc continuar utilizando o Windows NT Server 4.0 (com o qual
est disponvel o IIS 4, atravs da instalao do Option Pack 4.0) e apenas fazer o upgrade do
IIS 4.0 para o IIS 5.0. Tambm importante destacar que as novas caractersticas do ASP 3.0,
somente esto disponveis no IIS 5.0. Em outro tpico desta introduo estarei abordando
essas novas caractersticas.

Equipamento e Software Necessrio


Para acompanhar todos os exemplos propostos no livro, precisamos de um computador com
Windows 2000 Server instalado. Tambm faz-se necessrio que o IIS 5.0 esteja instalado e
corretamente configurado.
A configurao mnima necessria depende de uma srie de fatores.
Se o equipamento vai ser utilizado como um servidor Web na Internet, vrios so os aspectos
a serem considerados, tais como:
Aplicaes implementadas e recursos de hardware necessrios, como memria, disco
e processador.
Nmero estimado de acessos simultneos e dirios, sendo esta uma das estimativas
mais difceis de se obter, uma vez que o sucesso de um site pode ser determinado por
um nmero muito grande de fatores, nem todos de fcil mensurao.
Grau de segurana necessrio desejvel. Neste caso, entram questes como criptografia,
uso de certificados digitais, criao de VPN Virtual Private Networks (Redes Privadas
Virtuais) , procedimentos de recuperao de falha, plano de contingncia, etc.
Percentual de folga desejado para recursos tais como: memria, processador, disco. Ao
projetar um site, bastante comum utilizar hardware que atenda as necessidades atuais
com uma certa folga, para que seja possvel suportar crescimentos maiores do que os

Criando Sites Dinmicos com ASP 3.0

estimados. Alguns sites famosos j enfrentaram problemas de crescimento alm do


esperado. Quando isso acontece, mais recursos de hardware precisam ser adicionados
com o site em funcionamento. a bem conhecida situao de trocar o pneu com o carro
andando. Eu diria que hoje, na velocidade em que as mudanas acontecem, seria um
pouco pior, algo como trocar a turbina com o avio em pleno vo.
Para maiores informaes sobre como planejar a capacidade de hardware para um servidor
Web com o IIS 5.0, consulte o captulo Capacity Planning do livro Internet Information
Services Resource Guide, parte integrante do Windows 2000 Server Resource Kit.
Como equipamento para ser utilizado em casa, ou em um laboratrio de teste na sua empresa,
aconselho a seguinte configurao:
Processador Pentium 200 ou superior.
64 MB de RAM, sendo 128 MB, altamente recomendvel.
2 GB de disco rgido.
Com menos de 64 MB de RAM, o Windows 2000 Server no pode ser instalado. Sendo detectada
memria inferior a 64 MB durante o processo de instalao, o mesmo ser suspenso.
Alm do Windows 2000 Server e do IIS 5.0, tambm precisaremos ter os seguintes programas
e servios instalados, para que possamos acompanhar os exemplos deste livro:
Internet Explorer 4.x (ou superior) ou Netscape Navigator 4.x.
Microsoft Transaction Services (vem junto com o Windows 2000 Server).
Microsoft Index Services (vem junto com o Windows 2000 Server).
Em cada um dos captulos, estaremos apresentando vrios exemplos prticos. Atravs destes
exemplos, voc poder entender melhor a aplicao dos conceitos tericos apresentados. Em
muitas situaes, a melhor maneira de entender um determinado assunto, atravs da
utilizao do mesmo para resoluo de um problema prtico do dia-a-dia. Muitos dos exemplos
apresentados, podem ser facilmente adaptados para uso em aplicaes que voc esteja
desenvolvendo. Situaes como acesso a banco de dados atravs de pginas Web, indexao
e pesquisa de contedos, implementao de mecanismos de segurana, etc., so comuns a
maioria das aplicaes Web atuais. Agora vamos aprender a instalar o IIS 5.0.

Instalando e Testando o IIS 5.0


Caso voc no tenha instalado o IIS 5.0, quando da instalao do Windows 2000 Server,
possvel fazer a instalao quando for necessrio. Agora aprenderemos, passo a passo, a instalar
o IIS 5.0. Nunca demais lembrar que sem o IIS 5.0, no ser possvel testar os exemplos
prticos, propostos neste livro.

Introduo Sites Dinmicos com ASP 3.0

Para instalar o IIS 5.0:


1. Faa o logon no Windows 2000 Server.
2. Abra o Painel de controle (Iniciar/Configuraes/Painel de controle).
3. Abra a opo Adicionar ou remover programas.
4. Surgir a janela indicada na Figura 1.1.

Figura I.1: Janela Adicionar ou remover programas.


5. No lado esquerdo da janela, d um clique na opo Adicionar ou remover componentes
do Windows.
6. Surgir a janela indicada na Figura 1.2.

Figura I.2: Janela para alterar a instalao do Windows.

Criando Sites Dinmicos com ASP 3.0

7. D um clique no boto Componentes.


8. Ser exibida, por breves instantes, uma mensagem Aguarde.... Depois surge a janela
Assistente de componentes do Windows, conforme indicado na Figura 1.3.

Figura I.3: Janela Assistente de componentes do Windows.


9. Utilizando o Assistente de componentes do Windows podemos adicionar novos
servios, ou remover servios que no sejam mais necessrios.
10. V descendo com a barra de rolagem vertical, at localizar o item Internet Information
Services (IIS), conforme indicado na Figura 1.4.
Se esta opo estiver marcada, o IIS 5.0 j est instalado. Neste caso clique no boto Cancelar.
Depois s fechar a janela Adicionar ou remover programas e o Painel de controle.
Se esta opo estiver desmarcada, significa que o IIS 5.0 ainda no foi instalado. Marque esta
opo para instalar este servio.
Observe que ao marcar a opo, o boto Detalhes habilitado. O IIS 5.0 formado por uma
srie de componentes e funcionalidades. Existe um servidor de pginas (servidor HTTP), um
servidor de FTP, um servidor de notcias (NNTP), etc.
Ao instalarmos o IIS 5.0, podemos escolher um ou mais dos seus componentes, dependendo
das necessidades do nosso site. No necessrios que todos os componentes do IIS 5.0 sejam
instalados. Por exemplo, se o servio de cpia de arquivos no for necessrio, no temos
porque instalar o servio de FTP.

Introduo Sites Dinmicos com ASP 3.0

Figura I.4: O servio Internet Information Services (IIS).

DICA
Instale somente os servios realmente necessrios. No uma boa idia instalar todos os servios
disponveis, j que somente alguns sero utilizados. Quanto mais servios instalados, maiores
as possibilidades de ataque e quebra da segurana do site, por parte de um hacker.
11. Clique no boto Detalhes.
12. Na lista de opes disponveis, certifique-se de que somente as seguintes esto marcadas:
Arquivos comuns.
Documentao.
Extenses de servidor do FrontPage 2000.
Gerenciador de Internet Services (HTML).
Servidor File Transfer Protocol (FTP).
Servidor World Wide Web.
Snap-In do Internet Information Services.
13. Observe que, aps ter selecionado os componentes a serem instalados, o Windows
2000 Server, exibe o espao em disco necessrio, conforme indicado pela Figura 1.5.

Criando Sites Dinmicos com ASP 3.0

Figura I.5: Indicao do espao necessrio no disco rgido.


14. D um clique em OK. Voc estar de volta ao Assistente de componentes do Windows.
15. D um clique no boto Avanar para ir para a prxima etapa do assistente.
16. O Windows 2000 Server exibe uma janela indicando o progresso da Instalao, como
na Figura 1.6.

Figura I.6: Progresso da instalao do IIS 5.0.

Introduo Sites Dinmicos com ASP 3.0

17. Caso o Windows 2000 Server no encontre os arquivos necessrios instalao no


disco rgido, voc ser solicitado a inserir o CD de instalao do Windows, conforme
indicado pela Figura 1.7.

Figura I.7: Mensagem solicitando o CD de instalao do Windows.


18. Insira o CD e d um clique em OK. O Windows 2000 Server inicia o processo de cpia
dos arquivos.
19. Aps finalizada a cpia dos arquivos, o Assistente emite uma mensagem dizendo que
o processo foi concludo com sucesso.
20. D um clique no boto Concluir para encerrar o Assistente.
21. Voc estar de volta janela Adicionar ou remover programas. D um clique no boto
Fechar para sair desta janela.
22. Voc estar de volta ao Painel de controle. Feche o Painel de controle.
23. Agora o IIS 5.0 est instalado e pronto para funcionar.

IMPORTANTE
Caso voc no tenha acesso a um computador com o Windows 2000 Server no tem problema.
Voc pode acompanhar a maioria dos exemplos deste livro, utilizando o Windows 2000 Professional. A maneira de instalar o IIS 5.0 exatamente a mesma, quer seja no Windows 2000
Server, ou no Windows 2000 Professional. Para os exemplos mais simples, at mesmo o Personal Web Server, que acompanha o Windows 98, pode ser utilizado. Porm no Personal Web
Server, no existem os conceitos de Transao e segurana disponveis no IIS 5.0.

Agora que j temos o IIS 5.0 instalado, vamos testar se o mesmo est funcionando corretamente.
Para testar se o IIS 5.0 foi instalado com sucesso:
1. Abra o Internet Explorer.
2. Digite o seguinte endereo: http://localhost.

Criando Sites Dinmicos com ASP 3.0

Deve surgir uma janela conforme indicado na Figura 1.8.

Figura I.8: A pgina padro do IIS 5.0, logo aps a instalao.


Esta a pgina inicial padro do IIS 5.0 logo aps a instalao. Isto comprova que o IIS 5.0 foi
instalado com sucesso.
3. Feche o Internet Explorer.
No prximo tpico, irei apresentar as melhorias do IIS 5.0, em relao a verso anterior, IIS
4.0, dentre as quais destaca-se a verso 3.0 do ASP Active Server Pages 3.0, com a qual
estaremos trabalhando neste livro.

Novidades e Melhorias do IIS 5.0


O IIS 5.0 a nova verso do Servidor Web da Microsoft, o qual disponibilizado como um
Servio (conforme indicado pelo nome Services e no mais Server) do Windows 2000 Server.
A verso anterior IIS 4.0 era instalada como parte do Option Pack 4.0, para o Windows NT
Server 4.0. No Windows 2000 Server, o IIS 5.0 faz parte do prprio Sistema Operacional.
Neste tpico, apresentaremos as principais novidades desta nova verso. Para simplificar o
entendimento, classificarei as novidades em duas categorias, conforme descrito abaixo:

10

Introduo Sites Dinmicos com ASP 3.0

Administrao e servios (FTP e HTTP).


Desenvolvimento de aplicaes Internet/Intranet.

Administrao e Servios
Os novos recursos do IIS 5.0 aumentaram a sua estabilidade e segurana. Novos assistentes
foram introduzidos para facilitar as tarefas mais comuns de administrao e segurana. Eis
algumas das novidades:
Reinicializao de download: Agora o servio de FTP capaz de reinicializar um download que tenha sido interrompido, a partir do ponto em que a interrupo ocorreu, isso
evita que tenhamos que comear do zero. Caracterstica de grande utilidade, principalmente para arquivos grandes, uma vez que a velocidade da Internet ainda no
nenhuma maravilha.
Compactao HTTP: Toda a informao, enviada via HTTP, pode ser compactada. Para
arquivos de texto (arquivos com cdigo HTML, por exemplo), o ganho considervel
na maioria dos casos, acima de 70 %. Podemos utilizar compactao tambm com
arquivos de imagens (.jpg, .gif), ou qualquer outro tipo de arquivo transmitido via
HTTP. O browser deve ser capaz de descompactar a informao (Internet Explorer e o
Netscape Navigator em verso 4.x, dentre outros).
Assistentes de segurana: Novos assistentes facilitam a execuo de tarefas relacionadas
com a segurana. Por exemplo, o Assistente de Permisses (Permissions Wizard) facilita
a tarefa de atribuir permisses de acesso de arquivo. Esta era uma tarefa complicada
em verses anteriores, uma vez que a permisso efetiva, depende da combinao entre
as permisses estabelecidas no Sistema Operacional (permisses NTFS) e as do IIS.
Temos tambm um assistente para gerenciar Certificados.
Contabilidade de processos (Process Accounting): Modificaes introduzidas no kernel do Windows 2000 Server, permitem um controle bastante refinado nos processos
que esto rodando. Com isso, pode ser determinado o quanto de processador cada site
virtual est consumindo (lembrando que o IIS admite diversos sites em um nico
servidor). Com isso possvel determinar se um dos sites est consumindo, desproporcionalmente, tempo do processador. Por exemplo, pode ser que uma pgina ASP mal
implementada, esteja elevando a carga no processador. Esta caracterstica tambm pode
ser utilizada por provedores de contedo, os quais hospedam sites de outras empresas,
como um parmetro para a cobrana do servio de hospedagem do site.
Melhor administrao atravs do browser: Administrar o IIS 5.0, remotamente, atravs
do browser ficou bem mais fcil. Alm disso, a maioria das tarefas podem ser executadas
atravs dele, o que no era possvel em verses anteriores. O administrador tambm
pode criar Contas Administrativas (conhecidas como Operadores), com permisses

11

Criando Sites Dinmicos com ASP 3.0

limitadas a determinadas tarefas, por exemplo, criar diretrios virtuais. Com isso
possvel distribuir a administrao do IIS entre diversos Administradores.
Web Distributed Authoring and Versioning (WebDAV): Permite que o autor de pginas, possa
remotamente editar, mover ou eliminar arquivos. Tambm possvel editar as propriedades
de arquivos e diretrios, remotamente, atravs de uma coneco HTTP. Com WebDAV, o
autor est utilizando o HTTP como um protocolo de compartilhamento de arquivo.
Autenticao Digest: Aumenta a segurana e a confiabilidade da autenticao dos usurios.
Com a Autenticao Digest, feito um hash das informaes de senha antes da transmisso.
Informaes ligadas sesso e a hora do sistema so adicionadas ao hash. Com isso, mesmo
que a senha seja interceptada, no poder ser decifrada. Os demais tipos de autenticao
continuam existindo: HTTP Basic, Windows NT Challenge/Response e NTLM authentication (conhecida como integrated Windows authentication).

Desenvolvimento de Aplicaes Internet/Intranet


Muitas melhorias foram feitas nesta rea. Vamos descrever, resumidamente, algumas das novidades.
Proteo das aplicaes: Por padro, todas as aplicaes rodam em um processo comum,
o qual separado do processo do IIS 5.0. Porm possvel rodar aplicaes de maior
importncia (ou que necessitem de maior desempenho) em um processo separado.
Principais novidades para pginas ASP Active Server Pages:
Novos mtodos para o controle de fluxo da aplicao (Server.Transfer,
Server.Execute, etc.).
Melhorias no tratamento de erros. Teremos um captulo deste livro dedicado ao
tratamento de erros em pginas ASP.
Scriptless ASP: Mesmo pginas que contenham somente cdigo HTML podem ter
a extenso .ASP. Com isso pode-se criar toda a estrutura do site utilizando pginas
com a extenso .ASP e adicionar os scripts no momento oportuno.
Integrao com o XML Extensible Markup Language. Ainda no ouviu falar de XML?
O caso srio.
Novas maneiras para detectar as capacidades do browser do cliente.
Melhorias de performance: Capacidade de self-tunning das pginas ASP.
So muitas as novidades do IIS 5.0 e uma das melhores fontes para conhec-las o livro
Internet Information Services Resource Guide (em Ingls), o qual, conforme descrito
anteriormente, faz parte do Windows 2000 Server Resource Kit.

12

Introduo Sites Dinmicos com ASP 3.0

Hora de Comear
Bem, j estamos com o IIS instalado e funcionando, conhecemos as novidades desta verso e
estamos ansiosos para comear a trabalhar com pginas ASP, em sua verso 3.0. Pois
exatamente o que estaremos fazendo deste ponto em diante. Voc aprender a utilizar os
principais recursos do ASP 3.0, podendo criar pginas e aplicaes para Web, com diversos
recursos e funcionalidades.
Abaixo apresento uma pequena descrio do contedo de cada captulo deste livro. Caso
voc esteja iniciando os estudos sobre ASP, aconselho que leia os captulos na seqncia
apresentada. Caso j trabalhe com ASP, sinta-se a vontade para ler os captulos na ordem que
julgar mais adequada. Cada captulo apresenta exemplos completos, os quais ilustram os
conceitos tericos apresentados.
Em todos os exemplos, estou utilizando a linguagem VBScript, devido a sua funcionalidade
e facilidade de aprendizado. Caso o leitor queira utilizar Java Script (agora formalmente ECMA
Script), sinta-se vontade.

Viso Geral dos Captulos do Livro


Captulo 1: Apresentaremos uma viso geral sobre a criao de sites dinmicos, bem
como do desenvolvimento de aplicaes para Internet/Intranet (tambm conhecidas
como aplicaes para a Web). Veremos o que ASP, bem como as tecnologias utilizadas
na criao de aplicaes Web.
Captulo 2: Como em nossos exemplos estaremos utilizando a linguagem VBScript.
Neste captulo sero apresentados os conceitos bsicos desta linguagem, juntamente
com exemplos prticos de utilizao dos conceitos apresentados.
Captulo 3: Apresentaremos aspectos adicionais da linguagem VBScript, aprendendo
a utilizar funes, comandos e outros. Tambm aprenderemos sobre o conceito de
eventos em pginas Web; alm de aprender a criar cdigo a ser executado em resposta
a determinados eventos de uma pgina, como por exemplo o clique em um determinado
boto de comando.
Captulo 4: Neste captulo comearemos a estudar os objetos fornecidos pelo ASP 3.0.
Veremos os diversos mtodos e propriedades de cada objeto, bem como a relao entre
eles. Utilizaremos alguns exemplos prticos para facilitar o entendimento dos conceitos
apresentados.
Captulo 5: Neste captulo aprenderemos a conectar pginas ASP com bancos de dados.
Veremos como criar pesquisas personalizadas, utilizando como critrio de pesquisa,
valores fornecidos pelo cliente, atravs de um formulrio. Trataremos de diversos
mtodos de acesso a bases de dados, desde a utilizao de meios tradicionais, como

13

Criando Sites Dinmicos com ASP 3.0

drivers ODBC, at mtodos mais atuais, como a utilizao de ADO (ActiveX Data Objects) e OLE-DB Providers.
Captulo 6: Neste captulo trataremos de aspectos avanados de conexo de pginas ASP
com bancos de dados. Veremos como implementar pesquisas avanadas, efetuar
atualizaes e alteraes em bancos de dados. Analisaremos algumas situaes usuais do
dia-a-dia. Tambm sero abordados aspectos ligados segurana no acesso s informaes.
Captulo 7: Abordaremos a conexo de pginas ASP com banco de dados. Vamos realizar
um estudo completo do objeto Command e aprender a utiliz-lo para enviar parmetros
para consultas Parametrizadas do Microsoft Access.
Captulo 8: Veremos os conceitos de sesso e estado da conexo. Ser apresentado o
conceito de aplicao Web. Aprenderemos, em detalhes, a utilizar os objetos Application e Session. Tambm aprenderemos sobre a funo e como utilizar o arquivo global.asa.
Captulo 9: Trataremos de aspectos de segurana envolvendo pginas ASP.
Captulo 10: Estudaremos diversos componentes que j vem junto com o IIS e fornecem
funcionalidades adicionais, bastante teis na criao de aplicaes Web.
Captulo 11: Neste captulo faremos um estudo completo sobre um dos objetos mais
complexos do ASP: FileSystemObject. Estudaremos todos os seus mtodos, bem como
os objetos derivados: Drive, Folder e File.
Captulo 12: Neste captulo apresentaremos o objeto ASP Error. Tambm aprenderemos
sobre o conceito de Transaes, alm de aprendermos a utilizar a diretiva #include e
as diretivas @.
Apndice A: Teremos uma listagem dos comandos e funes mais utilizados na
linguagem VBScript, que poder ser usada como uma referncia.

Ento, Mos obra


Bem, feitas as devidas apresentaes, hora de comearmos nossa jornada, rumo ao
aprendizado de ASP. Cabe ressaltar a grande aceitao que vem tendo a tecnologia de Active
Server Pages da Microsoft. Basta observar o grande nmero de sites na Internet que utilizam
esta tecnologia. Tambm grande o nmero de empresas que desenvolvem aplicativos para
sua Intranet, utilizando-se da tecnologia ASP.
Sem a menor sombra de dvidas, a facilidade no aprendizado, aliada aos recursos oferecidos,
que tornaram a tecnologia de pginas ASP largamente difundida e utilizada. Quem j
programa em Visual Basic, ou Visual Basic for Applications, ficar absolutamente vontade
para aprender a tecnologia ASP.
Ento, mos obra, vamos aprender ASP 3.0.

14

Captulo 1 Uma Introduo Tecnologia ASP

Captulo 1
Uma Introduo
Tecnologia ASP

15

Criando Sites Dinmicos com ASP 3.0

A Internet faz parte da vida de um nmero cada vez maior de pessoas. Fazer compras, sem
sair de casa; receber, diretamente no seu computador, as ltimas notcias; comprar e vender
aes; procurar emprego pela rede. Todos so exemplos de facilidades oferecidas pelo uso da
Internet. Talvez seja mais simples enunciar o que no possvel de se fazer pela rede, do que
listar todas suas possibilidades. Mas nem sempre foi assim. Para chegar ao nvel que nos
encontramos hoje, com a disponibilizao dos mais variados servios via Internet, muita
evoluo ocorreu. Desde os tempos de contedo meramente informativo, at a possibilidade
de escutar rdio e fazer compras pela rede, muitas tecnologias novas surgiram. E o ritmo de
evoluo no pra, pelo contrrio, parece acelerar cada vez mais.
Neste captulo veremos um pouco sobre esta evoluo da Internet. Passaremos pelas diversas
fases, desde a criao de sites com contedo esttico, at os aplicativos de n-camadas atuais.
Tambm veremos como a tecnologia ASP, contribui para a criao de sites dinmicos. Com
isso voc ver em que situaes indicada a utilizao de pginas ASP.

Era uma Vez uma Internet com Contedo Esttico


Neste tpico veremos um pouco sobre a histria de Internet e seus conceitos bsicos. Aprenderemos
sobre os diversos elementos envolvidos quando um usurio acessa contedo da Internet. Tambm
veremos as limitaes e problemas dos sites pioneiros que criavam contedo esttico.

Um Comeo Quase sem Querer


Poderamos dizer que a origem da Internet foi casual e despretensiosa. Inicialmente, foi criada
uma rede conhecida como ARPANET, utilizada pelo Departamento de Defesa norte-americano,
alguns fornecedores e pesquisadores ligados a este departamento. Como a ARPANET mostrouse de grande utilidade, facilitando a troca de informaes, acabou expandindo-se de uma
maneira rpida e inesperada. Neste ponto, a idia de uma rede de computadores para a troca
de informaes estava lanada.
Mais tarde, foi criada uma rede baseada nas mesmas tecnologias da ARPANET, porm com uma
abrangncia maior (tanto geogrfica, quanto de objetivos). A idia era trazer os benefcios
demonstrados pela ARPANET, para um nmero maior de pessoas e empresas. Eis que nascia a
Internet. No final da dcada de 80, a Internet j era bastante conhecida nos meios acadmicos do
mundo inteiro. Nesta poca, porm, ainda tnhamos a Internet sem a interface grfica. Normalmente
a troca de informaes era feita por FTP, alguns aplicativos baseados em telnet, ou o popular gopher,
que tornou-se bastante conhecido nos primeiros anos da dcada de 90. O gopher, basicamente, era
um sistema baseado em opes de menu, para divulgao e pesquisa de informaes.
At 1991 era proibido o trfego de qualquer informao comercial pela Internet. Esta proibio
era mantida pela National Science Fundation, entidade que financiou grande parte do
desenvolvimento da Internet nos EUA, at este momento. Com a liberao, as empresas

16

Captulo 1 Uma Introduo Tecnologia ASP

passaram a fazer uso da Internet para fins comerciais. Desde ento a rede expandiu-se
enormemente, atingindo, hoje, milhes de pessoas em todo o mundo.
A popularizao definitiva da rede veio com a criao de uma interface grfica. Com a criao
da linguagem HTML, servidores HTTP, e programas para acessar as pginas HTML
armazenadas nos servidores (tambm conhecidos como browser ou navegadores), a Internet
tornou-se mais popular do que nunca. Este foi o momento do surgimento da WWW World
Wide Web. Talvez a melhor traduo para World Wide Web seja: Teia de Alcance Mundial.
Esta a idia que temos de Internet. Uma rede (teia) que conecta computadores do mundo
inteiro (alcance mundial), proporcionando a troca de informaes e uma infinidade de servios
e facilidades para as empresas e para o cidado comum.
Com certeza, os criadores da ARPANET, e depois da Internet, no imaginavam uma expanso
e popularizao to rpida da rede. Hoje, vemos anncios de sites na televiso, durante o
Telejornal e na transmisso de partidas de futebol. A maioria dos jornais possui um caderno
de informtica, quase totalmente dedicado a assuntos relacionados com a Internet. Vemos
reportagens sobre a rede em todas as revistas, e no somente nas especializadas em Informtica,
que agora dedicam quase a totalidade de suas matrias a assuntos da Internet. Enfim, a Internet
j faz parte do nosso dia-a-dia; veio para ficar e facilitar a nossa vida.
Agora vamos conhecer um pouco mais sobre a Internet e os diversos elementos que a compem.

Uma Viso Geral da Internet e de Seus Elementos


Encontrar uma definio precisa e unnime para a Internet uma tarefa complexa. Vamos
ver os elementos que a compe, sem nos preocuparmos com definies formais. Por exemplo,
o que preciso para que o usurio domstico possa acessar a Internet; onde fica e por onde
circula a informao que est sendo acessada.

Internet

Usurio
Servidor Web
Pginas HTML estticas

Usurio domstico conectado


Internet atravs da linha telefnica.

Figura 1.1: Uma viso geral da Internet, com contedo esttico.

17

Criando Sites Dinmicos com ASP 3.0

Antes de continuar com as explicaes, considere o diagrama indicado na Figura 1.1. Nesta
figura, temos representados os elementos mais comuns da Internet, conforme descrito a seguir.
Usurio: Representamos um usurio residencial. Normalmente este tipo de usurio faz
a conexo atravs da linha telefnica comum. Para isso preciso a utilizao de um
provedor de acesso, que fornece a conexo com a Internet. O usurio utiliza um programa
conhecido como navegador (browser), para acessar o contedo da Internet. Os dois
navegadores mais conhecidos so o Internet Explorer da Microsoft, e o Netscape Navigator da Netscape. Quando o usurio acessa um determinado contedo, dizemos que ele
est acessando um site (tambm encontramos o uso da palavra pgina, ao invs de
site). Por exemplo, quando o usurio acessa o endereo http://www.microsoft.com/brasil,
dizemos que ele est acessando a pgina, ou o site, da Microsoft Brasil. Quando o usurio
acessa o endereo http://wwww.microsoft.com/vbasic, dizemos que o usurio est
acessando a pgina do Visual Basic, no site da Microsoft. Durante este livro, estarei
utilizando a palavra pgina, significando que o usurio est acessando um determinado
contedo na Internet, ou na Intranet da empresa.
Internet: Pelo fato de ser formada por um grande nmero de equipamentos servidores,
hubs, switch, linhas de comunicao, satlites, etc. , representamos a Internet como
uma nuvem. Esta a representao que voc encontrar na maioria dos livros.
O servidor Web: Neste caso o servidor que contm a informao solicitada pelo usurio.
Por exemplo, ao digitar www.axcel.com.br, no campo endereo do navegador, o usurio
est solicitando que seja carregado o contedo da pgina inicial do site da Editora
Axcel Books. Observe que o servidor tambm est conectado Internet, isto , faz
parte da Internet. As pginas armazenadas no servidor so desenvolvidas utilizandose a linguagem HTML Hypertext Markup Language. Voc pode encontrar muita
informao sobre HTML na prpria Internet. O rgo responsvel pela padronizao
da linguagem HTML o w3. No site www.w3.org, voc pode encontrar um grande
volume de informaes sobre HTML.
Na Figura 1.1, representamos a primeira gerao de contedo da Internet. Conforme indicado
pela seta maior, a informao trafegava, basicamente, em um nico sentido. O usurio solicita
um determinado contedo, e o mesmo entregue e exibido no seu navegador. Observe que o
usurio no tem a possibilidade de enviar informaes para o servidor. Alm disso, nesta
primeira fase o contedo das pginas esttico.
Uma vez criada a pgina (atravs da utilizao do HTML), a mesma no modificada. Cada
vez que o usurio se conectar pgina, ver o mesmo contedo. A nica maneira de alterar o
contedo, alterando o cdigo HTML. Com isso, da prxima vez que o usurio se conectar
pgina, ver a nova verso da mesma. Porm esta metodologia de modificao de pginas
trabalhosa e pouco produtiva. Imagine que voc esteja publicando um catlogo de produtos,
com informaes diversas sobre vrios produtos, tais como: cdigo do produto, descrio e

18

Captulo 1 Uma Introduo Tecnologia ASP

preo. Uma das maneiras de criar este catlogo atravs da utilizao do cdigo HTML, para
criar na pgina uma tabela com informaes sobre os diversos produtos. Porm cada vez que
houver uma modificao em um dos produtos, voc ter que editar a pgina e salvar a nova
verso da mesma. Convenhamos que um processo bastante trabalhoso.
Embora trabalhoso, era assim que funcionavam os primeiros sites, no incio da era WWW. O
contedo era esttico, ou seja, alteraes nas pginas, implicavam em alteraes, diretamente
no cdigo HTML das mesmas. Imagine o trabalho para a manuteno de grandes sites, com
diversas reas de informaes, onde o nmero de pginas pode facilmente chegar na casa dos
milhares. Com isso a evoluo para a criao de contedo mais dinmico, foi um processo
natural e necessrio.

Contedo Dinmico na Internet


Com o crescimento da Internet e a necessidade de constantes alteraes no contedo das
pginas, surge uma segunda gerao de sites na Internet, capazes de entregar contedo mais
atualizado, alm de permitir que o usurio interagisse com as pginas Web, tambm enviando
informaes e no apenas recebendo. Nesta fase surge a possibilidade de ligao das pginas
HTML com o contedo de bancos de dados. Observe o diagrama indicado na Figura 1.2.

A conexo de pginas HTML com


bancos de dados, permite a criao
de pginas mais dinmicas e
interativas.
Internet

Usurio
Usurio domstico
conectado a Internet atravs
da linha telefnica.

Servidor Web
Pginas HTML dinmicas

Agora o usurio pode enviar e


receber informaes.

Servidor de Banco de Dados


Ex.: Microsoft SQL Server.

Figura 1.2: Conectando pginas HTML com bancos de dados.


Pelo diagrama, podemos ver que o usurio tem possibilidade de enviar informaes para a Internet,
e no apenas receber. Isto possibilitou o desenvolvimento de uma srie de servios, impossveis de
serem desenvolvidos apenas com a utilizao de pginas criadas com HTML.

19

Criando Sites Dinmicos com ASP 3.0

Para enviar informaes, o usurio preenche os campos de um formulrio (o qual criado


com a utilizao de HTML) e, ao clicar em um boto Enviar, os dados so enviados para o site
da Web. Ao chegar no servidor Web, estes dados precisam ser recebidos por um programa
capaz de entender o formato dos dados e armazen-los em um banco de dados.
Os primeiros programas, capazes de realizar esta tarefa, seguiam a especificao conhecida
como CGI Common Gateway Interface. Muitas aplicaes Web foram desenvolvidas
utilizando-se a especificao CGI, e vrias ainda continuam sendo utilizadas. A utilizao de
scripts, desenvolvidos na linguagem Perl, um exemplo de utilizao de CGI. O script recebe
os dados enviados pelo formulrio, os decodifica e armazena o resultado em um banco de
dados. Embora bastante funcional, a utilizao de CGI comeou a apresentar alguns problemas,
e novas alternativas foram desenvolvidas. Est fora do escopo deste livro discutir os problemas
da utilizao de CGI.
Dentre as vrias alternativas que surgiram para a gerao de contedo dinmico, podemos
citar a tecnologia de Active Server Pages, a qual faz parte do servidor Web IIS (Internet
Information Services), da Microsoft. Podemos criar uma pgina ASP, capaz de receber os
dados enviados por um formulrio e armazenar estes dados em um banco de dados, por
exemplo o Microsoft Access ou o Microsoft SQL Server. Aprenderemos a criar este tipo de
pgina ASP, no Captulo 4. Agora veremos apenas alguns exemplos simples da utilizao de
ASP, sem conexo com bancos de dados.
Com a conexo de pginas com bancos de dados, uma srie de possibilidades foram abertas,
como por exemplo:
Criao de pginas para pesquisa em banco de dados.
Cadastro de usurios que acessam o site, bem como a entrega de contedo
personalizado, de acordo com as preferncias do usurio. Por exemplo, ao entrar no
site, o usurio informa um nome e senha, com os quais foi previamente cadastrado.
Com isso aberta uma pgina com opes e contedo personalizados, de acordo com
preferncias especificadas pelo usurio.
Desenvolvimento de aplicaes residentes em servidores Web e acessveis atravs
do navegador. Devemos observar que estas aplicaes ainda eram limitadas e no
possuam todas as funcionalidades das aplicaes convencionais, desenvolvidas para
o ambiente Windows.
Apesar das suas limitaes, um novo panorama desenhava-se na Internet com a possibilidade
da criao de sites mais dinmicos, atravs da conexo com bancos de dados. Apenas para
exemplificar o funcionamento de uma pesquisa em banco de dados, atravs da Internet,
observe a Figura 1.3.

20

Captulo 1 Uma Introduo Tecnologia ASP

A conexo de pgina HTML com bancos


de dados, permite a pesquisa em
bancos de dados.

Internet

Agora o usurio pode enviar e


receber informaes.
Usurio
Usurio digita o critrio de
pesquisa em uma pgina Web.

No servidor Web, um script CGI, ou uma


pgina ASP, recebe o critrio de pesquisa,
executa a consulta no banco de dados,
monta uma pgina HTML, com o resultado
de volta para o navegador do usurio.

Servidor de Banco de Dados


Ex. Microsoft SQL Server.

Figura 1.3: Pesquisa em um banco de dados, atravs da Internet.


Vamos analisar os passos executados, desde o momento que o usurio preenche o critrio de
pesquisa, at o momento em que o resultado da consulta retornado:
O usurio acessa a pgina onde temos um formulrio para a digitao de um ou mais
critrios de pesquisa. Por exemplo, pode ser uma consulta a uma base dos CEPs de
todo o Brasil. O usurio poderia digitar o nome da Cidade, selecionar um Estado e
digitar o nome, ou parte do nome, da Rua, conforme indicado pela Figura 1.4.
Aps preencher o(s) critrio(s) de pesquisa, o usurio clica em um boto Enviar ou
Pesquisar. Os dados digitados no formulrio so enviados para o servidor.
Um script CGI, ou uma pgina ASP, no servidor, recebe os dados enviados pelo usurio.
Com estes dados, montado um comando (normalmente uma String SQL Structured
Query Language), o qual vai efetuar a consulta no banco de dados. Aps montado o
comando, o mesmo enviado para o servidor de Banco de Dados (que pode ser uma
mquina separada, ou pode estar instalado no prprio servidor Web).
O servidor de Banco de Dados recebe o comando de pesquisa, localiza um ou mais
registros que atendam o(s) critrio(s) de pesquisa e retorna o resultado para o script
CGI, ou para a pgina ASP.
Com o resultado retornado pelo servidor de Banco de Dados, o script CGI, ou a pgina
ASP, monta uma pgina HTML, normalmente no formato de uma tabela, e envia esta
pgina HTML de volta para o navegador do cliente, conforme indicado na Figura 1.5.
Caso no seja encontrado nenhum registro que atenda o(s) critrio(s) especificado(s),
retornada uma pgina com uma mensagem de que no foi encontrado nenhum registro.

21

Criando Sites Dinmicos com ASP 3.0

Figura 1.4: Digitando os critrios de pesquisa em um formulrio criado com HTML.

Figura 1.5: Resultados obtidos a partir de um banco de dados do CEP.

22

Captulo 1 Uma Introduo Tecnologia ASP

Veja que ao mesmo tempo em que aumentaram as possibilidades de desenvolvimento, tambm


aumentaram as complexidades a serem gerenciadas, tanto na criao de pginas, quanto no
gerenciamento dos sites. Observe que ainda nem falamos de questes tais como segurana,
proteo do banco de dados contra acessos no-autorizados, ou at mesmo ataques de hackers
tentando roubar informao ou corromper a informao do banco de dados.
Alm das novas complexidades, novas questes ainda precisavam ser resolvidas (sendo que
algumas ainda hoje no esto completamente solucionadas). Por exemplo, para vender pela
Internet, as questes de segurana precisavam ser bem resolvidas. Quem arriscaria a colocar
o nmero do carto de crdito em um site de Comrcio Eletrnico, sem a garantia de que o
mesmo seja seguro?
Alm disso, existe a necessidade de troca de informaes entre as diversas empresas, via
Web. Por exemplo, quando voc vai fazer uma compra pela Internet, voc digita o nmero do
seu carto de crdito. Antes de finalizar o pedido, a empresa que est vendendo precisa verificar,
junto a operadora do carto, se o nmero fornecido vlido, se no um carto vencido, se no
um carto que foi roubado, etc. Todas estas informaes precisam ser verificadas rapidamente,
em tempo real. O usurio no est a fim de aguardar muito tempo em frente ao computador.
Note que um nmero grande de fatores comea a surgir, principalmente com o incio do
Comrcio Eletrnico. Para resolver tantos problemas, a simples conexo de pginas com bancos
de dados, embora necessria, no era mais suficiente.
No prximo item veremos um pouco mais sobre esta nova gerao de sites Web, os quais
fazem uso de diversas tecnologias. Lembrando que a cada dia novidades esto surgindo.

A Era do Comrcio Eletrnico


Estamos vivendo um nova era, a qual marcada pelo Comrcio Eletrnico, ou o chamado ebusiness. Todas as revistas especializadas e meios de comunicao apresentam matrias,
diariamente, sobre Comrcio Eletrnico. As possibilidades so inmeras, tanto para as
empresas quanto para os usurios e profissionais envolvidos. O Comrcio Eletrnico deixou
de ser apenas uma previso em livros e revistas, e passou a ser uma realidade, presente no
dia-a-dia de todos ns. Com isso uma nova gerao de sites est sendo criada, muito mais
complexa do que a anterior, necessitando de ferramentas de desenvolvimento e gerenciamento
cada vez mais sofisticadas.
Grande parte do oramento de informtica das empresas est direcionada para atividades ligadas
ao Comrcio Eletrnico. Novas tecnologias surgem todos os dias, prometendo facilitar a criao
de sites para essas e outras atividades relacionadas. Neste tpico veremos quais as tecnologias
necessrias para criao destes sites, bem como as complexidades envolvidas.

23

Criando Sites Dinmicos com ASP 3.0

O Comrcio Eletrnico pode acontecer de duas maneiras distintas:


B2B Business to Business: Acontece quando so feitas transaes comerciais entre duas
empresas. Pode ser uma montadora de automveis comprando peas de um fornecedor,
ou uma livraria encomendando livros de uma editora. Em termos de volume financeiro, o
B2B responsvel por um grande percentual do que comercializado via Internet.
B2C Business to Consumer: um cliente, como eu e voc, comprando um livro ou
um CD atravs de uma loja virtual na Internet. Hoje existem sites de Comrcio Eletrnico
que vendem uma srie de coisas: livros, revistas, cosmticos, CDs, roupas, e at
remdios e carros.
medida que aumenta o nmero de sites de Comrcio Eletrnico, aumenta, tambm, a
concorrncia. Portanto, conquistar e manter clientes tm sido o grande desafio. No basta
colocar um catlogo de produtos, garantir a segurana e entregar a mercadoria no local indicado
e no prazo estipulado. Embora estas sejam questes fundamentais, no so mais suficientes
para garantir a fidelidade do cliente, pois, diferentemente do comrcio tradicional, no Comrcio
Eletrnico, o concorrente est apenas a um clique de mouse.
Hoje, um dos grandes desafios conhecer o cliente, saber identificar seus hbitos e armazenar
o maior nmero de informaes sobre ele, tal como o histrico de compras e pesquisas
realizadas no catlogo de produtos. De posse destas informaes, o site deve ser capaz de
fazer ofertas personalizadas para o cliente. Posso citar o meu caso como exemplo. H tempos
que compro livros importados em um determinado site. Ao acessar o site, aps me identificar,
aparece um link: Sugestes para o Jlio. Vejam que at o link j vem personalizado; isso
atrai o cliente. como entrar no mercadinho da esquina e o seu Manoel ir dizendo: Ol seu
Jlio, aquele queijo colonial que o Sr. gosta, chegou. Ao clicar no link de sugestes, recebo
uma listagem de livros. O mais interessante que, nesta listagem, realmente esto os livros
nos quais estou interessado. Que milagre este? No milagre nenhum. Desde a primeira
compra, o site vem armazenando informaes sobre as pesquisas que fao no catlogo de
livros e sobre o que efetivamente compro. Com isso, foi possvel identificar minhas preferncias
e elaborar uma lista de sugestes personalizada. Quanto maior a quantidade de informaes,
mais precisa ser esta lista de sugestes.
Vejam que os sites de Comrcio Eletrnico esto tentando fazer o que o seu Manoel do
mercadinho da esquina faz h muitos anos. Esto tentando dar um tratamento personalizado
para os seus clientes, com o objetivo de mant-los satisfeitos. Clientes satisfeitos significam
vendas e lucros para a empresa.
Conhecer as preferncias do cliente apenas um dos exemplos de aplicao a partir de dados
obtidos pelo site. Com uma base de dados grande e confivel, muitas outras aplicaes podem
ser construdas sobre esses dados. Por isso que, a maioria dos sites, mesmo os que fornecem
servios gratuitos, exigem que voc preencha um cadastro, antes de disponibilizar o acesso a

24

Captulo 1 Uma Introduo Tecnologia ASP

servios e informaes. Com as informaes obtidas atravs do cadastro, a empresa est


tentando montar a sua base de dados.
Vejam que os dados precisam ser obtidos e armazenados em um banco de dados. Depois, a
segurana dos dados precisa ser garantida. J pensou se algum consegue invadir o site de
uma empresa e obter uma listagem de nmeros de cartes de crdito? Seria pssimo para a
imagem e para as vendas desta empresa. Alm da segurana, novas aplicaes esto sendo
construdas para fazer uso destes dados, com o objetivo no s de melhorar as vendas, mas
tambm de melhorar as relaes com os clientes. No basta que a empresa seja capaz de
vender; para sobreviver ela precisa continuar vendendo para o cliente. Para continuar
vendendo, isto , para fidelizar o cliente, a rea de atendimento de fundamental importncia.
Se voc compra, por exemplo, um CD e o mesmo entregue fora do prazo, voc reclama. Se
sua reclamao no for satisfatoriamente atendida, voc deixar de comprar desta empresa e
ir procurar outra. Afinal na Internet, o concorrente est a um clique de mouse.
Um dos assuntos mais discutidos no momento representado pela sigla CRM Customer
Relationship Management. Traduzindo teramos: Gerenciamento das Relaes com o Cliente.
CRM representa um conjunto de solues de hardware e software , capazes de melhorar a
relao das empresas com os clientes, principalmente no atendimento s questes do cliente,
quer seja suporte tcnico, dvidas sobre novos produtos, etc.
Quem j no ligou para uma central de atendimento e teve que contar a mesma histria uma
dezena de vezes. Voc liga algum atende. Voc descreve o seu problema, a pessoa diz que no
com ela e passa para um outro setor. Um novo atendente e a mesma histria; voc passado
para um outro setor. Depois da dcima transferncia (considerando que voc seja uma pessoa
paciente, seno aps a terceira voc j desligaria o telefone), voc desliga irritado, sem ter
solucionado o problema. Muito provavelmente, esta empresa acaba de perder mais um cliente.
Clientes no so raros, raras ss as empresas que conseguem fideliz-lo de forma eficiente.
Melhorar o atendimento ao cliente, ou de uma maneira mais genrica, a relao dos clientes
com a empresa, o objetivo do CRM. Ao ligar para uma central de atendimento, a pessoa
identifica-se atravs do seu cdigo de cliente, o sistema de CRM busca em uma base de
dados consolidada todas as informaes sobre o cliente. Ento, ele descreve o problema,
que inserido no sistema. Caso o atendente no seja capaz de solucion-lo, a chamada
transferida diretamente para a pessoa capaz de solucionar o problema. O cliente no precisa
repetir toda a histria porque toda a descrio do problema tambm est acessvel pessoa
que ir atend-lo (os dados foram passados pelo sistema de CRM, quando da transferncia
do chamado). O cliente atendido, soluciona o seu problema e fica satisfeito. Cliente
satisfeito continua comprando.

25

Criando Sites Dinmicos com ASP 3.0

A descrio do pargrafo anterior representa uma situao ideal; claro que os sistemas de
CRM ainda no so perfeitos. Porm novas tcnicas esto sendo introduzidas, atravs da
possibilidade de atendimentos via Internet, acessando o site da empresa. Com a melhoria dos
sistemas de telecomunicaes, poderemos tornar realidade um atendimento de alta qualidade
e conclusivo, atravs da Internet. Por exemplo, o cliente est pesquisando o catlogo de
produtos. Na pgina com os dados do produto, existe um link Outras dvidas. Ao clicar
neste link, o cliente entra numa seo de bate-papo com um atendente da empresa. O cliente
pode colocar as suas dvidas, que sero respondidas em tempo real. Tendo as dvidas
solucionadas, h maior probabilidade de ser feito um pedido. Alm disso as dvidas do
cliente podem ser armazenadas no banco de dados. Quando uma determinada dvida comear
aparecer com certa freqncia, os dados que a solucionam podem ser disponibilizados no
catlogo. Assim, os prximos clientes que tiverem a mesma dvida, no precisaro entrar em
contato com o atendimento. Vejam que novamente estamos em um processo de aquisio de
informaes, atravs do prprio site, e utilizao destas informaes para melhorar a qualidade
dos servios e produtos oferecidos.
No B2B tambm existem muitas questes a serem gerenciadas. Para entendermos a
complexidade destas situaes imagine o seguinte exemplo, ilustrado pela Figura 1.6.
Fornecedores

Concessionrias

Servidor

Servidor

Servidor

Servidor

Servidor

Servidor

Figura 1.6: A complexidade das questes envolvidas no B2B.


Temos uma rede de concessionrias que prestam servios de manuteno para uma
determinada marca de automveis. O objetivo ter um controle automatizado de estoque.
Cada pea catalogada possui um nvel mnimo de unidades em estoque. Quando este nvel
atingido, o banco de dados deve lanar um pedido para este item automaticamente. O
funcionamento do sistema descrito a seguir.

26

Captulo 1 Uma Introduo Tecnologia ASP

O cliente vai na concessionria para comprar uma determinada pea. O atendente efetua a
venda e o estoque atualizado. Se a pea atingir o nvel mnimo, previamente estabelecido,
um pedido ser automaticamente gerado. Este pedido contm informaes sobre a
concessionria, bem como sobre as peas que esto sendo encomendadas.
As informaes sobre o pedido so criptografadas para garantir a segurana, e o pedido
enviado, via Internet, para o fornecedor da pea. Dentro de um prazo preestabelecido, a pea
entregue, evitando que a mesma fique com estoque zerado.
Observe que, neste caso, existe uma troca de informaes entre as concessionrias e os
fornecedores. Para que possa haver esta troca de informaes, os sistemas das duas
empresas devem ser capazes de trocar dados em um formato comum, efetuando negcios
atravs da Internet.
Vamos introduzir algumas questes que complicam um pouco mais a infra-estrutura necessria
para a realizao do B2B. Por exemplo, ao invs de comprar uma determinada pea sempre do
mesmo fornecedor, o sistema deve ser capaz de enviar o pedido para vrios fornecedores, e
selecionar aquele que fizer a melhor oferta, tanto em termos de preo quanto de prazo de
entrega. Neste caso, a concessionria lana o pedido no seu site e aguarda as propostas dos
fornecedores. Aps recebidas as respostas, uma delas selecionada. Este parece ser um sistema
de leilo ao contrrio, ou seja, o comprador anuncia que est precisando de um determinado
produto, e os fornecedores esforam-se para fazer a melhor proposta. Esta forma de fazer compras
conhecida como e-procurement. Em determinados casos, a lista de propostas est disponvel
para todos os fornecedores, isto , se um fornecedor A fez uma proposta e, depois, ao consultar
a lista, viu que um fornecedor B fez uma melhor do que a sua, ele pode alterar a sua proposta,
dentro do perodo de tempo estipulado pelo comprador, no nosso caso, a concessionria.
Vejam que mesmo no sistema de B2B, a lgica tem sido revertida em favor do cliente, isto ,
os fornecedores que disputam o cliente, atravs de boas ofertas, preos competitivos e
prazos adequados de entrega.
Porm a criao de sistemas deste tipo uma tarefa complexa. A todo o momento temos
acesso a informaes de bancos de dados, questes de segurana no acesso a essas informaes,
alm de uma lgica bastante complicada. Em diversos pontos do processo podemos fazer uso
da tecnologia ASP, para criar solues bem interessantes. O uso de pginas ASP, em conjunto
com outras tecnologias, possibilita a criao de solues complexas como as exemplificadas
neste captulo.

27

Criando Sites Dinmicos com ASP 3.0

Vamos inserir mais alguns detalhes no nosso exemplo. Pode ser que alm de fazer o pedido,
uma vez aprovada a compra, a concessionria deva fazer o pagamento do mesmo, por meio
de uma transao on-line. O pagamento pode ser feito, por exemplo, atravs de uma
transferncia da conta corrente da concessionria para a conta corrente do fornecedor. Neste
ponto, precisamos introduzir o conceito de transao, o qual ser bastante detalhado no
Captulo 12, Conceitos Avanados: Transaes e o Microsoft Transaction Services.
Uma transao, de maneira bastante simples, um conjunto de aes que deve acontecer
como um todo, ou seja, todas as aes contidas na transao tm que ser finalizadas com
sucesso, ou nenhuma delas deve ser realizada. Caso uma das aes, contida na transao,
falhe, as que ainda estiverem pendentes devem ser canceladas; e as aes j realizadas devem
ser revertidas. Com isso garantimos que a transao acontece como um todo, ou que nenhuma
das suas aes so realizadas.
Para entender, na prtica, o conceito de transaes, vamos voltar ao exemplo anterior. Ao
efetuar um pagamento, o sistema deve transferir valores da conta corrente da concessionria,
para a conta corrente do fornecedor. Estas duas aes devem acontecer no contexto de uma
transao, conforme indicado abaixo:
Incio da Transao
Ao 1: Debita o valor da conta corrente da concessionria.
Ao 2: Credita o valor na conta corrente do fornecedor.
Final da Transao
A primeira ao efetua o dbito na conta corrente da concessionria. Suponhamos que a
Ao 1 ocorra com sucesso, porm na hora de fazer o crdito na conta corrente do fornecedor,
ocorra um problema, o que devemos fazer? O valor deve ser estornado para a conta da
concessionria, ou seja, a Ao 1 deve ser cancelada, uma vez que nem todas as aes dentro
da transao puderem ser concludas com xito. Vejam a importncia do conceito de transao,
pois neste caso, se no usssemos transao, o valor seria debitado da conta corrente da
concessionria e no teria sido creditado na conta corrente do fornecedor.
Poderamos entrar em nveis cada vez mais profundos, sobre os aspectos tecnolgicos
necessrios realizao do Comrcio Eletrnico. Porm estas questes fogem ao escopo deste
livro (quem sabe em um trabalho futuro...). Neste livro estaremos aprendendo a utilizar a
tecnologia ASP para abordar alguns destes aspectos, atravs de exemplos prticos e
detalhadamente explicados.

28

Captulo 1 Uma Introduo Tecnologia ASP

Aplicaes Para a Web


Embora utilizamos os exemplos de Comrcio Eletrnico, CRM, e-procurement, etc., como
situaes onde podemos utilizar a tecnologia ASP, no somente nestas situaes que a
tecnologia pode ser utilizada. Hoje em dia, com o aumento da complexidade das redes de
computadores baseadas em PCs, existe uma tendncia bastante acentuada em favor do
desenvolvimento de aplicaes que seguem o modelo Web. So aplicaes que so acessadas
atravs de um browser. Neste tpico iremos falar um pouco sobre aplicaes Cliente/Servidor
tradicionais e os problemas deste tipo de modelo. Falaremos sobre aplicaes em duas, trs
ou n camadas, e onde a tecnologia ASP se encaixa, neste mundo de desenvolvimento de
aplicaes habilitadas para a Web.

A Complexidade de Gerenciamento do Modelo


Cliente/Servidor e Aplicaes em Duas Camadas
O modelo Cliente/Servidor foi criado tendo como base a descentralizao dos dados e recursos
de processamento, em oposio ao modelo centralizado utilizado na poca em que o mainframe
dominava absoluto. Neste modelo, conforme indicado pela Figura 1.7, em uma rede de
computadores existem uma ou mais mquinas que atuam como Servidores, disponibilizando
recursos para as demais mquinas, as quais atuam como Clientes.
Servidor de Arquivos

Clientes

Clientes

Bancos de Dados

Clientes

Outros Servidores

Clientes

Clientes

Figura 1.7: O Modelo Cliente/Servidor tradicional.


Conforme pode ser visto na Figura 1.7, temos servidores para arquivos, banco de dados e
outras funes, tais como: Servidores de impresso, servidores Web, etc. Tipicamente estas
redes so formadas por servidores, que so equipamentos com um maior poder de
processamento e armazenamento do que os Clientes, os quais, na maioria dos casos, so
microcomputadores ligados em rede.

29

Criando Sites Dinmicos com ASP 3.0

Aplicaes em Duas Camadas


No incio da utilizao do modelo Cliente/Servidor, as aplicaes foram desenvolvidas
utilizando-se um modelo de desenvolvimento em duas camadas. Neste modelo, um programa,
normalmente elaborado em um ambiente de desenvolvimento como o Visual Basic, Delphi
ou Power Builder , instalado em cada cliente. Este programa acessa dados em um servidor
de Banco de dados, conforme ilustrado na Figura 1.8.
Banco de Dados

No modelo de duas camadas, toda a


"Lgica do negcio" fica no Cliente.
Quando o programa Cliente
instalado, so instaladas todas as
regras de acesso ao banco de dados.

Cliente

Cliente

Cliente

Cliente

Cliente

Figura 1.8: O modelo de desenvolvimento em duas camadas.


No modelo em duas camadas, temos um programa que instalado no cliente, e que faz acesso
a um banco de dados residente no servidor de Banco de Dados. Na maioria dos casos, a
mquina do cliente um PC rodando Windows, e a aplicao cliente desenvolvida utilizandose um dos ambientes conhecidos, conforme citado anteriormente. Sendo a aplicao Cliente,
um programa para Windows (na grande maioria dos casos), a mesma deve ser instalada em
cada um dos computadores da rede, que faro uso da aplicao. o processo de instalao
normal, para qualquer aplicao Windows. No modelo em duas camadas, a aplicao Cliente
responsvel pelas seguintes funes:
Apresentao: O cdigo que gera a interface visvel do programa faz parte da aplicao
Cliente. Todos os formulrios, menus e demais elementos visuais, esto contidos no
cdigo da aplicao Cliente. Caso sejam necessrias alteraes na interface do programa,
faz-se necessria a gerao de uma nova verso do programa, e todos os computadores
que possuem a verso anterior, devem receber a nova verso, para que o usurio possa
ter acesso as alteraes da interface. A que comeam a surgir os problemas no modelo
em duas camadas: uma simples alterao de interface suficiente para gerar a
necessidade de atualizar a aplicao, em centenas ou milhares de computadores. O
gerenciamento desta tarefa algo extremamente complexo.

30

Captulo 1 Uma Introduo Tecnologia ASP

Lgica do Negcio: As regras que definem a maneira como os dados sero acessados e
processados, so conhecidas como Lgica do Negcio. Fazem parte da Lgica do Negcio
desde funes simples de validao da entrada de dados, como o clculo do dgito
verificador de um CPF, at funes mais complexas, como descontos escalonados para
os maiores clientes, de acordo com o volume da compra. Questes relativas legislao
fiscal e escrita contbil tambm fazem parte da Lgica do Negcio. Por exemplo, um
programa para gerncia de Recursos Humanos, desenvolvido para a legislao dos EUA,
no pode ser utilizado, sem modificaes, por uma empresa brasileira. Isso acontece
porque a legislao dos EUA diferente da legislao brasileira. Em sntese, as regras
para o sistema de Recursos Humanos so diferentes. Alteraes nas regras do negcio
so bastante freqentes em funo das constantes mudanas na legislao do nosso
pas. Com isso, faz-se necessria a gerao de uma nova verso do programa cada vez
que uma determinada regra muda, ou quando regras forem sendo acrescentadas ou
retiradas. Desta forma, todos os computadores que possuem a verso anterior devem
receber a nova verso, para que o usurio possa ter acesso s alteraes. Aqui temos
mais um problema do modelo em duas camadas: qualquer alterao nas regras do negcio
suficiente para gerar a necessidade de atualizar a aplicao em centenas ou milhares
de computadores. O gerenciamento desta tarefa algo extremamente complexo.
Com a evoluo do mercado e as alteraes da legislao, mudanas nas regras do negcio
so bastante freqentes. Por isso o modelo de duas camadas, demonstrou-se de difcil
manuteno e gerenciamento, alm de apresentar um TCO muito elevado, conforme
comentado na Introduo deste livro.
A outra camada, vem a ser o banco de dados, o qual fica armazenado em servidor da rede.
Uma aplicao desenvolvida em Visual Basic, a qual acessa um banco de dados em um servidor
Microsoft SQL Server, um tpico exemplo de uma aplicao em duas camadas.
Em busca de solues para os problemas do modelo em duas camadas, que surge a proposta
do modelo em trs camadas, conforme analisaremos a seguir.

Aplicaes em Trs Camadas


Como uma evoluo do modelo em duas camadas, surge o modelo de trs camadas. A idia
bsica deste novo modelo em trs camadas, retirar as regras do negcio do cliente e centralizlas em um determinado ponto, o qual chamado de servidor de aplicaes. O acesso ao
banco de dados feito atravs das regras contidas no servidor de Aplicaes. Ao centralizar
as regras do negcio em um nico ponto, fica muito mais fcil a atualizao das mesmas. A
Figura 1.9, nos d uma idia geral do modelo em trs camadas.

31

Criando Sites Dinmicos com ASP 3.0

Servidor de Banco de Dados

Servidor de Aplicaes

No modelo de trs camadas, toda a


Lgica do Negcio fica no servidor de
Aplicaes. Com isso, a atualizao
das regras do negcio fica mais fcil.

Cliente

Cliente

Cliente

Cliente

Cliente

Figura 1.9: O modelo de desenvolvimento em trs camadas.


Todo o acesso do cliente ao banco de dados feito de acordo com as regras contidas no servidor
de Aplicaes. O cliente no tem acesso ao banco de dados, sem antes passar pelo servidor de
Aplicaes. Com isso as trs camadas so as seguintes:
Apresentao: Continua no programa instalado no cliente. Alteraes na interface do
programa geram a necessidade de atualizar a aplicao em todos os computadores,
onde a mesma est sendo utilizada. Porm, cabe ressaltar que alteraes na interface
so menos freqentes do que alteraes nas regras do negcio.
Lgica: So as regras do negcio, as quais determinam de que maneira os dados sero
utilizados. Esta camada foi deslocada para o servidor de aplicaes. Desta maneira,
quando uma regra do negcio for alterada, basta atualiz-la no servidor de aplicaes.
Aps a atualizao, todos os usurios passaro a ter acesso a nova verso, sem que seja
necessrio reinstalar o programa em cada um dos computadores da rede. Vejam que ao
centralizar as regras do negcio em um servidor de Aplicaes, estamos facilitando a
tarefa de manter a aplicao atualizada.
Dados: Nesta camada temos o servidor de Banco de Dados, no qual reside toda a
informao necessria para o funcionamento da aplicao. Cabe ressaltar que os dados
somente so acessados atravs do servidor de Aplicao, e no diretamente pela
aplicao Cliente.
Com a introduo da camada de Lgica, resolvemos o problema de termos que atualizar a aplicao
em centenas ou milhares de computadores, cada vez que uma regra do negcio fosse alterada.
Porm continuamos com o problema de atualizao da aplicao, cada vez que sejam necessrias
mudanas na interface. Por isso que surgiram os modelos de n-camadas. No prximo tpico,
iremos falar um pouco sobre o modelo em quatro camadas. No Captulo 12, Conceitos Avanados:
Transaes e o Microsoft Transaction Services, estaremos falando sobre camadas adicionais.

32

Captulo 1 Uma Introduo Tecnologia ASP

Aplicaes em Quatro Camadas


Como uma evoluo do modelo de trs camadas, surge o modelo de quatro camadas. A idia
bsica do modelo em quatro camadas retirar a apresentao do cliente e centraliz-la em
um determinado ponto, o qual na maioria dos casos um servidor Web. Com isso o prprio
cliente deixa de existir como um programa que precisa ser instalado em cada computador da
rede. O acesso aplicao feito atravs de um navegador, como o Internet Explorer ou o
Netscape Navigator. A Figura 1.10 nos d uma idia geral do modelo em quatro camadas.
Servidor de Aplicaes

Servidor Web

Cliente

Cliente

Cliente

Servidor de Banco de Dados

Cliente

Cliente

O Cliente s precisa de um Navegador para ter acesso a aplicao.

Figura 1.10: O modelo de desenvolvimento em quatro camadas.


Para acessar a aplicao, o cliente acessa o endereo da aplicao, utilizando o seu navegador.
Por exemplo http://www.empresa-abc.com/sistemas/cadastro.asp. Todo o acesso do cliente
ao banco de dados feito de acordo com as regras contidas no servidor de Aplicaes. O
cliente no tem acesso ao banco de dados, sem antes passar pelo servidor de Aplicaes. Com
isso as quatro camadas so as seguintes:
Cliente: Neste caso o cliente o navegador utilizado pelo usurio, quer seja o Internet
Explorer, quer seja o Netscape Navigator, ou outro navegador qualquer.
Apresentao: Passa para o servidor Web. A interface pode ser composta de pginas
HTML, ASP, ou qualquer outra tecnologia capaz de gerar contedo para o navegador.
Com isso alteraes na interface da aplicao so feitas diretamente no servidor Web, e,
portanto, estas alteraes estaro, automaticamente, disponveis para todos os clientes.
Com isso no existe a necessidade de reinstalar a aplicao em todos os computadores
da rede. Fica muito mais fcil garantir que todos esto tendo acesso verso mais

33

Criando Sites Dinmicos com ASP 3.0

atualizada da aplicao. A nica coisa que o cliente precisa ter instalado na sua mquina,
o navegador. O acesso ao banco de dados feito atravs do servidor de Aplicaes.
Lgica: So as regras do negcio, as quais determinam de que maneira os dados sero
utilizados. Esta camada est no servidor de Aplicaes. Desta maneira, quando uma regra do
negcio for alterada, basta atualiz-la no servidor de Aplicaes. Aps a atualizao, todos
os usurios passaro a ter acesso nova verso, sem que seja necessrio reinstalar o programa
em cada um dos computadores da rede. Vejam que, ao centralizar as regras do negcio em
um servidor de Aplicaes, estamos facilitando a tarefa de manter a aplicao atualizada.
Dados: Nesta camada temos o servidor de banco de dados, no qual reside toda a
informao necessria para o funcionamento da aplicao.
Com o deslocamento da camada de apresentao para um servidor Web, resolvemos o problema
de termos que atualizar a aplicao em centenas ou milhares de computadores, cada vez que
uma regra do negcio for alterada. Neste ponto a atualizao das aplicaes uma tarefa mais
gerencivel, muito diferente do que acontecia no caso do modelo em duas camadas.
Os servidores de Aplicao, Web e Banco de Dados no precisam ser necessariamente
servidores separados, isto , uma mquina para fazer o papel de cada um dos servidores. O
conceito de servidor de Aplicao, Web ou Banco de Dados um conceito relacionado com a
funo que o servidor desempenha. Podemos ter, em um mesmo equipamento, um servidor
de Aplicaes, um servidor Web e um servidor de Banco de Dados. Claro que questes de
desempenho devem ser levadas em considerao, conforme analisaremos no prximo tpico.

Questes a Considerarmos nos Modelos em Trs ou Mais Camadas


Muitas so as vantagens dos modelos em trs ou mais camadas em relao facilidade de
gerenciamento e atualizao das aplicaes. Porm deve-se levar em considerao o
desempenho e dimensionamento dos equipamentos que atuaro como servidores.
A partir do momento que estamos deslocando funcionalidades (tipicamente lgica e
apresentao), do cliente para um ou mais servidores, tambm estamos deslocando capacidade
de processamento em termos de memria RAM e processador. Funes que antes eram
executadas pelos clientes, utilizando memria e processador da estao cliente, agora foram
deslocadas para os servidores, consumindo memria e processador do servidor. Portanto, um
dos fatores chave o correto dimensionamento dos equipamentos servidores.
Para fazer o dimensionamento dos servidores, precisamos conhecer o nmero de usurios que
iro acessar a aplicao, o nvel de exigncia de cada usurio e os recursos necessrios pelos
softwares do servidor, entre outros fatores. Para determinar o nvel de recursos necessrios em
cada um dos servidores, voc precisa fazer um estudo bem detalhado, de tal forma que o servidor
no fique subdimensionado. Quando o servidor no est corretamente dimensionado, a tendncia
que o acesso a aplicao fique bastante lento, causando insatisfao entre os usurios.

34

Captulo 1 Uma Introduo Tecnologia ASP

Neste modelo de desenvolvimento para a Web, em trs ou mais camadas, existem diversos
pontos nos quais podemos utilizar a tecnologia ASP. Ao desenvolver a interface da aplicao,
pode-se combinar cdigo HTML com cdigo ASP. Utilizando ASP, podemos desenvolver
pginas que acessam o banco de dados, atravs do servidor de Aplicaes. Questes como
autenticao de usurios, determinao do nvel de acesso e segurana da aplicao podem
ser desenvolvidas com a utilizao de ASP.
Para que voc possa utilizar a tecnologia ASP da melhor maneira, com o objetivo de atender
s necessidades da sua aplicao, importante que voc conhea o modelo de desenvolvimento
para a Web, bem como a utilizao de ASP, para a criao das aplicaes. No decorrer deste
livro, estaremos abordando diversos tpicos relacionados criao de aplicaes Web.

O que ASP?
Definir exatamente o que ASP uma tarefa que pode gerar controvrsias. Eu, particularmente,
gosto de definir ASP, como sendo: Uma tecnologia que permite a criao de pginas dinmicas,
nas quais alm de cdigo HTML, temos cdigo ASP. justamente este cdigo, que fornece a
funcionalidade, que torna os sites dinmicos, possibilitando a criao de aplicaes Web.
No defino ASP como uma linguagem de Script porque, para a criao de pginas ASP, podemos
utilizar diferentes linguagens, tais como VBScript e Java Script. Neste livro, estaremos
utilizando o VBScript. Teremos os Captulos 2 e 3 dedicados linguagem VBScript.
Melhor do que definies formais, entender como funciona uma pgina ASP. Vamos nos
basear na Figura 1.11.

Internet

http://www.abc.com/cep.asp

Servidor Web
www.abc.com

A pgina ASP processada no servidor. O resultado do


processamento uma pgina HTML. O que retorna para o cliente
a pgina HTML, j resultante do processamento no servidor Web.

Figura 1.11: Como funciona o ASP.

35

Criando Sites Dinmicos com ASP 3.0

Vamos fazer alguns comentrios sobre a Figura 1.11.


O servidor Web, no nosso caso o IIS da Microsoft, reconhece que a pgina solicitada uma
pgina ASP, pela extenso da pgina. As pginas ASP devem ter a extenso .asp. Se criarmos
uma pgina ASP e a salvarmos com a extenso .htm ou .html, o IIS simplesmente ignora o
cdigo ASP. A criao de pginas ASP est ligada utilizao do IIS. No podemos, por
exemplo, criar pginas ASP e disponibiliz-las utilizando outros servidores Web, como o
Netscape Web Server ou o Apache. J existem empresas trabalhando para disponibilizar a
tecnologia ASP para alguns servidores Web, rodando no sistema operacional Unix ou Linux.
O usurio digita o endereo http://www.abc.com/cep.asp e tecla Enter. Feito isso, o pedido
enviado para o servidor www.abc.com. O servidor identifica a extenso do arquivo .asp.
Como a extenso .asp, a pgina cep.asp passada para o Interpretador ASP, o qual faz
parte do IIS. O Interpretador percorre toda a pgina, executando o cdigo ASP e retornando o
cdigo HTML, resultante deste processamento. Com isso o que retornado para o usurio,
que solicitou a pgina ASP, apenas o cdigo HTML resultante do processamento da pgina.
Este fato pode ser comprovado pedindo para que o navegador exiba o cdigo fonte da pgina.
No caso do Internet Explorer 5.0, basta selecionar a opo Cdigo fonte, do menu Exibir. O
fato do retorno ser HTML puro traz diversos benefcios, dentro os quais podemos destacar:
Os algoritmos, bem como o prprio cdigo ASP, ficam protegidos. Isto significa que o
usurio no tem acesso ao cdigo das aplicaes Web, desenvolvidas em ASP. Isto
bastante desejvel, uma vez que no seria interessante que qualquer usurio pudesse
copiar, livremente, os algoritmos e cdigos da empresa.
O acesso pginas ASP independente do navegador utilizado. No importa se estamos
utilizando o Netscape Navigator, o Internet Explorer, ou qualquer outro navegador.
Uma vez que o que retorna cdigo HTML, qualquer navegador capaz de acessar
uma pgina ASP.
Em contrapartida, o servidor precisa ser o IIS da Microsoft. Outros servidores ainda no
possuem um Interpretador ASP, o que inviabiliza a utilizao de pginas ASP nos mesmos.
Outra questo importante a considerar o fato de uma pgina ASP ser interpretada no servidor.
Isto significa que voc no pode criar uma pgina ASP e test-la localmente, simplesmente
abrindo-a no navegador. Se voc criar uma pgina ASP, salv-la no seu disco rgido local e
tentar abri-la no navegador, todo o cdigo ASP ser ignorado, uma vez que no existe o
Interpretador ASP. Para poder testar as suas pginas ASP, voc ter que salv-las em um
servidor Web, que esteja rodando o IIS.
Para acompanhar os exemplos deste livro, aconselho que voc utilize o Windows 2000 Server
ou o Windows 2000 Professional, com o IIS 5.0 instalado. Caso voc no disponha de um
computador, com um destes dois sistemas instalados, voc pode utilizar o Windows 98 com

36

Captulo 1 Uma Introduo Tecnologia ASP

o Personal Web Server instalado. Porm, com o Personal Web Server, alguns dos exemplos
deste livro, principalmente os que utilizam as novas caractersticas do ASP 3.0, no iro
funcionar corretamente.
Na Introduo, voc aprendeu a instalar o IIS 5.0. No prximo item, aprenderemos a criar um
diretrio no servidor do IIS e salvar nossas pginas neste local, para depois podermos testlas. Sugiro que voc tambm crie este diretrio para salvar nossos exemplos. Iremos criar um
diretrio para cada captulo do livro, de tal forma que os exemplos possam ficar melhor
organizados.

IMPORTANTE
Para os exemplos deste livro, estou utilizando um servidor com o Windows 2000 Server. O
nome do servidor www.groza.com. Se voc estiver utilizando um servidor com um nome
diferente, substitua www.groza.com, pelo nome do servidor que voc estiver utilizando, sempre
que o mesmo aparecer nos nossos exemplos.

Preparando o Servidor Para Acompanhar os Exemplos


Neste item vamos criar uma pasta chamada livro. Dentro desta pasta vamos criar uma subpasta
para cada captulo do livro: Capitulo1, Capitulo2, e assim por diante, at o Capitulo12. Depois
aprenderemos a tornar esta pasta, parte integrante do servidor IIS. No so todas as pastas de
um servidor que podem ser acessadas atravs do IIS.

Criando a Estrutura de Pastas e Subpastas


Utilizando o Windows Explorer, crie uma estrutura de pastas e subpastas, conforme indicado
na Figura 1.12. Lembre-se de no utilizar acentos para o nome das subpastas.

IMPORTANTE
Estou utilizando o drive C:. Voc pode utilizar qualquer um dos drives disponveis no seu
computador.

Agora vamos fazer com que a pasta livro (e conseqentemente, todas as suas subpastas)
passe a fazer parte do servidor IIS www.groza.com.

37

Criando Sites Dinmicos com ASP 3.0

Figura 1.12: Criando a estrutura de pastas e subpastas.

Tornando a Pasta Livro Parte dos Servidor IIS


Agora vamos aprender passo a passo, como tornar a pasta livro, parte do servidor IIS. Para
isso utilizaremos o console Gerenciamento do Internet Services, do Windows 2000 Server.
Para maiores informaes sobre MMC, Snap-in e Consoles administrativos, consulte a Unidade
IV, do livro Srie Curso Bsico & Rpido, Microsoft Windows 2000 Server, de minha autoria
e publicado pela editora Axcel Books.
Tornando a pasta livro parte do servidor IIS www.groza.com:
1. Faa o logon como Administrador.
2. Clique em Iniciar/Programas/Ferramentas administrativas/Gerenciador do Internet
Services.
3. Ser aberta a janela Internet Information Services, conforme indicado pela Figura 1.13.
4. D um clique duplo no nome do computador para abri-lo. No exemplo da Figura 1.13,
o nome do computador servidor. Feito isso so exibidas trs opes, conforme indicado
pela Figura 1.14.

38

Captulo 1 Uma Introduo Tecnologia ASP

Figura 1.13: O Gerenciador do Internet Services.

Figura 1.14: Opes de gerenciamento para o IIS 5.0.


5. D um clique no sinal de +, ao lado da opo Site da Web padro, para expandir esta
opo. As opes que aparecem so as pastas que j fazem parte do site.
6. D um clique com o boto direito do mouse sobre Site da Web padro. No menu que
surge, aponte para Novo. Nas opes que surgem, d um clique na opo Pasta virtual,
conforme indicado pela Figura 1.15.

39

Criando Sites Dinmicos com ASP 3.0

Figura 1.15: Criando uma nova pasta virtual, no servidor IIS 5.0.
7. Esta pasta virtual ser associada pasta livros, criada anteriormente.
8. Ser exibida a primeira tela do Assistente para a criao de pasta virtual. D um clique
no boto Avanar, passando segunda etapa do assistente.
9. Nesta segunda etapa, voc precisa definir um nome (Alias) para esta pasta virtual.
Utilizaremos o mesmo nome da pasta: livro. No obrigatrio que seja utilizado o
mesmo nome. Por questo de facilidade de administrao e gerenciamento, sempre
utilizo nomes iguais para o nome da pasta no disco rgido e o nome no IIS 5.0.
10. Digite livro, conforme indicado pela Figura 1.16.

Figura 1.16: Digitando um nome para a pasta no IIS 5.0.

40

Captulo 1 Uma Introduo Tecnologia ASP

11. D um clique no boto Avanar, passando terceira etapa do assistente.


12. Na terceira etapa, o assistente pergunta qual a pasta a ser associada com o nome virtual informado na etapa anterior. Nesta etapa voc pode digitar o caminho completo
para a pasta, ou utilizar o boto procurar, para localizar a pasta desejada. No nosso
exemplo, vamos digitar C:\livro. Com isso estamos associando a pasta C:\livro com a
pasta virtual livro, do servidor IIS 5.0.
13. Digite C:\livro, conforme indicado na Figura 1.17, e d um clique no boto Avanar,
para ir para a quarta etapa do assistente.

Figura 1.17: Informando o caminho da pasta C:\livro.


14. Na quarta etapa do assistente, podemos configurar as permisses de acesso pasta
livro. Certifique-se de que as opes Leitura e Executar scripts (ASP, por exemplo)
estejam marcadas, conforme indicado pela Figura 1.18. Se a opo Executar scripts
(ASP, por exemplo) no estiver marcada, o cdigo ASP ser ignoradas pelo IIS.
15. D um clique em Avanar. Surge a tela final do assistente.
16. D um clique no boto Concluir, para finalizar o assistente.
17. Voc estar de volta ao Gerenciador do Internet Services.
18. Observe que um novo diretrio virtual chamado livro, j aparece como parte integrante
do servidor IIS, conforme indicado na Figura 1.19.

41

Criando Sites Dinmicos com ASP 3.0

Figura 1.18: Configurando as opes de segurana.

Figura 1.19: O diretrio virtual livro, recm criado.


19. Feche o Gerenciador do Internet Services.
Uma vez criado o diretrio virtual livro, o qual est associado pasta C:\livro, como posso
acessar o contedo que for colocado dentro da pasta C:\livro, ou em uma das suas subpastas?

42

Captulo 1 Uma Introduo Tecnologia ASP

A resposta para a questo acima bastante simples, basta que entendamos como so formados
os endereos em um servidor como o IIS. No nosso exemplo, o endereo do servidor
www.groza.com. Ao digitarmos este endereo, estamos acessando a pgina principal do
servidor. Vamos supor que dentro do diretrio livro fosse colocada uma pgina chamada
index.asp. Como faramos para acessar esta pgina, atravs do navegador? O endereo da
pgina em questo, seria o seguinte: www.groza.com/livro/index.asp.
A Figura 1.20, descreve em detalhes a formao deste endereo.

Nome do diretrio virtual

www.groza.com/livro/index.asp

Nome do servidor.

Nome da pgina a
ser acessada

Figura 1.20: A formao de endereos no servidor IIS.


Observe que primeiro vem o nome do servidor, depois o nome do diretrio virtual e, finalmente,
o nome da pgina a ser acessada.
Como que fica o endereo, quando eu quero acessar uma pgina que est dentro de uma
subpasta da pasta livro?
Seguindo o mesmo raciocnio anterior, fica fcil responder a esta pergunta. Vamos supor que voc
queira acessar uma pgina chamada cep.asp, que est na subpasta Capitulo1, a qual est na pasta
livro. Como fica o endereo para acessar esta pgina? A Figura 1.21, responde esta questo.

Nome do diretrio virtual

Nome da subpasta

www.groza.com/livro/Capitulo1/cep.asp

Nome da pgina a
ser acessada

Nome do servidor

Figura 1.21: A formao de endereos em subpastas do


diretorio virtual, no servidor IIS.

43

Criando Sites Dinmicos com ASP 3.0

Com isso, podemos ver que existe uma lgica bem definida para a formao dos endereos.
Apenas para confirmar, vamos dar mais alguns exemplos de formao de endereos. Considere
os casos abaixo indicados:
Qual o endereo de uma pgina chamada teste.htm, gravada no diretrio Capitulo6?
Resposta: www.groza.com/livro/Capitulo6/teste.htm.
Qual o endereo de uma pgina chamada cadastro.asp, gravada no diretrio Capitulo10?
Resposta: www.groza.com/livro/Capitulo10/cadastro.asp.
importante que voc entenda bem a maneira como o servidor IIS constri os endereos de acesso
para as pginas gravadas em seus diretrios virtuais. Observe que o diretrio virtual, simplesmente
um nome que nos leva at o diretrio real, gravado no disco. Podemos criar diversos diretrios
virtuais, em um nico servidor IIS. Em um trabalho futuro, estarei escrevendo sobre o IIS 5.0.

IMPORTANTE
Voc pode criar a estrutura sugerida neste tpico para acompanhar os exemplos deste livro.
Voc tambm pode optar pela criao de uma estrutura diferente, neste caso, lembre-se de
utilizar a estrutura correta quando estiver acompanhando os nossos exemplos.

Alguns Exemplos Prticos


Agora que j sabemos como uma pgina ASP processada e retornada para o usurio, e
tambm sabemos como acontece a formao de endereos no servidor IIS, chegou o momento
de comear a aprender a criar pginas ASP. Neste item, veremos, atravs de exemplos simples,
como criar cdigo ASP e como testar as pginas criadas. Tambm comprovaremos, na prtica,
que o que retorna do servidor para o navegador apenas cdigo HTML.

O Tradicional Hello World


Para comear, vamos criar uma pgina ASP bastante simples. Criaremos uma pgina ASP que
retorna a frase Hello World para o usurio, em diferentes tamanhos, utilizando a tag HTML
para cabealhos, do <H1> at <H6>. O <H1> a de maior tamanho, e vai diminuindo at
chegar ao menor tamanho que o <H6>.

NOTA
As listagens de cdigo deste livro, apresentam numerao de linhas. Porm, ao criar o cdigo,
no devem ser digitados os nmeros das linhas. Os nmeros so utilizados, apenas para
facilitar a explicao dos cdigos de exemplo.

44

Captulo 1 Uma Introduo Tecnologia ASP

Abra o Bloco de notas (Iniciar/Programas/Acessrios/Bloco de notas) e digite o texto indicado


na Listagem 1.1.
Listagem 1.1 O exemplo do Hello World.
1

<HTML>

<HEAD>

<TITLE>Minha primeira pgina ASP!!</TITLE>

</HEAD>

<BODY>

<%

Response.Write <H1> Hello World </H1>

Response.Write <H2> Hello World </H2>

Response.Write <H3> Hello World </H3>

10

Response.Write <H4> Hello World </H4>

11

Response.Write <H5> Hello World </H5>

12

Response.Write <H6> Hello World </H6>

13

%>

14

</BODY>

15

</HTML>

IMPORTANTE
No digite o nmero das linhas. A numerao apenas aparece na listagem, para servir como
referncia na hora de explicarmos o cdigo ASP.

Salve este documento na subpasta Capitulo1, da pasta livro. Salve o arquivo com o nome de
exemplo1.asp. Se voc tambm estiver utilizando o Bloco de notas, importante digitar a
extenso .asp, pois caso contrrio o Bloco de notas, colocar a extenso .txt.
Antes de explicarmos o cdigo da Listagem 1.1, vamos test-lo. Para testar o cdigo faa o seguinte:
1. Abra o Internet Explorer.
2. No campo endereo digite o seguinte: www.groza.com/livro/Capitulo1/exemplo1.asp
3. Tecle Enter.
Se no foram cometidos erros na hora da digitao da Listagem 1.1, o Internet Explorer mostra
o resultado da pgina exemplo1.asp, conforme indicado na Figura 1.22.

45

Criando Sites Dinmicos com ASP 3.0

Figura 1.22: O resultado da pgina exemplo1.asp.


Agora vamos falar um pouco sobre o cdigo da Listagem 1.1.
Nas linhas de 1 at 5, temos o cdigo HTML normal para qualquer pgina. De interessante
apenas a tag <TITLE> </TITLE>, que define o ttulo que ser exibido na Barra de ttulos do
Internet Explorer, quando voc acessa a pgina. Isso pode ser comprovado na Figura 1.22,
onde vemos a frase: Minha primeira pgina ASP!! Microsoft Internet Explorer, na Barra
de ttulos.
A partir da linha 6 que temos novidades. Observe, na linha 6, a utilizao de <%. Esta
combinao de sinais, indica o incio de um trecho com cdigo ASP, ou seja, cdigo que deve
ser interpretado pelo servidor IIS.
A partir da linha 7, temos a utilizao do comando Response.Write. Este comando, retorna
para o navegador, o texto que est entre aspas. No exemplo da linha 7, ser retornado
<H1>Hello World</H1>, que justamente a tag de cabealho do HTML. As demais linhas
repetem a operao, para as demais tags de cabealho do HTML.
Na linha 13, a combinao de sinais %>, indica o final do trecho de cdigo ASP, iniciado na
linha 6.

46

Captulo 1 Uma Introduo Tecnologia ASP

IMPORTANTE
Todo trecho de cdigo ASP, inicia com um <% e deve ser finalizado com um %>. Podemos
ter mais do que um trecho de cdigo ASP, dentro de um mesmo documento. Com isso podemos
ir mesclando trechos de cdigo HTML, com trechos de cdigo ASP. Essa possibilidade nos d
uma grande flexibilidade na hora de construir aplicaes para a Web. Sempre que for necessrio
algum tipo de processamento em uma pgina, podemos inserir cdigo ASP para fazer o
processamento desejado, e depois retornar o resultado no formato HTML.
As linhas 14 e 15 so tags HTML, que aparecem no final de uma pgina. A tag </BODY>
o fechamento da tag <BODY>, e a tag </HTML> o fechamento da tag <HTML>. Para
maiores detalhes sobre a linguagem HTML, consulte o livro HTML 4 Curso Bsico & Rpido,
da editora Axcel Books.
Conforme descrito anteriormente, o cdigo ASP processado pelo IIS, e o resultado deste
processamento retornado para o navegador do cliente no formato HTML. Podemos facilmente
comprovar isto.
Comprovando que o que retorna somente o cdigo HTML:
1. Se voc no estiver com a pgina exemplo1.asp aberta, abra-a conforme descrito no
exemplo anterior.
2. No menu Exibir, clique na opo Cdigo fonte.
3. Ser exibida uma janela, conforme indicado pela Figura 1.23.

Figura 1.23: Cdigo HTML, resultante do processamento da pgina exemplo1.asp.

47

Criando Sites Dinmicos com ASP 3.0

4. Observe que o cdigo retornado para o cliente, cdigo HTML puro, sem nenhum
sinal do cdigo ASP. Isso impede com que o usurio possa ter acesso ao cdigo dos
aplicativos desenvolvidos em ASP. Alm disso qualquer navegador pode ser utilizado
para acessar uma pgina ASP, uma vez que o que , efetivamente, enviado para o
cliente cdigo HTML.
5. Feche a janela indicada na Figura 1.23.
Nesse exemplo, criamos a nossa primeira pgina ASP. Onde aprendemos alguns detalhes
importantes e confirmamos outros, anteriormente apresentados. Apenas para revisar, vamos
enunciar os principais tpicos abordados:
Uma pgina pode conter um ou mais trechos com cdigo ASP.
Cada trecho de cdigo ASP, inicia com <% e termina com %>.
Uma pgina ASP identificada pela sua extenso, que deve ser .asp, caso contrrio o
cdigo ASP ser ignorado pelo servidor IIS.
O cdigo ASP processado pelo servidor IIS, e o resultado desse processamento que
retornado para o navegador do cliente, no formato de cdigo HTML. Voc pode,
facilmente, comprovar este fato, selecionando a opo Cdigo fonte, do menu Exibir,
do Internet Explorer.
Pelo fato do resultado do processamento de uma pgina ASP ser cdigo HTML, qualquer
navegador est habilitado para acessar pginas ASP, e no somente o Internet Explorer.
Para encerrarmos este captulo, vamos a mais um exemplo prtico. Na pgina exemplo1.asp,
no temos nenhuma vantagem em utilizar cdigo ASP. Poderamos utilizar cdigo HTML,
que obteramos o mesmo resultado, sem maiores problemas.
No prximo exemplo, veremos como a utilizao de ASP pode facilitar a criao de pginas
dinmicas e aplicativos para a Web. Por enquanto no se preocupe em entender todos os
comandos do ASP e do VBScript. Teremos todo este livro para aprend-los. O objetivo do
prximo exemplo salientar a natureza dinmica do ASP na gerao de pginas.

Um Exemplo de Pgina Dinmica


Vamos imaginar que voc queira criar uma pgina, onde no incio aparea a seguinte frase:
Boqueiro do Leo, 25 de Junho de 2000; ou seja, o nome da cidade, e data.

NOTA DO AUTOR
Estou utilizando Boqueiro do Leo, como exemplo, porque a minha terra natal. Claro que
pouca gente conhece, pois uma cidade pequena. Mas sempre que o tempo permite, volto
para rever familiares e amigos.

48

Captulo 1 Uma Introduo Tecnologia ASP

Poderamos criar esta pgina utilizando HTML, porm todos os dias, no final do dia, teramos
que editar a pgina para alterar a data, uma vez que a mesma no ser atualizada
automaticamente. Utilizando cdigo ASP, podemos fazer com que a pgina acesse a data do
servidor IIS e exiba a data sempre atualizada, na pgina ASP. Com isso, cada vez que a pgina
for acessada pelo usurio, o cdigo ASP ir determinar a data do servidor e enviar uma pgina
com a data atualizada. Este um exemplo, bastante simples, de uma pgina dinmica; pois a
data dinamicamente determinada pelo cdigo ASP.
A pgina da Listagem 1.2 soluciona o problema proposto.
Abra o Bloco de Notas (Iniciar/Programas/Acessrios/Bloco de notas) e digite o texto indicado
na Listagem 1.2.
Listagem 1.2 Pgina dinmica O exemplo da determinao da data.
1

<HTML>

<HEAD>

<TITLE>Minha segunda pgina ASP!!</TITLE>

</HEAD>

<BODY>

<%

data_atual=Date()

mes_atual=Month(data_atual)

Select Case mes_atual

10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

Case 1
mes_desc=Janeiro
Case 2
mes_desc=Fevereiro
Case 3
mes_desc=Maro
Case 4
mes_desc=Abril
Case 5
mes_desc=Maio
Case 6
mes_desc=Junho
Case 7
mes_desc=Julho
Case 8
mes_desc=Agosto

49

Criando Sites Dinmicos com ASP 3.0

26

Case 9

27

mes_desc=Setembro

28

Case 10

29

mes_desc=Outubro

30

Case 11

31

mes_desc=Novembro

32

Case 12

33

mes_desc=Dezembro

34

End Select

35

Response.Write Boqueiro do Leo, & Day(data_atual) & de & mes_desc & de


& Year(data_atual)

36

%>

37

<p> Aqui o restante da pgina...</p>

38

</BODY>

39

</HTML>

IMPORTANTE
No digite o nmero das linhas. A numerao apenas aparece na listagem para servir como
referncia na hora de explicarmos o cdigo ASP. Esta orientao vlida para todas as listagens
que aparecerem neste livro.

Salve este documento na subpasta Capitulo1, da pasta livro. Salve o arquivo com o nome de
exemplo2.asp. Lembre-se de digitar a extenso .asp, pois caso contrrio o Bloco de notas,
colocar a extenso .txt.
Antes de explicarmos o cdigo da Listagem 1.2, vamos test-lo. Para testar o cdigo faa o seguinte:
1. Abra o Internet Explorer.
2. No campo endereo digite: www.groza.com/livro/Capitulo1/exemplo2.asp.
3. Tecle Enter.
4. Se no foram cometidos erros na hora da digitao da Listagem 1.2, o Internet Explorer
mostra o resultado da pgina exemplo2.asp, conforme indicado na Figura 1.24.

50

Captulo 1 Uma Introduo Tecnologia ASP

Figura 1.24: O resultado da pgina exemplo2.asp.


Agora vamos falar um pouco sobre o cdigo da Listagem 1.2.
Da linha 1 at a linha 5 temos cdigo HTML.
A partir da linha 6 que temos o cdigo ASP, conforme indicado pelo sinal <%. Na linha 7,
utilizamos a funo Date( ), para atribuir a data do sistema varivel data_atual. Na linha
8, utilizamos a funo Month para extrair apenas o ms da data atual, e atribuir este valor
a varivel mes_atual. A funo Month, retorna um nmero inteiro entre 1 e 12, o qual
indica o ms do ano; 1=Janeiro, 2=Fevereiro, 3=Maro e assim por diante. Por isso, das
linhas 9 at 34, utilizamos o lao de controle Select Case ... End Select para definir a varivel
mes_desc, com base no valor retornado pela varivel mes_atual. Veremos o lao de controle
Select Case ... End Select, em detalhes, no Captulo 2.
Finalmente, na linha 35, utilizo o comando Response.Write, para retornar a data no formato
desejado. Observe que, com o comando Response.Write, posso retornar diversos valores, quer
sejam valores fixos de texto, colocados entre aspas (como no exemplo Boqueiro do Leo,),
quer sejam valores obtidos de variveis, como no caso mes_desc. Para juntar as vrias partes
que devem ser retornadas, utilizamos o operador &.
Da linha 37 at a linha 39 temos cdigo HTML.
Conforme descrito anteriormente, o cdigo ASP processado pelo IIS e o resultado deste
processamento retornado para o navegador do cliente no formato HTML. Podemos facilmente
comprovar isto.

51

Criando Sites Dinmicos com ASP 3.0

Comprovando, mais uma vez, que o que retorna somente o cdigo HTML.
1. Se voc no estiver com a pgina exemplo2.asp aberta, abra-a conforme descrito no
exemplo anterior.
2. No menu Exibir, clique na opo Cdigo fonte.
3. Ser exibida uma janela, conforme indicado pela Figura 1.25.

Figura 1.25: Cdigo HTML resultante do processamento da pgina exemplo2.asp.


4. Observe que o cdigo retornado para o cliente, cdigo HTML puro, sem nenhum sinal
do cdigo ASP. No vemos as funes utilizadas, nem mesmo o lao de controle Select
Case. O que retorna o resultado do comando Response.Write. Isso impede que o usurio
possa ter acesso ao cdigo dos aplicativos desenvolvidos em ASP. Alm disso, como j
disse anteriormente, qualquer navegador pode ser utilizado para acessar uma pgina
ASP, uma vez que o que , efetivamente, enviado para o cliente cdigo HTML.
5. Feche a janela indicada na Figura 1.25.
Veja que, neste exemplo, temos uma pgina em que o contedo gerado dinamicamente, a
partir da hora do servidor. Voc pode testar este comportamento dinmico da pgina,
facilmente. Altere a data do servidor. Carregue novamente a pgina exemplo2.asp. Observe
que a mesma j exibe a nova data. Altere novamente a data do servidor e pressione F5 para
atualizar a pgina exemplo2.asp. Isso gerao dinmica de contedo, embora at o momento
seja um contedo bastante simples. Nos prximos captulos avanaremos um pouco mais.
Agora que j entendemos os diversos aspectos envolvidos com a criao de pginas ASP,
estamos aptos a aprender um pouco mais sobre a linguagem VBScript, que estaremos utilizando
neste livro. Isso ser assunto para os Captulos 2 e 3.

52

Captulo 2 Uma Introduo ao VBScript

Captulo 2
Uma Introduo
ao VBScript

53

Criando Sites Dinmicos com ASP 3.0

Introduo
Neste captulo aprenderemos o bsico a respeito de VBScript. Veremos exatamente o que
VBScript, e onde utiliz-lo. Aprenderemos que possvel executar cdigo VBScript, tanto no
navegador do cliente, quanto no servidor Web. Depois apresentaremos os aspectos bsicos da
linguagem, tais como a declarao de variveis, operadores e laos de controle. medida em
que os conceitos forem sendo apresentados, iremos trabalhando com exemplos prticos, para
que os conceitos possam ser melhor entendidos. Tambm aprenderemos a criar sub-rotinas e
funes. Na parte final do captulo, desenvolveremos alguns exemplos prticos de utilizao
de VBScript, na criao de pginas. Ao completar este captulo, voc ter uma noo bsica
de VBScript, e ser capaz de criar solues simples utilizando esta linguagem.

NOTA
Os exemplos apresentados nas listagens deste captulo, podem ser criados utilizando-se um
redator de texto, como o Bloco de notas, e salvando os arquivos com a extenso .htm. Depois
s abrir os mesmos no Internet Explorer e testar. Os nmeros das linhas que aparecem nas
listagens, no devem ser digitados. Os mesmos foram includos, nas respectivas listagens,
apenas para facilitar o acompanhamento das explicaes de cada exemplo.

O que VBScript
VBScript uma linguagem de criao de scripts, a qual derivada do Visual Basic (VB) e do
VBA (Visual Basic for Applications). O Visual Basic o ambiente de desenvolvimento grfico
mais utilizado para o desenvolvimento de aplicaes para o ambiente Windows. Como o
nome sugere, a programao em Visual Basic baseada na linguagem de programao Basic.
O VBA derivado do Visual Basic (de certa forma, podemos dizer que um subconjunto do
VB), e a linguagem utilizada para automatizar tarefas nos aplicativos do Microsoft Office.
Por exemplo, quando voc precisa criar cdigo para automatizar alguma tarefa no Microsoft
Excel ou no Microsoft Access, voc est utilizando o VBA.
Se voc j conhece VB ou VBA ir sentir-se bastante vontade com VBScript. Muitos dos
comandos bsicos, como estruturas de controle, declaraes de variveis, operadores e
funes, so idnticos. Na verdade alguns artigos definem VBScript como sendo um
subconjunto do VB.
Devemos considerar alguns fatos importantes, dentre os quais podemos destacar:
VBScript uma linguagem para a criao de scripts. Um script no compilado para
gerar um programa executvel, ao invs disso, cada linha do script interpretada, e
executada.

54

Captulo 2 Uma Introduo ao VBScript

O cdigo escrito juntamente com uma pgina HTML. A pgina enviada para o
navegador, o qual interpreta e executa o cdigo VBScript, uma linha por vez. O suporte
VBScript nativo no Internet Explorer, j no Netscape Navigator o suporte VBScript
se d atravs da instalao de um plug-in.

NOTA
Um plug-in um programa que estende a funcionalidade de um navegador. No nosso exemplo
estamos falando de um plug-in que permite que o Netscape Navigator interprete e execute
cdigo VBScript.
Com a utilizao do VBScript, podemos ampliar as capacidades de uma pgina HTML,
tornando-a mais funcional e interativa. Podemos realizar clculos, exibir mensagens
em janelas pop-up, detectar eventos tais como o clique em um link ou em um boto de
comando, criar menus interativos, etc. Podemos utilizar cdigo VBScript para fazer a
validao dos dados de um formulrio. Caso exista erro em algum campo, ou caso
algum campo obrigatrio no tenha sido preenchido, podemos retornar uma mensagem
para o usurio, com os dados que o mesmo preencheu, indicando qual ou quais campos esto com problema. Com isso o usurio corrige os problemas, antes que os dados
sejam enviados para o servidor, reduzindo as possibilidades de erro e agilizando o
processamento das informaes. So muitas as possibilidades.
A linguagem VBScript foi desenvolvida tendo-se a segurana como uma de suas
diretrizes. Atravs do uso de VBScript, no possvel criar uma pgina, por exemplo,
que tenha acesso ao sistema de arquivos do computador e possa apagar ou modificar
informaes. Evidentemente que a criatividade de hackers mal intencionados no tem
limites. Porm diversos cuidados foram tomados, pela Microsoft, para tornar a VBScript
uma linguagem segura.
Pela semelhana com o Visual Basic, VBScript uma linguagem de fcil aprendizado.
Se voc j programa em Visual Basic, aprender VBScript ser simplesmente uma questo
de saber o que possvel fazer com VBScript e quais so as suas limitaes.
Conforme podemos concluir, VBScript uma linguagem para a criao de scripts, os quais
ampliam a funcionalidade das pginas HTML.
No prximo item faremos uma reviso rpida os principais elementos de uma pgina HTML.
Como o cdigo VBScript que roda no cliente escrito dentro da prpria pgina HTML,
importante que saibamos identificar seus principais elementos. Alm disso, conforme veremos
a partir do Captulo 4, uma pgina ASP mistura as tags HTML com elementos de cdigo ASP.
Por isso importante que saibamos reconhecer os principais elementos de uma pgina HTML.
Para maiores informaes sobre HTML, consulte o livro HTML 4 Curso Bsico & Rpido, da
editora Axcel Books.

55

Criando Sites Dinmicos com ASP 3.0

Uma Reviso Rpida de HTML


Conforme descrevemos na introduo desse livro, as pginas da Internet, so criadas
utilizando-se da linguagem HTML Hypertext Markup Language. Uma traduo seria:
Linguagem de Marcao de Texto. As pginas ficam gravadas no servidor Web, e quando o
cliente digita um endereo solicitando determinada pgina, a mesma transportada at o
navegador do cliente. O navegador interpreta o cdigo HTML e exibe a pgina, j formatada.
Neste tpico, faremos uma reviso rpida sobre os principais elementos de uma pgina HTML,
bem como sobre os principais elementos para a construo de formulrios, como campos
para a digitao de texto, que estaro sendo usados durante os exemplos deste livro.

Estrutura Bsica de uma Pgina HTML


Todo documento HTML apresenta a mesma estrutura bsica. Documentos HTML so criados
utilizando o que chamamos de tag ou marcador. Por exemplo, existe uma tag para fazer
com que o navegador exiba um determinado texto em negrito, outra tag para exibir texto em
itlico, um conjunto de tags para criar as linhas e colunas de uma tabela, e assim por diante.
Na Listagem 2.1, vemos um exemplo da estrutura bsica de um documento HTML.
Listagem 2.1 O exemplo do Hello World.
1

<HTML>

<HEAD>

<META NAME=GENERATOR Content=Microsoft Front Page 4.0>

<TITLE>Criando Sites dinmicos com ASP 3.0 !!!</TITLE>

</HEAD>

<BODY>

<P>Uma Pgina HTML muito simples !!!!</P>

</BODY>

</HTML>

IMPORTANTE
Cabe novamente ressaltar, que os nmeros de linha, no fazem parte do cdigo HTML. Apenas
foram colocados na listagem para facilitar a explicao da mesma. Esta recomendao vlida
para todas as listagens apresentadas neste livro. Com isso, se voc for digitar esta listagem,
no digite o nmero das linhas. Este fato pode ser comprovado pela Figura 2.1.

56

Captulo 2 Uma Introduo ao VBScript

As maioria das tags HTML so formadas por pares. Conforme podemos ver na Listagem 2.1,
todo documento HTML, comea com a tag <HTML> e termina com uma tag </HTML>
(linhas 1 e 9, respectivamente).
Logo aps a tag <HTML>, temos a tag <HEAD>. Dentro das tags <HEAD> e </HEAD>
podemos colocar diversas informaes, muitas vezes chamadas de Metainformao. Contida
nesta seo do documento est a informao a respeito do prprio documento, como por
exemplo: qual o programa utilizado para gerar o documento, nome do autor, data de criao,
etc. As informaes contidas nesta seo do documento, so utilizadas, muitas vezes, pelos
mecanismos de pesquisa da Internet, como o Altavista (www.altavista.digital.com) e o Yahoo
(www.yahoo.com). Uma tag especial, que podemos utilizar a tag <TITLE> </TITLE>. O
texto colocado dentro desta tag, ser exibido na Barra de ttulos do navegador. Este fato pode
ser comprovado pela Figura 2.1.

Figura 2.1: Um exemplo de utilizao da tag <TITLE> </TITLE>.


Observe o ttulo que aparece na Barra de ttulos da Figura 2.1. Logo aps o ttulo, no caso do
Internet Explorer, aparece a expresso: Microsoft Internet Explorer.

57

Criando Sites Dinmicos com ASP 3.0

Aps o par de tags <HEAD> </HEAD>, temos a tag <BODY>. A partir da tag <BODY>, na
linha 6, que comea a parte do documento que ser exibida pelo navegador. Tudo o que
estiver entre o par de chaves <BODY> </BODY> contedo que deve ser exibido pelo
navegador. Neste nosso exemplo, muito simples, temos apenas um pargrafo de texto sendo
exibido. A tag que define uma pargrafo de texto <P> </P>, conforme indicado na linha 7.
Esta a estrutura bsica de todo documento HTML.
Cada tag do HTML pode conter um ou mais atributos. Um atributo modifica a maneira como
o navegador exibe o contedo da pgina. Por exemplo, na Listagem 2.2, estamos utilizando o
atributo color da tag <FONT>, para modificar as caractersticas da fonte do texto a ser exibido.
Listagem 2.2 Utilizando atributos da tag <FONT> </FONT>.
1

<HTML>

<HEAD>

<META NAME=GENERATOR Content=Microsoft Front Page 4.0>

<TITLE>Criando Sites dinmicos com ASP 3.0 !!!</TITLE>

</HEAD>

<BODY>

<P><FONT color=navy><B>Uma Pgina HTML muito simples !!!!</B></FONT> </P>

</BODY>

</HTML>

Neste caso, na linha 7, o atributo color definido para o valor navy, o qual equivale a uma
fonte de cor azul marinho. Observe que a tag <FONT> </FONT> utilizada dentro da tag
de pargrafo, para modificar as caractersticas da fonte deste pargrafo. Tambm utilizamos a
tag <B></B>, para fazer com que o texto fosse exibido em negrito. Ao visualizar este
documento, no navegador, o texto Uma Pgina HTML muito simples !!! ser exibido em
negrito e com fonte de cor azul marinho.
Um estudo mais detalhado sobre as tags da linguagem HTML foge ao escopo deste livro.
Novamente indico o livro HTML 4 Curso Bsico & Rpido, da editora Axcel Books, para
maiores informaes sobre a linguagem HTML. Apenas como um exemplo de uma pgina
mais completa, considere a Listagem 2.3, onde utilizamos as tags para criao de tabelas.
<TABLE> e </TABLE>, para criar a tabela; <TR> e </TR> para criar novas linhas; <TD>
e </TD>, para criar as clulas dentro de uma linha da tabela.
Listagem 2.3 Uma pgina HTML com diversas tags.
1

<HTML>

<HEAD>

58

Captulo 2 Uma Introduo ao VBScript

<META NAME=GENERATOR Content=Microsoft Visual Studio 6.0>

<TITLE>Criando Sites dinmicos com ASP 3.0 !!!</TITLE>

</HEAD>

<BODY>

<P><FONT color=navy><B>Produo de SOJA da Regio Sul !!!</B></FONT></P>

<TABLE border=1 cellPadding=1 cellSpacing=1 width=75%>

9
10
11

<TR>
<TD align=middle>Ano de Produo</TD>
<TD align=middle>Produo em Toneladas</TD>

12

</TR>

13

<TR>

14
15

<TD align=middle>1996</TD>
<TD align=middle>23450</TD>

16

</TR>

17

<TR>

18

<TD align=middle>1997</TD>

19

<TD align=middle>32456</TD>

20

</TR>

21

<TR>

22
23

<TD align=middle>1998</TD>
<TD align=middle>33000</TD>

24

</TR>

25

<TR>

26
27

<TD align=middle>1999</TD>
<TD align=middle>32560</TD>

28

</TR>

29

</TABLE>

30

<P>Dados atualizados em -&gt; 30/06/2000.</P>

31

</BODY>

32

</HTML>

Na Figura 2.2, temos o documento da Listagem 2.3, sendo exibido no navegador.

59

Criando Sites Dinmicos com ASP 3.0

Figura 2.2: Um exemplo de utilizao da tag <TABLE> </TABLE>.


No prximo item estudaremos algumas tags ligadas a criao de formulrios com HTML.
Estudaremos estas tags em maiores detalhes, pois estaremos utilizando-as em diversos
exemplos deste livro.

Tags Para a Criao de Formulrios HTML


A criao de formulrios, permite que o usurio preencha alguns campos e envie os dados
para o servidor Web. Por exemplo, quando voc est comprando pela Internet, em um
determinado momento, precisa fornecer informaes, como o endereo de entrega, telefone
de contato, etc. Voc preenche estas informaes em um formulrio. Normalmente, existe
um boto Enviar, no qual voc deve clicar, aps ter preenchido os dados necessrios. So
muitas as aplicaes onde utilizamos formulrios.

Criando o Formulrio a tag <FORM> </FORM>


Um formulrio criado utilizando as tags <FORM> </FORM>. Na Listagem 2.4, temos um
exemplo de utilizao da tag <FORM>.

60

Captulo 2 Uma Introduo ao VBScript

Listagem 2.4 Tag para a criao de formulrios.


1

<HTML>

<HEAD>

<META NAME=GENERATOR Content=Microsoft Front Page 4.0>

<TITLE>Um exemplo simples de formulrio.</TITLE>

</HEAD>

<BODY>

<P>Cadastro de Clientes:<BR>

Preencha os campos e clique no boto Enviar Dados.</P>

<P>

10

<FORM action= id=FORM1 method=post name=FORM1><BR>


{ Aqui teramos tags HTML de definio do formulrio }

11

</FORM>

12

</BODY>

13

</HTML>

O atributo mais importante da tag <FORM> o action. No atributo action, devemos informar
o endereo de uma pgina ASP, um script CGI, ou qualquer outro elemento capaz de processar
os dados digitados em um formulrio. O usurio preenche os campos do formulrio, e, ao
clicar no boto Enviar, chamada a pgina ou programa indicados no atributo action, o qual
responsvel por processar as informaes do formulrio.
Na Listagem 2.5, temos um exemplo em que uma pgina ASP responsvel por processar os
dados enviados pelo formulrio.
Listagem 2.5 O atributo action contm o endereo de uma pgina ASP.
1

<HTML>

<HEAD>

<META NAME=GENERATOR Content=Microsoft Front Page 4.0>

<TITLE>Um exemplo simples de formulrio.</TITLE>

</HEAD>

<BODY>

<P>Cadastro de Clientes: <BR>

Preencha os campos e clique no boto Enviar Dados.</P>

<P>

10

<FORM action=http://www.meusite.com/processa.asp id=FORM1 method=post


name=FORM1><BR>

61

Criando Sites Dinmicos com ASP 3.0

{ Aqui teramos tags HTML de definio do formulrio }


11

</FORM>

12

</BODY>

13

</HTML>

A Figura 2.3 ilustra este processo.

Banco de
Dados

Cliente

Servidor Web

O usurio preenche os dados do formulrio


e clica no boto Enviar. A pgina ASP,
especificada na tag action chamada.

A pgina ASP, no servidor, recebe os dados enviados pelo


formulrio e armazena os dados em um banco de dados,
como o Microsoft SQL Server, ou Microsoft Access.

Figura 2.3: A Pgina ASP armazena os dados digitados no formulrio, em um banco de dados.
Neste caso, a pgina ASP recebe os dados do formulrio preenchido pelo cliente, processa esses
dados, e os armazena em um banco de dados. O servidor de Banco de Dados pode ser o mesmo
servidor Web, ou um equipamento separado. Aps armazenar os dados no banco de dados, a
pgina ASP envia cdigo HTML puro, de volta para o cliente. Normalmente a pgina HTML, que
retorna para o cliente, apresenta uma mensagem dizendo que os dados foram enviados com
sucesso, ou, no caso de erros, apresenta uma mensagem de erro, com a possvel causa do problema.
A partir do Captulo 4, estaremos aprendendo a criar pginas ASP para tratar com formulrios
e armazenar os dados enviados em bancos de dados, bem como para fazer pesquisas em
banco de dados.

Criando uma Caixa de Texto a Tag <INPUT TYPE=TEXT>


A tag <INPUT TYPE=TEXT> cria uma caixa de texto, na qual podem ser exibidos e tambm
digitados valores, quer sejam nmeros ou textos. Esta tag possui os seguintes atributos:

62

Captulo 2 Uma Introduo ao VBScript

Tabela 2.1 Atributos da tag <INPUT TYPE=TEXT>.


Atributo

Descrio

TYPE

Indica o tipo do campo, no caso de campos para digitar ou


exibir informao, utilizamos TEXT.

SIZE

Determina o tamanho do campo que ser exibido no


navegador.

MAXSIZE

Tamanho mximo de caracteres do campo. MAXSIZE pode


ser maior do que SIZE. Neste caso o navegador rola o
contedo do campo, quando o mesmo atingir o nmero de
caracteres definido por SIZE.

NAME

o nome associado ao campo, o qual ser utilizado pela


pgina ASP, para fazer referncia a este campo.

VALUE

o valor padro do campo. Por exemplo, para um campo


Cidade, podemos definir o atributo VALUE como So Paulo.
Neste caso, ao carregar o formulrio no navegador, o campo
Cidade, j vem com o valor So Paulo. Caso seja necessrio, o
usurio pode modificar este valor.

ID

Utilizado por linguagens de script, como o VBScript.

Na Listagem 2.6, temos um exemplo de criao de um formulrio com dois campos para
entrada de texto. Um para o nome, outro para o endereo.
Listagem 2.6 Um formulrio com dois campos de texto.
1

<HTML>

<HEAD>

<META NAME=GENERATOR Content=Microsoft Front Page 4.0>

<TITLE></TITLE>

</HEAD>

<BODY>

<P>Digite os dados solicitados, depois clique no boto Enviar:</P>

<FORM action= id=FORM1 method=post name=FORM1>

<P>Nome: <INPUT type=text id=nome name=nome maxlength=20 ></P>

63

Criando Sites Dinmicos com ASP 3.0

10

<P>Endereo: <INPUT type=text id=endereco name=endereco maxlength=20 ></P>

11

</FORM>

12

</BODY>

13

</HTML>

Nas linhas 9 e 10, temos o cdigo HTML, que cria os dois campos do formulrio. A Figura
2.4 mostra este formulrio, sendo visualizado no Internet Explorer, com os dados digitados
pelo usurio.

Figura 2.4: Visualizando um formulrio simples no Internet Explorer.

Criando uma Caixa de Texto Para a Digitao


de Senhas a tag <INPUT TYPE=PASSWORD>
A tag <INPUT TYPE=PASSWORD> cria uma caixa de texto, apropriada para a digitao
de senhas, pois enquanto o usurio digita a senha, so exibidos, somente asteriscos (*). Isso
impede que algum, descubra a senha do usurio, simplesmente observando quando o mesmo
est preenchendo o formulrio. Esta tag possui os atributos descritos a seguir.
Tabela 2.2 Atributos da tag <INPUT TYPE=PASSWORD>.
Atributo

Descrio

TYPE

Indica o tipo do campo, no caso de campos para digitar


senhas, utilizamos PASSWORD.

64

Captulo 2 Uma Introduo ao VBScript

Atributo

Descrio

SIZE

Determina o tamanho do campo que ser exibido no


navegador.

MAXSIZE

Tamanho mximo de caracteres do campo. MAXSIZE


pode ser maior do que SIZE. Neste caso o navegador
rola o contedo do campo, quando o mesmo atingir o
nmero de caracteres definido por SIZE.

NAME

o nome associado ao campo, o qual ser utilizado pela


pgina ASP, para fazer referncia ao campo.

VALUE

o valor padro do campo. Normalmente deixado em


branco.

ID

Utilizado por linguagens de script, como o VBScript.

Na Listagem 2.7, temos um exemplo de criao de um formulrio com um campo para a


digitao de senhas.
Listagem 2.7 Formulrio com um campo para a digitao de senha.
1

<HTML>

<HEAD>

<META NAME=GENERATOR Content=Microsoft Front Page 4.0>

<TITLE></TITLE>

</HEAD>

<BODY>

<P>Digite os dados solicitados, depois clique no boto Enviar:</P>

<FORM action= id=FORM1 method=post name=FORM1>

<P>Nome: <INPUT type=text id=nome name=nome maxlength=20 ></P>

10

<P>Endereo: <INPUT type=text id=endereco name=endereco maxlength=20 ></P>

11

<P>Senha: <INPUT type=password id=senha name=senha maxLength=10></P>

12

</FORM>

13

</BODY>

14

</HTML>

Na linha 11, temos o cdigo HTML, que cria o campo para a digitao de senha. A Figura 2.5,
mostra este formulrio, sendo visualizado no Internet Explorer, j com os dados digitados
pelo usurio.

65

Criando Sites Dinmicos com ASP 3.0

Figura 2.5: O campo para senha exibe somente asteriscos (*).

Criando um Check Box a tag <INPUT TYPE=CHECKBOX>


A tag <INPUT TYPE=CHECKBOX> cria um pequeno quadradinho, conhecido como Check
Box. Um Check Box, pode estar em dois estados: marcado ou desmarcado. Normalmente
utilizado para a entrada de dados. Por exemplo, voc pode estar utilizando um formulrio
para pesquisa, no qual podem existir questes que permitam a escolha de mais do que uma
alternativa. Neste caso, a utilizao de vrias tags do tipo Check Box o mais indicado. Esta
tag possui os seguintes atributos.
Tabela 2.3 Atributos da tag <INPUT TYPE=CHECKBOX>.
Atributo

Descrio

TYPE

Indica o tipo do campo, neste caso, utilizamos


CHECKBOX.

CHECKED

Indica se o Check Box est, inicialmente, marcado ou no.

NAME

o nome associado ao campo, o qual ser utilizado pela


pgina ASP, para fazer referncia a este campo.

ID

Utilizado por linguagens de script, como o VBScript.

VALUE

o valor de retorno do campo, caso o Check Box seja marcado.

66

Captulo 2 Uma Introduo ao VBScript

Na Listagem 2.8, temos um exemplo de criao de um formulrio com a utilizao de vrios


Check Box.
Listagem 2.8 Um formulrio com vrios Check Box.
1

<HTML>

<HEAD>

<META NAME=GENERATOR Content=Microsoft Front Page 4.0>

<TITLE></TITLE>

</HEAD>

<BODY>

<P>Digite os dados solicitados, depois clique no boto Enviar:</P>

<FORM action= id=FORM1 method=post name=FORM1>

<P>Nome: <INPUT type=text id=nome name=nome maxlength=20 ></P>

10

<P>Endereo: <INPUT type=text id=endereco name=endereco maxlength=20 ></P>

11

<P>Senha: <INPUT type=password id=senha name=senha maxLength=10></P>

12

<P>Certificaes:

13

<INPUT id=MCP name=MCP type=checkbox value=MCP> MCP

14

<INPUT id=MCSE name=MCSE type=checkbox value=MCSE>MCSE

15

<INPUT id=MCDBA name=MCDBA type=checkbox value=MCDBA>MCDBA

16

<INPUT id=MCSD name=MCSD type=checkbox value=MCSD>MCSD</P>

17

</FORM>

18

</BODY>

19

</HTML>

Nas linhas de 13 a 16, temos o cdigo HTML que cria os diversos Check Box. Quando o
usurio seleciona um determinado Check Box, o valor do atributo value associado com o
Check Box, que, por sua vez, pode ser armazenado em um campo de uma tabela do banco de
dados, pela pgina ASP, responsvel pelo processamento dos dados do formulrio. A Figura
2.6 mostra este formulrio, sendo visualizado no Internet Explorer, onde o usurio digitou
dados nos campos e marcou alguns dos Check Box disponveis. Observe que mais do que um
Check Box pode ser marcado.

67

Criando Sites Dinmicos com ASP 3.0

Figura 2.6: O usurio selecionou vrios Check Box.

Criando um Conjunto de Radio Buttons a tag <INPUT TYPE=RADIO>


A tag <INPUT TYPE=RADIO> cria um Radio Button. Um Radio Button pode estar em
dois estados: marcado ou desmarcado. Utilizamos estes elementos em grupos. A caracterstica
de um grupo de Radio Buttons que somente um dos Radio Button do grupo pode estar
selecionado. Se voc clicar em um Radio Button que no est selecionado, este ser
selecionado, e o que estava selecionado ser desmarcado. Para criar um grupo de Radio Buttons,
bastante simples, basta atribuir o mesmo valor para o atributo name, para todos os Radio
Buttons, que faro parte do grupo. Desta maneira, de todos os Radio Buttons que tiverem o
mesmo nome, somente um poder estar selecionado em um determinado momento. Esta tag
possui os atributos descritos na Tabela 2.4.
Tabela 2.4 Atributos da tag <INPUT TYPE=RADIO>.
Atributo

Descrio

TYPE

Indica o tipo do campo, neste caso, utilizamos RADIO.

NAME

o nome associado a todos os Radio Buttons que fazem


parte do mesmo grupo, o qual ser utilizado pela pgina
ASP, para fazer referncia ao campo.

68

Captulo 2 Uma Introduo ao VBScript

Atributo

Descrio

ID

Utilizado por linguagens de script, como o VBScript.

VALUE

o valor de retorno do campo, caso o Radio Button seja


marcado.

Na Listagem 2.9, temos um exemplo de criao de um formulrio com a utilizao de um


grupo de Radio Buttons, para a seleo do tipo de carto de crdito.
Listagem 2.9 Um formulrio com um grupo de Radio Buttons.
1

<HTML>

<HEAD>

<META NAME=GENERATOR Content=Microsoft Front Page 4.0>

<TITLE></TITLE>

</HEAD>

<BODY>

<P>Digite os dados solicitados, depois clique no boto Enviar:</P>

<FORM action= id=FORM1 method=post name=FORM1>

<P>Nome: <INPUT type=text id=nome name=nome maxlength=20 ></P>

10

<P>Endereo: <INPUT type=text id=endereco name=endereco maxlength=20 ></P>

11

<P>Senha: <INPUT type=password id=senha name=senha maxLength=10></P>

12

<P>Certificaes:

13

<INPUT id=MCP name=MCP type=checkbox value=MCP>MCP

14

<INPUT id=MCSE name=MCSE type=checkbox value=MCSE>MCSE

15

<INPUT id=MCDBA name=MCDBA type=checkbox value=MCDBA>MCDBA

16

<INPUT id=MCSD name=MCSD type=checkbox value=MCSD>MCSD</P>

17

<P>Selecione o Carto de Crdito:</P>

18

<P>

19

<INPUT id=cartao name=cartao type=radio value=Visa>Visa

20

<INPUT id=cartao name=cartao type=radio value=Master Card>Master Card

21

<INPUT id=cartao name=cartao type=radio value=Outros>Outros

22

</P>

23

</FORM>

24

</BODY>

25

</HTML>

69

Criando Sites Dinmicos com ASP 3.0

Nas linhas de 19 a 21, temos o cdigo HTML que cria os diversos Radio Buttons. Quando o
usurio seleciona um dos Radio Buttons, o valor do atributo value associado com o grupo
de Radio Buttons, que, por sua vez, pode ser armazenado em um campo de uma tabela do
banco de dados, pela pgina ASP responsvel pelo processamento dos dados do formulrio.
A Figura 2.7 mostra este formulrio, sendo visualizado no Internet Explorer, onde o usurio
digitou dados nos campos e marcou uma das opes disponveis para o carto de crdito.
Nunca demais lembrar que o usurio somente conseguir marcar uma das opes.

Figura 2.7: O usurio somente consegue selecionar uma


das opes para o carto de crdito.

Criando um Campo Para Digitao de Comentrios


e Textos Maiores a tag <TEXTAREA> </TEXTAREA>
A tag <TEXTAREA> </TEXTAREA> cria um campo para a digitao de quantidades maiores
de texto no formulrio. Por exemplo, pode ser um campo para digitao de comentrios,
crticas e sugestes, ou um campo para detalhar a descrio de um produto, no caso de uma
pgina que apresenta um catlogo de produtos. Esta tag possui os seguintes atributos.

70

Captulo 2 Uma Introduo ao VBScript

Tabela 2.5 Atributos da tag <TEXTAREA> </TEXTAREA>.


Atributo

Descrio

NAME

o nome associado ao campo, o qual ser utilizado pela pgina


ASP, para fazer referncia ao campo.

ID

Utilizado por linguagens de script, como o VBScript.

WRAP

Determina se o texto deve trocar automaticamente de linha,


quando for atingido o tamanho limite do campo. O valor padro
para este campo SOFT.

Na Listagem 2.10, temos um exemplo de criao de um formulrio com a utilizao de um


campo para a digitao de sugestes e comentrios.
Listagem 2.10 Um formulrio com um campo para sugestes e comentrios.
1

<HTML>

<HEAD>

<META NAME=GENERATOR Content=Microsoft Front Page 4.0>

<TITLE></TITLE>

</HEAD>

<BODY>

<P>Digite os dados solicitados, depois clique no boto Enviar:</P>

<FORM action= id=FORM1 method=post name=FORM1>

<P>Nome: <INPUT type=text id=nome name=nome maxlength=20 ></P>

10

<P>Endereo: <INPUT type=text id=endereco name=endereco maxlength=20 ></P>

11

<P>Senha: <INPUT type=password id=senha name=senha maxLength=10></P>

12

<P>Certificaes:

13

<INPUT id=MCP name=MCP type=checkbox value=MCP>MCP

14

<INPUT id=MCSE name=MCSE type=checkbox value=MCSE>MCSE

15

<INPUT id=MCDBA name=MCDBA type=checkbox value=MCDBA>MCDBA

16

<INPUT id=MCSD name=MCSD type=checkbox value=MCSD>MCSD</P>

17

<P>Selecione o Carto de Crdito:</P>

18

<P>

19

<INPUT id=cartao name=cartao type=radio value=Visa>Visa

20

<INPUT id=cartao name=cartao type=radio value=Master Card>Master Card

71

Criando Sites Dinmicos com ASP 3.0

21

<INPUT id=cartao name=cartao type=radio value=Outros>Outros

22

</P>

23

<TEXTAREA id=coment name=coment wrap=SOFT> </TEXTAREA>

24

</FORM>

25

</BODY>

26

</HTML>

Na linha 23, temos o cdigo HTML, que cria o campo para a digitao do texto, para as
crticas e sugestes. A Figura 2.8 mostra este formulrio, sendo visualizado no Internet Explorer,
com as crticas e sugestes digitadas pelo usurio.

Figura 2.8: O usurio digita suas crticas e sugestes.

Criando uma Lista de Opes (Caixa de Combinao) a tag


<SELECT></SELECT> em Combinao com <OPTION></OPTION>
A tag <SELECT></SELECT> cria a lista, e as tags <OPTION></OPTION> definem os
elementos da lista. Esta lista chamada de Caixa de combinao, na qual apresentada uma

72

Captulo 2 Uma Introduo ao VBScript

lista de valores, dentre os quais o usurio pode clicar selecionando uma ou mais opes. Cada
opo (definida pela tag <OPTION></OPTION>) possui um valor que exibido na lista, e um
valor associado, caso esta opo seja selecionada. Este valor associado que ser armazenado
no banco de dados, pela pgina ASP. Veja os principais atributos da tag <SELECT></SELECT>.
Tabela 2.6 Atributos da tag <SELECT></SELECT>.
Atributo

Descrio

NAME

o nome associado lista, o qual ser utilizado pela


pgina ASP, para fazer referncia ao campo.

ID

Utilizado por linguagens de script, como o VBScript.

MULTIPLE

Pode ser True ou False. Caso seja True, permite que sejam
selecionados mltiplo itens.

Na Listagem 2.11, temos um exemplo de um formulrio com a criao de uma lista bairro,
com trs valores possveis.
Listagem 2.11 Um formulrio com uma Caixa de combinao bairro.
1

<HTML>

<HEAD>

<META NAME=GENERATOR Content=Microsoft Front Page 4.0>

<TITLE></TITLE>

</HEAD>

<BODY>

<P>Digite os dados solicitados, depois clique no boto Enviar:</P>

<FORM action= id=FORM1 method=post name=FORM1>

<P>Nome: <INPUT type=text id=nome name=nome maxlength=20 ></P>

10

<P>Endereo: <INPUT type=text id=endereco name=endereco maxlength=20 ></P>

11

<P>Senha: <INPUT type=password id=senha name=senha maxLength=10></P>

12

<P>Selecione o bairro:

13

<SELECT id=bairro name=bairro>

14

<OPTION selected value=CENTRO>CENTRO</OPTION>

15

<OPTION value=CAMOBI>CAMOBI</OPTION>

16
17

<OPTION value=DORES>DORES</OPTION>
</SELECT>

18

</P>

19

<P>Certificaes:

20

<INPUT id=MCP name=MCP type=checkbox value=MCP>MCP

21

<INPUT id=MCSE name=MCSE type=checkbox value=MCSE>MCSE

73

Criando Sites Dinmicos com ASP 3.0

22

<INPUT id=MCDBA name=MCDBA type=checkbox value=MCDBA>MCDBA

23

<INPUT id=MCSD name=MCSD type=checkbox value=MCSD>MCSD</P>

24

<P>Selecione o Carto de Crdito:</P>

25

<P>

26

<INPUT id=cartao name=cartao type=radio value=Visa>Visa

27

<INPUT id=cartao name=cartao type=radio value=Master Card>Master Card

28

<INPUT id=cartao name=cartao type=radio value=Outros>Outros

29

</P>

30

<TEXTAREA id=coment name=coment wrap=SOFT> </TEXTAREA>

31

</FORM>

32

</BODY>

33

</HTML>

Nas linhas 13 a 17, temos o cdigo HTML que cria a Caixa de combinao. Na primeira opo
<OPTION selected value=CENTRO>CENTRO</OPTION>, a palavra selected, indica que
esta opo deve estar selecionada por padro. A Figura 2.9 mostra este formulrio, com a
opo DORES sendo selecionada na Caixa de combinao bairros.

Figura 2.9: Selecionando uma opo, na Caixa de combinao.

74

Captulo 2 Uma Introduo ao VBScript

Finalizando o Formulrio com os Botes Enviar Dados e Limpar Dados


as Tags <INPUT TYPE=SUBMIT> e <INPUT TYPE=CLEAR>
Todo formulrio deve ter um boto do tipo Submit. Ao clicar neste boto, chamada a pgina
ASP (ou outro endereo indicado), indicada no atributo action do formulrio. A pgina ASP
processa os dados enviados pelo formulrio HTML, podendo, por exemplo, adicionar os dados
digitados em uma tabela de um banco de dados. Na Tabela 2.7, temos os atributos para um
boto do tipo Submit.
Tabela 2.7 Atributos da tag <INPUT TYPE=SUBMIT>.
Atributo

Descrio

TYPE

Deve ser definido como Submit.

NAME

Utilizado por linguagens de script, como o VBScript.

ID

Utilizado por linguagens de script, como o VBScript.

VALUE

o texto que ser exibido no boto.

Embora no seja de uso obrigatrio, bastante comum termos um boto do tipo Reset. Ao
clicar neste boto, todos os campos do formulrio so apagados. O projetista da aplicao
Web quem ir definir a necessidade, ou no, da utilizao de um boto do tipo Reset. Na
Tabela 2.8, temos os atributos para um boto do tipo Reset.
Tabela 2.8 Atributos da tag <INPUT TYPE=RESET>.
Atributo

Descrio

TYPE

Deve ser definido como Reset.

NAME

Utilizado por linguagens de script, como o VBScript.

ID

Utilizado por linguagens de script, como o VBScript.

VALUE

o texto que ser exibido no boto.

Na Listagem 2.12, completamos o nosso formulrio de exemplo, com a adio de um boto


do tipo Submit e outro boto do tipo Reset.
Listagem 2.12 O formulrio completo, com os botes do tipo Submit e Reset j includos.
1

<HTML>

<HEAD>

75

Criando Sites Dinmicos com ASP 3.0

<META NAME=GENERATOR Content=Microsoft Front Page 4.0>

<TITLE></TITLE>

</HEAD>

<BODY>

<P>Digite os dados solicitados, depois clique no boto Enviar dados.</P>

<FORM action= id=FORM1 method=post name=FORM1>

<P>Nome: <INPUT type=text id=nome name=nome maxlength=20 ></P>

10

<P>Endereo: <INPUT type=text id=endereco name=endereco maxlength=20 ></P>

11

<P>Senha: <INPUT type=password id=senha name=senha maxLength=10></P>

12

<P>Selecione o bairro:

13

<SELECT id=bairro name=bairro>

14

<OPTION selected value=CENTRO>CENTRO</OPTION>

15

<OPTION value=CAMOBI>CAMOBI</OPTION>

16
17

<OPTION value=DORES>DORES</OPTION>
</SELECT>

18

</P>

19

<P>Certificaes:

20

<INPUT id=MCP name=MCP type=checkbox value=MCP> MCP

21

<INPUT id=MCSE name=MCSE type=checkbox value=MCSE>MCSE

22

<INPUT id=MCDBA name=MCDBA type=checkbox value=MCDBA>MCDBA

23

<INPUT id=MCSD name=MCSD type=checkbox value=MCSD>MCSD</P>

24

<P>Selecione o Carto de Crdito:</P>

25

<P>

26

<INPUT id=cartao name=cartao type=radio value=Visa>Visa

27

<INPUT id=cartao name=cartao type=radio value=Master Card>Master Card

28

<INPUT id=cartao name=cartao type=radio value=Outros>Outros

29

</P>

30

<TEXTAREA id=coment name=coment wrap=SOFT> </TEXTAREA>

31

<P>

32

<INPUT id=Enviar name=Enviar type=submit value=Enviar dados>

76

Captulo 2 Uma Introduo ao VBScript

33

<INPUT id=Limpar name=Limpar type=reset value=Limpar dados>

34

</P>

35

</FORM>

36

</BODY>

37

</HTML>

Nas linhas 32 e 33, temos o cdigo HTML que cria os botes Enviar dados e Limpar dados,
respectivamente. A Figura 2.10, mostra o nosso formulrio de exemplo, j completo.

Figura 2.10: O formulrio de exemplo, j completo.


Com isso conclumos a nossa reviso, sobre HTML. Esta reviso fez-se necessria, pois, ao
longo de todo livro, estaremos utilizando formulrios HTML, em conjunto com pginas ASP.
No restante deste captulo, e no seguinte, estarei apresentando os fundamentos do VBScript.

77

Criando Sites Dinmicos com ASP 3.0

Declarao e Utilizao de Variveis no VBScript


O que uma Varivel ?
Uma varivel um espao da memria do computador, reservado para armazenar valores.
Este espao de memria ligado ao nome da varivel. Na maioria das aplicaes, faz-se
necessrio o uso de variveis. Por exemplo, voc desenvolve uma pgina para realizar clculos
financeiros, como por exemplo, emprstimos de longo prazo. O usurio digita um valor para
o emprstimo e o prazo desejado. Com base na taxa de juros utilizada, feito o clculo das
prestaes. Os valores digitados pelo usurio precisam estar disponveis no momento do
clculo. A maneira de manter estes dados disponveis atravs da utilizao de variveis.
Quando o usurio digita o valor do emprstimo desejado, este valor armazenado em uma
varivel, para utilizao no momento de realizao dos clculos.
Estaremos utilizando variveis ao longo de todo livro. Este um conceito existente em todas as
linguagens de programao, como por exemplo em Visual Basic, C, C++, e assim por diante.

Inserindo Cdigo VBScript


Antes de continuarmos com variveis, vamos aprender a inserir cdigo VBScript em uma pgina
HTML. Existem marcadores especiais, que indicam o incio e o fim de um cdigo VBScript.
Para inserir cdigo VBScript, utilizamos a tag <SCRIPT>, conforme indicado abaixo:
<SCRIPT LANGUAGE=vbscript>
<!
Aqui vamos inserir o cdigo VBScript.
>
</SCRIPT>

NOTA
Observe a utilizao do atributo LANGUAGE. Este atributo define qual a linguagem de script
que ser utilizada. Alm do VBScript, poderamos utilizar o JavaScript. Neste livro, estaremos
utilizando VBScript.

NOTA
A utilizao de <! , no incio do cdigo, e de >, no final do cdigo, no obrigatria. Estas
so as tags para comentrios em pginas HTML. No entanto, recomendvel que se utilize
estas tags. Os navegadores mais antigos, tais como Internet Explorer 1.0, no reconhecem
VBScript; se no utilizarmos as tags de comentrio, o cdigo VBScript ser exibido como se

78

Captulo 2 Uma Introduo ao VBScript

fosse texto, o que no desejvel. Com a utilizao das tags de comentrio, garantimos que os
navegadores que no entendem VBScript, simplesmente ignorem o cdigo.

Na Listagem 2.13, temos um exemplo simples da insero de um script em um pgina HTML.


Listagem 2.13 Um exemplo simples de VBScript.
1.

<HTML>

<HEAD>

<TITLE>Um exemplo simples de VBScript !!!</TITLE>

</HEAD>

<BODY>

<SCRIPT LANGUAGE=vbscript>

<!

x=Date()

9
10

MsgBox x
>

11

</SCRIPT>

12

<P>UM EXEMPLO SIMPLES DE VBScript !!!</P>

13

</BODY>

14

</HTML>

Nas linhas 8 e 9, que temos o cdigo VBScript, propriamente dito. No se preocupe com o
cdigo, neste momento. Neste e no prximo captulo, veremos detalhes sobre a utilizao de
funes, tais como Date( ) e MsgBox. Ao abrir esta pgina no Internet Explorer, ser aberta
uma janela, na qual exibida a data do sistema, conforme indicado na Figura 2.11.

Figura 2.11: Mensagem exibida pelo cdigo VBScript.

Declarao e Tipo de Varivel


No VBScript no obrigatria a declarao de variveis. Porm recomendvel que declaremos
todas as variveis, de tal forma que o cdigo fique mais claro e de fcil compreenso. Para
declararmos uma varivel, utilizamos o comando Dim, conforme exemplificado a seguir:

79

Criando Sites Dinmicos com ASP 3.0

Dim x
Dim nome
Dim teste

O formato geral para o comando Dim : Dim nome_da_varivel. Tambm podemos declarar
mais do que uma varivel, com um nico comando Dim. Para isto, basta separar as variveis,
com vrgula, conforme exemplificado a seguir:
Dim x,y,z
Dim nome
Dim teste1,teste2

IMPORTANTE
Observe que definimos o tipo de cada varivel. O tipo define quais dados podem ser
armazenados em uma varivel. Por exemplo, variveis que armazenam valores numricos, no
devem aceitar caracteres de texto. Variveis que armazenam datas, no devem aceitar datas
invlidas, como por exemplo 30/02/2000. Toda varivel no VBScript do tipo Variant, isto significa
que a varivel pode ser de qualquer tipo. O que define o tipo da varivel o valor que est
armazenado no momento. Existem funes de converso de tipo, conforme veremos mais adiante.

Tambm podemos utilizar variveis que no foram, explicitamente, declaradas com o comando
Dim. Com isso, a varivel criada na memria, no momento da sua utilizao.
Na Listagem 2.14, temos um exemplo simples de utilizao de variveis no declaradas
explicitamente.
Listagem 2.14 Utilizao de variveis no declaradas.
1

<HTML>

<HEAD>

<TITLE>Um exemplo simples de VBScript !!!</TITLE>

</HEAD>

<BODY>

<SCRIPT LANGUAGE=vbscript>

<!

a=5

b=2

10

c=a+b

11

Msgbox A varivel C vale: & c

12

>

13

</SCRIPT>

14

<P>Exemplo de utilizao de variveis.</P>

80

Captulo 2 Uma Introduo ao VBScript

15

</BODY>

16

</HTML>

Ao abrir esta pgina no Internet Explorer, ser aberta uma janela, conforme indicado na
Figura 2.12.

Figura 2.12: Mensagem exibida pelo cdigo VBScript.


Podemos fazer com que seja obrigatria a declarao de todas as variveis. Para isso, basta
utilizar o comando Option Explicit. Este comando deve ser inserido, bem no incio do bloco
de script, antes de qualquer procedimento. Veremos mais sobre procedimentos, no prximo
captulo. Caso voc utilize este comando, variveis no declaradas, sero simplesmente
ignoradas, no sendo gerada nenhuma mensagem de erro. Porm os valores que dependem
das variveis no declaradas, no sero corretamente calculados.
Na Listagem 2.15, acrescentamos a opo Option Explicit.
Listagem 2.15 Tornando obrigatria a declarao de variveis.
1

<HTML>

<HEAD>

<TITLE>Um exemplo simples de VBScript !!!</TITLE>

</HEAD>

<BODY>

<SCRIPT LANGUAGE=vbscript>

<!

Option Explicit

a=5

11

b=2

12

c=a+b

13

Msgbox A varivel C vale: & c

14

>

15

</SCRIPT>

16

<P>Exemplo de utilizao de variveis.</P>

17

</BODY>

18

</HTML>

81

Criando Sites Dinmicos com ASP 3.0

Ao abrir esta pgina no Internet Explorer, no ser exibida a janela indicada na Figura 2.12;
isto porque as variveis a, b e c no foram declaradas. Uma vez que a declarao tornou-se
obrigatria, com a adio do comando Option Explicit, as variveis simplesmente no existem.
O Internet Explorer exibir somente o texto Exemplo de utilizao de variveis, conforme
indicado pela Figura 2.13.

Figura 2.13: As variveis no declaradas foram ignoradas.


O tipo Variant formado de pequenas unidades, chamadas subtipos. Cada subtipo, identifica
de que maneira os dados so armazenados em uma varivel do tipo Variant. Por exemplo,
variveis do subtipo Integer so armazenadas de uma maneira diferente de variveis do subtipo
Long. Na Tabela 2.9, temos uma descrio dos principais subtipos.
Tabela 2.9 Subtipos do tipo Variant.
Subtipo

Descrio

Empty

O valor zero para variveis numricas ou uma string de


tamanho zero ( ), para variveis de texto.

Null

A varivel no contm dados vlidos.

Boolean

Contm variveis que somente podem assumir dois


valores: Verdadeiro ou Falso (True ou False).

Byte

Valor inteiro, na faixa de 0 at 255.

Integer

Valor inteiro, na faixa de -32768 at 32767.

Currency

Valores na faixa de 923.337.203.685.447,5808 at


922.337.203.685.447,5807

82

Captulo 2 Uma Introduo ao VBScript

Subtipo

Descrio

Long

Valor inteiro, na faixa de 2.147.483.648 at


2.147.483.647.

Date(Time)

um nmero que representa a data entre 01 de Janeiro


do ano 100, at 31 de Dezembro de 9999 (olha o bug do
ano 10000 chegando).

String

Texto de tamanho varivel, pode conter,


aproximadamente, dois bilhes de caracteres.

Object

Pode conter um objeto qualquer, como um Controle


ActiveX, ou um Objeto COM+.

Error

Pode conter um nmero de erro.

Fazendo Clculos e Comparaes


com o VBScript Operadores
Para realizarmos clculos e comparaes entre variveis, podemos utilizar operadores. Neste
item estaremos tratando sobre operadores aritmticos e operadores de comparao.

Fazendo Clculos com os Operadores Aritmticos


Podemos realizar clculos, utilizando operadores no VBScript. Na Tabela 2.10, temos uma
descrio dos operadores que podemos utilizar.
Tabela 2.10 Operadores do VBScript.
Operador

Smbolo

Descrio

Adio

Soma o valor de duas ou mais variveis.

Subtrao

Subtrao entre duas ou mais variveis.

Multiplicao

Multiplica os valores de duas ou mais variveis.

Diviso

Divide o valor de duas ou mais variveis.

Inteiro da Diviso

Retorna a parte inteira, da diviso entre dois


nmeros.

83

Criando Sites Dinmicos com ASP 3.0

Operador

Smbolo

Descrio

Exponenciao

x^y o valor do nmero x, elevado na


potncia y.

Mdulo

Mod

Retorna o resto de uma diviso de dois nmeros.

Na Listagem 2.16, temos um exemplo, demonstrando o uso destes diversos operadores.


Listagem 2.16 Exemplo de utilizao dos operadores aritmticos.
1

<HTML>

<HEAD>

<TITLE>Um exemplo simples do uso de Operadores Aritmticos !!!</TITLE>

</HEAD>

<BODY>

<SCRIPT LANGUAGE=vbscript>

<!

Option Explicit

Dim a

10

Dim b

11

Dim som, subtr, divis, mult, intdivs, expo, modul

12

a=25

13

b=3

14

som=a+b

15

subtr=a-b

16

divis=a/b

17

mult=a*b

18

intdivs=a\b

19

expo=a^b

20

modul= a mod b

21

Uso de MsgBox para exibir os resultados.

22

MsgBox Os nmeros so: & a & e & b & Chr(13)

23

MsgBox Soma: & som & Chr(13)& Subtrao: & subtr & Chr(13)

24

MsgBox Diviso: & divis & Chr(13)& Multiplicao: & mult & Chr(13)

25

MsgBox Diviso inteira: & intdivs & Chr(13)& Exponenciao: & expo & Chr(13)

26

MsgBox Resto da diviso: & modul

84

Captulo 2 Uma Introduo ao VBScript

27

>

28

</SCRIPT>

29

<P>Exemplo de utilizao de Operadores Aritmticos.</P>

30

</BODY>

31

</HTML>

Neste exemplo, nas linhas de 14 a 20, utilizamos os operadores aritmticos, para realizar
uma srie de operaes com os valores atribudos s variveis a e b. Depois, da linha 22
at a 26, utilizamos a funo MsgBox, para exibir os resultados obtidos. O uso da funo
MsgBox merece alguns comentrios. Primeiro, utilizamos a funo MsgBox para exibir
mensagens em uma pequena janela, chamada de janela pop-up. Podemos exibir texto e tambm
valores de variveis. Quando temos que exibir diversos componentes, como um pouco de
texto, em seguida o valor de uma varivel, depois mais texto, e assim por diante, devemos
utilizar o operador de concatenao &. Este operador permite que as diversas partes sejam
exibidas como uma nica mensagem. Considere o exemplo da linha 22:
22

MsgBox Os nmeros so: & a & e & b & Chr(13)

Neste exemplo, primeiro, exibido o texto Os nmeros so: , logo em seguida o valor da
varivel a. Observe que as duas partes so concatenadas com o operador &. Depois concatenamos
o valor da varivel b, e finalmente utilizamos a funo Chr(13). A funo Chr(nmero) envia o
caractere correspondente ao nmero digitado entre parnteses. Este nmero o nmero do
caractere no padro ASCII (American Standard Caracter Interchange Information). No cdigo
ASCII, cada caractere possui um nmero associado; o nmero 13, associado ao <ENTER>.
Com isso, estamos enviando um <ENTER> para a caixa de mensagem, o que equivale a uma
troca de linha. Portanto, utilizamos o Chr(13) para simular um <ENTER>, de tal maneira que
os dados no saiam todos emendados, na mesma linha. Ao abrir a pgina da Listagem 2.16,
no Internet Explorer, o cdigo da linha 22, produz a mensagem da Figura 2.14.

Figura 2.14: MsgBox da linha 22.


Ao clicar em OK, uma nova mensagem exibida, devido a funo MsgBox da linha 23. O
cdigo da linha 23, produz a mensagem da Figura 2.15.

85

Criando Sites Dinmicos com ASP 3.0

Figura 2.15: MsgBox da linha 23.


Ao clicar em OK, uma nova mensagem exibida, devido a funo MsgBox da linha 24. O
cdigo da linha 24, produz a mensagem da Figura 2.16.

Figura 2.16: MsgBox da linha 24.


Ao clicar em OK, uma nova mensagem exibida, devido a funo MsgBox da linha 25. O
cdigo da linha 25, produz a mensagem da Figura 2.17.

Figura 2.17: MsgBox da linha 25.


Ao clicar em OK, uma nova mensagem exibida, devido a funo MsgBox da linha 26. O
cdigo da linha 26, produz a mensagem da Figura 2.18.

86

Captulo 2 Uma Introduo ao VBScript

Figura 2.18: MsgBox da linha 26.


Com o uso de operadores, podemos realizar uma srie de operaes sobre as variveis existentes
no script.

Comparando Valores com os Operadores de Comparao


Em determinadas situaes, existe a necessidade de efetuarmos comparaes entre os valores
de duas variveis ou expresses. Com base no resultado da comparao Verdadeiro ou Falso
, o nosso script pode seguir caminhos diferentes. Normalmente utilizamos comparaes,
nas estruturas de controle do script, tambm conhecidas como laos de controle. Para que
possamos estudar os operadores de comparao, vamos apresentar uma das estruturas de
controle mais simples que existem no VBScript, a estrutura If Then Else. Abaixo temos um
exemplo do funcionamento da estrutura If Then Else:
If x>y Then
Comandos a serem executados quando x for maior do que y
Else
Comandos a serem executados quando x for menor do que y
End If

Conforme podemos ver, a estrutura If Then Else bastante simples. Fazemos um teste no
incio da estrutura. Se o valor do teste for verdadeiro, executamos os comandos na seqncia,
caso contrrio, executamos os comandos aps o Else. Note que utilizamos o operador de
comparao maior do que >, no caso x>y, estamos testando se x maior do que y. Observe
que no exemplo acima, no sero executados comandos, caso x seja igual a y. Podemos utilizar
laos If Then Else mais complexos, como os do exemplo:
If x>y Then
Comandos a serem executados quando x for maior do que y
ElseIf x=y Then
Comandos a serem executados quando x for igual a

Else
Comandos a serem executados quando x for menor do que y
End If

87

Criando Sites Dinmicos com ASP 3.0

Podemos utilizar tantos ElseIf, quantos forem necessrios.


Na Tabela 2.11, temos uma descrio dos operadores que podemos utilizar.
Tabela 2.11 Operadores de comparao do VBScript.
Descrio

Smbolo

Descrio

Igualdade

igual a.

Desigualdade

<>

diferente de.

Maior que

>

maior do que.

Menor que

<

menor do que.

Maior ou igual

>=

maior ou igual a.

Menor ou igual

<=

menor ou igual a.

Na Listagem 2.17, temos um exemplo, demonstrando o uso destes diversos operadores.


Listagem 2.17 Exemplo de utilizao dos operadores de comparao.
1

<HTML>

<HEAD>

<TITLE>Exemplo de utilizao dos operadores de comparao.</TITLE>

</HEAD>

<BODY>

<SCRIPT LANGUAGE=vbscript>

<!

Option Explicit

Dim x,y,z,k

10

x=12

11

y=15

12

z=20

13

k=15

14

If x<y Then

15

MsgBox x menor do que y.

16

Else

88

Captulo 2 Uma Introduo ao VBScript

17

MsgBox x maior do que y.

18

End If

19

If y<x Then

20
21

MsgBox y menor do que x


Else

22

MsgBox y maior do que x

23

End If

24

If y<=k Then

25
26

MsgBox y menor ou igual a k


Else

27

MsgBox y maior do que k

28

End If

29

If x<>z Then

30
31

MsgBox x e z so diferentes
End If

32

>

33

</SCRIPT>

34

<P>EXEMPLO DE OPERADORES DE COMPARAO:</P>

35

</BODY>

36

</HTML>

Ao carregarmos a pgina de exemplo da Listagem 2.17, no Internet Explorer, veremos uma


seqncia de mensagens, produzidas pela funo MsgBox. Na seqncia, descrevo cada uma
destas mensagens.
O cdigo das linhas 14 at 18 produz a mensagem indicada na Figura 2.19, pois x menor
do que y.

Figura 2.19: MsgBox produzida pela linha 15, uma vez


que x menor do que y.

89

Criando Sites Dinmicos com ASP 3.0

Ao clicar em OK, uma nova mensagem exibida, devido a funo MsgBox da linha 22. Como
o teste y<x falso, no executada a linha 20, mas sim a linha 22. O cdigo da linha 22
produz a mensagem da Figura 2.20.

Figura 2.20: MsgBox produzida pela linha 22,


uma vez que y no menor do que x.
Ao clicar em OK, uma nova mensagem exibida, devido a funo MsgBox da linha 25. Como
o teste y<=k verdadeiro (pois os valores de y e de k so iguais), executada a linha 25. O
cdigo da linha 25 produz a mensagem da Figura 2.21.

Figura 2.21: MsgBox produzida pela linha 25,


uma vez que y igual a k.
Ao clicar em OK, uma nova mensagem exibida, devido a funo MsgBox da linha 30. Como o
teste x<>z verdadeiro, executada a linha 30, este cdigo produz a mensagem da Figura 2.22.

Figura 2.22: MsgBox produzida pela linha 30, uma


vez que x diferente de z.

90

Captulo 2 Uma Introduo ao VBScript

O uso de operadores de comparao amplia o leque de possibilidades para nossos scripts.


Devemos ter alguns cuidados quando comparamos variveis que possuem valores de tipos
diferentes, como por exemplo, nmero e texto. A Tabela 2.12 descreve o que acontece, quando
comparamos variveis com valores de tipos diferentes.
Tabela 2.12 Comparando valores de tipos diferentes.
Comparao

Resultado

Entre duas variveis com valores numricos.

Comparao normal.

Entre duas variveis com valores de texto.

efetuada uma comparao entre


valores de texto. Por exemplo Xuxa
maior do que Abel.

Uma das variveis possui um valor numrico


e a outra possui texto.

O valor numrico sempre considerado


menor do que o texto.

Uma das variveis possui um valor numrico


e a outra esta vazia, atribuindo 0, para a
varivel vazia.

Efetua uma comparao numrica, sem


valor.

Uma das variveis possui um valor de texto


e a outra esta vazia, atribuindo texto de
comprimento zero ( ), para a varivel vazia.

Efetua uma comparao de texto, sem


valor.

As duas variveis possuem um valor vazio.

Ambas so consideradas iguais.

Com a utilizao dos operadores aritmticos e de comparao, ampliamos bastante o leque


de opes na criao de scripts com o VBScript. No prximo item, veremos alguns detalhes
sobre Escopo de variveis.

O Escopo das Variveis, no VBScript


O escopo de uma varivel define em que partes do cdigo de um script a varivel pode ser
utilizada. Em VBScript, podemos ter dois escopos para as variveis:
Escopo de script: Uma varivel declarada dentro do script, mas fora de qualquer
procedimento. Com isso a varivel pode ser utilizada dentro de todo o bloco de cdigo
do script, inclusive dentro dos procedimentos, caso exista algum. Uma varivel
declarada em nvel de script, existe enquanto o mesmo estiver sendo executado. Quando
falamos de script, no um nico bloco de script, pois sabemos que uma pgina pode
conter mais do que um bloco. Uma varivel declarada em nvel de script, poder ser
utilizada em todos os blocos de script da pgina.

91

Criando Sites Dinmicos com ASP 3.0

Escopo de procedimento: A varivel somente pode ser utilizada dentro do procedimento


onde a mesma declarada. Se tentarmos utilizar a varivel fora do procedimento,
onde foi declarada, no teremos acesso a mesma. Uma varivel declarada em nvel de
procedimento existe enquanto o procedimento estiver sendo executado.

NOTA
Um procedimento um bloco de cdigo que pode ser chamado em qualquer ponto do script.
Ao chamarmos um procedimento, a execuo deslocada para dentro do procedimento. Aps
concludo o procedimento, a execuo segue com a linha seguinte que chamou o procedimento.
Veremos maiores detalhes sobre procedimentos e funes no final deste captulo.

Vamos analisar o exemplo da Listagem 2.18, para entendermos melhor este conceito de escopo
de uma varivel. Neste exemplo, tambm estaremos introduzindo um conceito muito
importante, o conceito de evento e procedimentos que executam cdigo em resposta a eventos.
Listagem 2.18 Exemplo para anlise do escopo de variveis.
1

<HTML>

<HEAD>

<TITLE>Analisando o escopo de variveis !!!</TITLE>

<SCRIPT ID=clientEventHandlersVBS LANGUAGE=vbscript>

<!

No evento onclick, do boto analisar,

chamamos o procedimento proc1.

Sub analisar_onclick

9
10

Call proc1
End Sub

11

>

12

</SCRIPT>

13

</HEAD>

14

<BODY>

15

<SCRIPT LANGUAGE=vbscript>

16

<!

17

As variveis declaradas abaixo

18

Sero visveis em todo o script

92

Captulo 2 Uma Introduo ao VBScript

19

Dim x, y

20

x=10

21

y=20

22

Agora vamos criar um procedimento

23

E declarar duas variveis dentro deste procedimento.

24

Estas variveis somente sero visveis,

25

Dentro deste procedimento.

26

Sub proc1()

27

Dim a, b

28

a=5

29

b=7

30

MsgBox x= & x & y= & y & a= & a & b= & b

31

End Sub

32

Agora vamos tentar utilizar os valores de a e b

33

Fora do procedimento proc1.

34

Observe que a varivel aux1 no calculada

35

corretamente, uma vez que os valores de a e b

36

no esto disponveis, fora do procedimento proc1.

37

aux1=a+b

38

MsgBox aux1= & aux1

39

>

40

</SCRIPT>

41

<P>EXEMPLO PARA ANLISE DO ESCOPO DE VARIVIES.</P>

42

<P>CLIQUE NO BOTO ANALISAR - >>

43

<INPUT id=analisar name=analisar type=button value=analisar></P>

44

</BODY>

45

</HTML>

Vamos analisar uma srie de detalhes sobre esta listagem.


Na linha 43, temos a tag INPUT, com type=button, esta tag insere um boto de
comando, no qual o usurio pode clicar. Na Figura 2.23, podemos ver a pgina com o
boto analisar.

93

Criando Sites Dinmicos com ASP 3.0

Figura 2.23: Boto analisar, criado com a tag <INPUT TYPE=BUTTON>.


Ao carregar esta pgina no Internet Explorer, sero executadas as linhas 37 e 38, pois
todo cdigo, que no estiver dentro de um procedimento, automaticamente executado
quando a pgina carregada. Este cdigo exibe o valor da varivel aux1. Porm,
conforme podemos notar na Figura 2.24, o valor exibido zero (e no 12 que seria a
soma de a=5 com b=7). Isto acontece porque as variveis a e b foram definidas
dentro do procedimento proc1, e somente existem quando o procedimento proc1 for
chamado. Neste caso, como no existem os valores, a varivel aux1 fica com o seu
valor inicial de quando foi declarada, que por padro do VBScript zero.

Figura 2.24: Varivel aux1, com seu valor zerado.


Qualquer coisa que o usurio faa em uma pgina considerado um evento. Por
exemplo, quando o usurio clica no boto analisar, gerado o evento analisar_onclick.
Podemos escrever cdigo VBScript para qualquer evento, definido no modelo de eventos
do Internet Explorer. No nosso exemplo, nas linhas de 8 a 10, definimos cdigo em

94

Captulo 2 Uma Introduo ao VBScript

resposta ao evento onclick, do boto analisar. Quando o usurio clicar no boto analisar,
este evento gerado e o cdigo da linha 9 executado. Este cdigo chama o
procedimento proc1. Dentro do procedimento proc1, so definidas as variveis a e b
(linhas 27 a 29). Depois utilizado o comando MsgBox para exibir os valores das
variveis x, y, a e b. Como as variveis x e y foram declaradas em nvel de script, isto ,
fora de qualquer procedimento, as mesmas so acessveis em qualquer ponto do script.
Com isso a mensagem exibe os valores corretamente, conforme indicado na Figura
2.25. Veremos maiores detalhes sobre eventos e procedimentos no Captulo 4.

Figura 2.25: Variveis em nvel de script so visveis em toda a pgina.


Todas as linhas que iniciam com um apstrofe () so comentrios. Linhas de comentrios
servem para documentar nossos scripts, facilitando a interpretao dos mesmos.
Com esse exemplo foi possvel verificar, na prtica, o conceito de escopo (algumas vezes
chamado de visibilidade) das variveis. No prximo item, trataremos das estruturas e laos
de controle, que so elementos muito importantes na criao de scripts.

Estruturas Para Controle de Fluxo em VBScript


Para que possamos criar aplicaes com utilidade prtica, aplicadas na soluo de problemas
reais, precisamos poder controlar o fluxo de execuo de um script. No VBScript, temos
diversas estruturas que permitem um controle bastante eficaz do fluxo de execuo. Neste
item, estaremos estudando diversas destas estruturas.

Estruturas de Deciso
Em um primeiro grupo, temos as chamadas estruturas de deciso. So estruturas que realizam
um teste lgico, e executam determinados comandos quando o teste resultar verdadeiro, ou
um conjunto diferente de comandos, quando o teste resultar falso. Agora passaremos a analisar
as estruturas de deciso, disponveis no VBScript.

95

Criando Sites Dinmicos com ASP 3.0

A Estrutura If...Then
A estrutura If...Then uma das estruturas de deciso mais conhecidas. Toda linguagem
implementa esta estrutura. utilizada para executar determinados comandos, caso uma
condio seja verdadeira. A forma geral desta estrutura a seguinte:
If condio Then
Comandos a serem executados, caso a condio seja verdadeira.
End If

Uma condio testada; caso a condio seja verdadeira, um ou mais comandos podem ser
executados. Considere o exemplo da Listagem 2.19.
Listagem 2.19 Um exemplo simples da estrutura If...Then.
1

<SCRIPT LANGUAGE=vbscript>

<!

Dim x, y

x=10

y=15

If x<y Then

MsgBox x menor do que y

End If

>

10

</SCRIPT>

Neste exemplo, a mensagem x menor do que y, ser exibida, uma vez que o teste x<y
verdadeiro, conforme podemos constatar pelos valores atribudos s variveis x e y.

A Estrutura If...Then...Else
A estrutura If...Then...Else, acrescenta mais uma possibilidade estrutura If...Then. utilizada
para executar determinados comandos, caso uma condio seja verdadeira, ou um conjunto
diferente de comandos, caso a condio seja falsa. A forma geral desta estrutura a seguinte:
If condio Then
Comandos a serem executados, caso a condio seja verdadeira.
Else
Comandos a serem executados, caso a condio seja falsa.
End If

96

Captulo 2 Uma Introduo ao VBScript

Uma condio testada; caso a condio seja verdadeira, um determinado comando, ou


conjunto de comandos ser executado; caso a condio seja falsa, um comando, ou conjunto
de comandos diferentes, ser executado. Considere o exemplo da Listagem 2.20.
Listagem 2.20 Um exemplo simples da estrutura If...Then...Else.
1

<SCRIPT LANGUAGE=vbscript>

<!

Dim x, y

x=15

y=10

If x<y Then

MsgBox x menor do que y

Else

MsgBox x maior do que y

10

End If

11

>

12

</SCRIPT>

Neste exemplo, a mensagem x maior do que y ser exibida, uma vez que o teste x<y
falso, conforme podemos constatar pelos valores atribudos s variveis x e y.

A Estrutura If...Then...ElseIf...Else
A estrutura If...Then...ElseIf...Else nos d um poder maior, para testarmos diversas possibilidades. utilizada quando precisamos realizar mais do que um teste lgico. Neste caso, para cada
novo teste que se faa necessrio, utilizamos um ElseIf. A forma geral desta estrutura a seguinte:
If condio Then
Comandos a serem executados, caso a condio seja verdadeira.
ElseIf condio 2
Comandos a serem executados, caso a condio2 seja verdadeira.
ElseIf condio 3
Comandos a serem executados, caso a condio3 seja verdadeira.
...
ElseIf condio n
Comandos a serem executados, caso a condio n seja verdadeira.
Else
Comandos a serem executados, caso nenhuma das condies anteriores seja
verdadeira.
End If

97

Criando Sites Dinmicos com ASP 3.0

Uma condio testada; caso a condio seja verdadeira, um determinado comando, ou


conjunto de comandos ser executado; caso a condio seja falsa, podemos fazer um segundo
teste (condio 2). Caso a segunda condio seja verdadeira, um determinado comando, ou
conjunto de comandos ser executado, e assim por diante, para n condies. Caso nenhuma
das condies seja verdadeira, os comandos aps a clusula Else, sero executados. Considere
o exemplo da Listagem 2.21.
Listagem 2.21 Um exemplo simples da estrutura If...Then...ElseIf...Else.
1

<SCRIPT LANGUAGE=vbscript>

<!

Dim x, y

Dim z, k

Dim w, p

x=35

y=30

z=25

k=20

10

w=15

11

p=10

12

If x<y Then

13
14

MsgBox
ElseIf

15
16

MsgBox
ElseIf

17
18

ElseIf

21
22

Then

x menor do que p

Else

23
24

Then

x menor do que w

x<p

MsgBox

Then

x menor do que k

x<w

MsgBox

Then

x menor do que z

x<k

MsgBox
ElseIf

19
20

x menor do que y
x<z

MsgBox

x o maior dos nmeros

End If

25

>

26

</SCRIPT>

Neste exemplo, a mensagem x maior dos nmeros ser exibida, uma vez que todos os testes
falham (pois x o maior nmero). Ser executado o comando da linha 23, logo abaixo do Else.
Mas o que acontece, quando um dos ElseIf verdadeiro?

98

Captulo 2 Uma Introduo ao VBScript

Os teste vo sendo feitos. Quando o teste de um dos ElseIf for verdadeiro, os comandos abaixo
do ElseIf verdadeiro, sero executados e o lao ser encerrado. Em resumo, quando um dos
ElseIf apresentar um teste verdadeiros, os comandos relacionados sero executados, e os demais
no sero avaliados, seguindo a execuo para o primeiro comando, aps o End If.

A Estrutura Select...Case
Quando precisamos realizar uma srie de testes, mais eficiente utilizarmos uma estrutura
Select...Case, do que utilizarmos uma srie de testes utilizando a estrutura If...Then...ElseIf.
O funcionamento da estrutura Select...Case bastante intuitivo. Considere o exemplo da
Listagem 2.22.
Listagem 2.22 Um exemplo simples da estrutura Select...Case.
1

<SCRIPT LANGUAGE=vbscript>

<!

Dim x

x=10

Select Case x

Case 2

7
8

MsgBox x vale 2 !
Case 4

9
10

MsgBox x vale 4 !
Case 6

11
12

MsgBox x vale 6 !
Case 8

13
14

MsgBox x vale 8 !
Case 10

15
16

MsgBox x vale 10 !
Case Else

17
18

MsgBox x no um nmero par, menor do que 12


End Select

19

>

20

</SCRIPT>

A estrutura Select Case x vai testar o valor de x. Em cada um dos Case, o valor de x est sendo
testado. Quando for encontrado um valor coincidente com o de x, os comandos abaixo deste
Case sero executados. No nosso exemplo, o comando MsgBox x vale 10 !, abaixo de Case
10, ser executado. O comando abaixo do Case Else somente ser executado, se todos os
testes anteriores falharem.

99

Criando Sites Dinmicos com ASP 3.0

O uso da estrutura Select...Case torna o cdigo mais eficiente e de mais fcil leitura.

Estruturas de Repetio
Em determinadas situaes, precisamos repetir um ou mais comandos, um nmero especfico
de vezes, ou at que uma determinada condio torne-se verdadeira ou falsa. Para isso,
utilizamos as chamadas estruturas de repetio, ou laos. A partir de agora, estaremos
analisando as estruturas de repetio disponveis.

A Estrutura For...Next
Utilizamos o lao For...Next para repetir um segmento de cdigo, um nmero determinado de
vezes. Utilizamos esta estrutura, quando j sabemos o nmero de vezes que uma determinada
seo de cdigo deve ser repetida. Neste tipo de estrutura, normalmente, utilizamos uma
varivel como contador. Este contador varia de um valor inicial at um valor final. O formato
geral desta estrutura o seguinte:
For contador=inicio to fim incremento
Comando1
Comando2
...
Comandon
Next

No incio a varivel contador tem o valor definido para um determinado valor. Em cada
passagem do lao, a varivel contador incrementada pelo valor definido em incremento.
Caso no seja definido o incremento, ser utilizado o padro 1.
Considere o exemplo da Listagem 2.23.
Listagem 2.23 Um exemplo simples da estrutura For...Next.
1

<SCRIPT LANGUAGE=vbscript>

<!

Dim x

x=10

Soma=0

Faz a soma dos dez primeiros nmeros maiores do que zero

For i=1 to x

Soma = Soma +i

100

Captulo 2 Uma Introduo ao VBScript

Next

10

MsgBox Valor da Soma = & Soma

11

>

12

</SCRIPT>

Neste exemplo, a varivel i inicia com o valor 1. Em cada passo, o valor de i acrescentado
varivel Soma. Como o incremento no foi definido, ser utilizado o padro que 1. Com
isso, ao final do lao For...Next, a varivel Soma ter armazenado o valor da soma dos dez
primeiros nmeros inteiros, conforme indicado pela Figura 2.26.

Figura 2.26: A soma dos dez primeiros nmeros inteiros.


Poderamos utilizar um valor de incremento diferente de 1, por exemplo, para obter a soma
somente dos nmeros mpares, menores do que 10. Considere o exemplo da Listagem 2.24.
Listagem 2.24 Um exemplo simples da estrutura For...Next.
1

<SCRIPT LANGUAGE=vbscript>

<!

Dim x

x=10

Soma=0

Faz a soma dos cinco primeiros nmeros mpares maiores do que zero

For i=1 to x Step 2

Soma = Soma +i

Next

10

MsgBox Valor da Soma = & Soma

11

>

12

</SCRIPT>

Com este script, obtemos o resultado indicado na Figura 2.27.

101

Criando Sites Dinmicos com ASP 3.0

Figura 2.27: A soma dos cinco primeiros nmeros mpares.

A Estrutura Do...Loop
Esta estrutura pode ser utilizada para repetir um trecho de cdigo, enquanto uma determinada
condio for verdadeira, ou at que uma determinada condio torne-se verdadeira. Podemos
utilizar dois operadores condicionais diferentes: While ou Until. Os operadores While ou
Until, podem ser utilizados de duas maneiras diferentes: no incio ou no final do lao. Com
isso temos quatro situaes distintas; vamos analisar cada uma delas a partir de agora.

A Estrutura Do While Condio...Loop


Neste caso, estamos utilizando o operador condicional While, no incio do lao. O formato
geral, neste caso o seguinte:
Do While condio
Comando1
Comando2
...
Comandon
Loop

Nesta estrutura, enquanto a condio for verdadeira, o cdigo dentro do lao executado.
Quando a condio tornar-se falsa, o primeiro comando aps o final do lao ser executado.
Neste caso, se a condio for falsa j na primeira vez, o lao no ser executado nenhuma vez.

IMPORTANTE
O cdigo dentro do lao deve ser capaz de alterar a condio para Falso, quando for necessrio,
pois caso contrrio a condio ser sempre verdadeira, e os comandos dentro do lao ficaro
em execuo infinitamente, ou at o programa travar. A criao de laos infinitos, devido a
erros de programao, uma causa comum de travamentos.

102

Captulo 2 Uma Introduo ao VBScript

Considere o exemplo da Listagem 2.25.


Listagem 2.25 Um exemplo simples da estrutura de lao Do While Condio...Loop.
1

<SCRIPT LANGUAGE=vbscript>

<!

Dim x

x=10

Contador=1

Soma=0

Faz a soma dos dez primeiros nmeros maiores do que zero

Do While Contador <= x

Soma = Soma + Contador

10

Contador = Contador + 1

11

Loop

12

MsgBox Valor da Soma = & Soma

13

>

14

</SCRIPT>

Com esse script, obtemos o resultado indicado na Figura 2.28.

Figura 2.28: A soma dos dez primeiros nmeros inteiros.


Observe que dentro do lao, vamos incrementando o valor da varivel Contador, uma unidade
para cada passagem do lao. Com isso, quando o valor de Contador, atingir 11, o teste do
incio do lao torna-se falso, e o lao encerrado.

A Estrutura Do... Loop While Condio


Neste caso, deslocamos o teste de condio para o final do lao. Com o teste no final do lao,
o cdigo dentro do lao, ser executado pelo menos uma vez, pois o teste somente feito no

103

Criando Sites Dinmicos com ASP 3.0

final, e continuar sendo executado, enquanto a condio for verdadeira. O formato geral,
neste caso o seguinte:
Do
Comando1
Comando2
...
Comandon
Loop While condio

Nesta estrutura, enquanto a condio for verdadeira, o cdigo dentro do lao executado.
Quando a condio tornar-se falsa, o primeiro comando aps o final do lao ser executado.
Neste caso, se a condio for falsa j na primeira vez, o lao ser executado uma nica vez.

IMPORTANTE
O cdigo dentro do lao deve ser capaz de alterar a condio para Falso, quando for necessrio,
pois caso contrrio a condio ser sempre verdadeira, e os comandos dentro do lao ficaro
em execuo, infinitamente, ou at o programa travar. A criao de laos infinitos, devido a
erros de programao, uma causa comum de travamentos.

Considere o exemplo da Listagem 2.26.


Listagem 2.26 Um exemplo simples da estrutura de lao Do... Loop While Condio.
1

<SCRIPT LANGUAGE=vbscript>

<!

Dim x

x=10

Contador=1

Soma=0

Faz a soma dos dez primeiros nmeros maiores do que zero

Do

Soma = Soma + Contador

10

Contador = Contador + 1

11

Loop While Contador <= x

12

MsgBox Valor da Soma = & Soma

13

>

14

</SCRIPT>

104

Captulo 2 Uma Introduo ao VBScript

Com esse script, obtemos o resultado indicado na Figura 2.29.

Figura 2.29: A soma dos dez primeiros nmeros inteiros.


Vamos modificar um pouco o nosso exemplo. Considere o exemplo mostrado na Listagem 2.27.
Listagem 2.27 Outro exemplo simples da estrutura de lao Do... Loop While Condio.
1

<SCRIPT LANGUAGE=vbscript>

<!

Dim x

x=10

Contador=11

Soma=0

O lao ser executado uma nica vez, pois a condio

Contador < x falsa.

Do

10

Soma = Soma + Contador

11

Contador = Contador + 1

12

Loop While Contador <= x

13

MsgBox Valor da Soma = & Soma

14

>

15

</SCRIPT>

Qual o valor ser exibido para a varivel Soma?


Muito simples. A condio Contador < x falsa, pois x=10 e Contador=12 (lembre que o
Contador foi incrementado de uma unidade na linha 11, antes do teste ser realizado). Neste
caso, o lao ser executado uma nica vez, pois o teste de condio est no final do lao.
Quando o lao executado, a linha 10 atribui o valor 11 para a varivel Soma. Com isso, o
valor exibido para a varivel Soma, ser 11, conforme indicado na Figura 2.30.

105

Criando Sites Dinmicos com ASP 3.0

Figura 2.30: Resultado obtido, com uma nica execuo do lao.

A Estrutura Do Until Condio...Loop


Neste caso, estamos utilizando o operador condicional Until, no incio do lao. O formato
geral, neste caso o seguinte:
Do Until condio
Comando1
Comando2
...
Comandon
Loop

Nesta estrutura, enquanto a condio for falsa, o cdigo dentro do lao executado. Quando a
condio tornar-se verdadeira, o primeiro comando aps o final do lao ser executado. Neste
caso, se a condio for verdadeira, j na primeira vez, o lao no ser executado nenhuma vez.

IMPORTANTE
O cdigo dentro do lao deve ser capaz de tornar a condio Verdadeira, quando for necessrio,
pois caso contrrio a condio ser sempre Falsa, e os comandos dentro do lao ficaro em
execuo, infinitamente, ou at o programa travar. A criao de laos infinitos, devido a erros
de programao, uma causa comum de travamentos.

Considere o exemplo da Listagem 2.27.


Listagem 2.28 Um exemplo simples da estrutura de lao Do Until Condio...Loop.
1

<SCRIPT LANGUAGE=vbscript>

<!

Dim x

x=10

Contador=1

106

Captulo 2 Uma Introduo ao VBScript

Soma=0

Faz a soma dos dez primeiros nmeros maiores do que zero

Do Until Contador > x

Soma = Soma + Contador

10

Contador = Contador + 1

11

Loop

12

MsgBox Valor da Soma = & Soma

13

>

14

</SCRIPT>

Com esse script, obtemos o resultado indicado na Figura 2.31.

Figura 2.31: A soma dos dez primeiros nmeros inteiros.


Observe que, dentro do lao, vamos incrementando o valor da varivel Contador, uma unidade
para cada passagem do lao. Com isso, quando o valor de Contador atingir 11, o teste do
incio do lao torna-se Verdadeiro, e o lao encerrado.

A Estrutura Do... Loop Until Condio


Neste caso, deslocamos o teste de condio para o final do lao. Com o teste no final do lao,
o cdigo dentro do lao, ser executado pelo menos uma vez, pois o teste somente feito no
final; e continuar sendo executado, enquanto a condio for Falsa. O formato geral, neste
caso, o seguinte:
Do
Comando1
Comando2
...
Comandon
Loop Until condio

107

Criando Sites Dinmicos com ASP 3.0

Nesta estrutura, enquanto a condio for Falsa, o cdigo dentro do lao executado. Quando a
condio tornar-se Verdadeira, o primeiro comando aps o final do lao ser executado. Neste
caso, se a condio for Verdadeira, j na primeira vez, o lao ser executado uma nica vez.

IMPORTANTE
O cdigo dentro do lao deve ser capaz de tornar a condio Verdadeira, quando for necessrio,
pois caso contrrio a condio ser sempre Falsa, e os comandos dentro do lao ficaro em
execuo, infinitamente, ou at o programa travar. A criao de laos infinitos, devido a erros
de programao, uma causa comum de travamentos.

Considere o exemplo da Listagem 2.28.


Listagem 2.29 Um exemplo simples da estrutura de lao Do... Loop Until Condio.
1

<SCRIPT LANGUAGE=vbscript>

<!

Dim x

x=10

Contador=1

Soma=0

Faz a soma dos dez primeiros nmeros maiores do que zero

Do

Soma = Soma + Contador

10

Contador = Contador + 1

11

Loop Until Contador > x

12

MsgBox Valor da Soma = & Soma

13

>

14

</SCRIPT>

Com esse script, obtemos o resultado indicado na Figura 2.32.

Figura 2.32: A soma dos dez primeiros nmeros inteiros.

108

Captulo 2 Uma Introduo ao VBScript

Vamos modificar um pouco o nosso exemplo. Considere o que mostrado na Listagem 2.30.
Listagem 2.30 Outro exemplo simples da estrutura de lao Do... Loop Until Condio.
1

<SCRIPT LANGUAGE=vbscript>

<!

Dim x

x=10

10

Contador=11

Soma=0

O lao ser executado uma nica vez, pois a condio

Contador >= x verdadeira.

Do

10

Soma = Soma + Contador

11

Contador = Contador + 1

12

Loop Until Contador >= x

13

MsgBox Valor da Soma = & Soma

14

>

15

</SCRIPT>

Qual o valor ser exibido para a varivel Soma?


Muito simples. A condio Contador >= x verdadeira, pois x=10 e Contador=12 (lembre
que o Contador foi incrementado de uma unidade, na linha 11, na primeira passagem do
lao). Neste caso, o lao ser executado uma nica vez, pois o teste de condio est ao final.
Quando o lao executado, a linha 10 atribui o valor 11 para a varivel Soma. Com isso, o
valor exibido para a varivel Soma, ser 11, indicado na Figura 2.33.

Figura 2.33: Resultado obtido, com uma nica execuo do lao.

109

Criando Sites Dinmicos com ASP 3.0

Concluso
Neste captulo apresentamos diversos conceitos importantes, os quais sero utilizados ao
longo de todo livro.
Primeiro, definimos o que VBScript e fizemos uma reviso de HTML, principalmente das
tags para a criao de formulrios com HTML.
Depois, passamos a analisar os aspectos bsicos do VBScript. Vimos declarao de variveis,
o comando Option Explicit. Passamos a estudar questes como operadores aritmticos e
operadores lgicos de comparao. Tambm falamos sobre o escopo de variveis. Depois
passamos a tratar de estruturas de controle, onde vimos estruturas como If...Then,
If...Then...Else, Select....Case, etc.
Diversos exemplos foram apresentados com o objetivo de ilustrar os conceitos, facilitando a
compreenso.
No prximo captulo, estaremos analisando alguns aspectos mais avanados do VBScript,
tais como a utilizao de funes internas do VBScript, alm da criao de procedimentos.

110

Captulo 3 Funes, Procedimentos e Eventos com VBScript

Captulo 3
Funes, Procedimentos
e Eventos com VBScript

111

Criando Sites Dinmicos com ASP 3.0

Neste captulo, veremos uma srie de aspectos que vo alm do bsico do VBScript. Iniciaremos
falando um pouco mais sobre tipos de dados e funes para converso de tipos. Este tpico de
grande importncia, principalmente quando criamos pginas que efetuam clculos.
Depois passaremos a analisar uma srie de funes internas do VBScript. So funes que
fazem parte do VBScript, como por exemplo a funo Date( ), que retorna a data do sistema.
Na seqncia, aprenderemos a criar nossas prprias funes e sub-rotinas. Aprenderemos as
diferenas entre uma sub-rotina e uma funo, e quando utilizar uma ou outra.
Em seguida, trataremos de um assunto muito importante: a utilizao de eventos e o modelo de
eventos do Internet Explorer. Tambm falaremos sobre a diferena entre os modelos de eventos
dos dois principais navegadores do mercado o Internet Explorer e o Netscape Navigator.
Ento, mos obra. hora de aprendermos um pouco mais sobre VBScript, para, a partir do
Captulo 4, comearmos a tratar de ASP 3.0, utilizando os conhecimentos apresentados nestes
captulos iniciais.

NOTA
Os exemplos apresentados nas listagens deste captulo podem ser criados utilizando-se um
redator de texto, como o Bloco de notas, e salvando os arquivos com a extenso .htm. Depois
s abrir os mesmos no Internet Explorer e testar. Os nmeros das linhas, que aparecem nas
listagens, no devem ser digitados. Os mesmos foram includos, apenas para facilitar o
acompanhamento das explicaes de cada exemplo.

Tipos de Dados e Funes Para Converso de Tipos


Neste item, aprenderemos a determinar qual o tipo de dado que est armazenado em uma
varivel, bem como a converter valores de um tipo para outro, utilizando as funes para
converso de tipos.

Determinando o Tipo de Dados Contido em uma Varivel


Existem diversas funes, que permitem que seja determinado o tipo de valor contido em
uma varivel. Existem diversas aplicaes para este tipo de funo. Por exemplo, ao digitar
dados em um formulrio, podemos utilizar uma funo para determinar se os valores digitados
pelo usurio no apresentam problemas. Por exemplo, o usurio pode ter digitado, por engano,
texto em um campo que deve conter valores numricos.

112

Captulo 3 Funes, Procedimentos e Eventos com VBScript

A Funo IsArray
Um Array um tipo especial de varivel, a qual pode armazenar diversos valores em uma
nica varivel. De uma forma simples, um Array um conjunto. Cada valor armazenado no
Array um elemento do conjunto. Por exemplo, poderamos criar um Array para armazenar
os nomes dos meses do ano. Com isso teramos um Array de 12 elementos.
Cada elemento de um Array acessado atravs do nome da varivel Array e de um ndice. O
ndice inicia em zero, e no em um. Por isso, se tivermos um Array de dez elementos, teremos
o elemento 0, o elemento 1, o elemento 2, e assim por diante, at o elemento 9. O fato do
ndice comear com 0 influencia na hora de declarar um Array. Para declarar um Array
chamado produtos, com 20 elementos, utilizaramos a seguinte declarao:
Dim produtos(19)

O 19 significa que temos 20 elementos (sempre um a mais do que o nmero que aparece na
declarao), isto , do elemento 0, indicado por produtos(0), at o elemento 20, indicado por
produtos(19).
Na Listagem 3.1, temos um exemplo simples de utilizao de Array.
Listagem 3.1 Utilizando um Array para armazenar os dias da semana.
1

<HTML>

<HEAD>

<TITLE>Utilizando uma varivel Array!!</TITLE>

</HEAD>

<BODY>

<P>EXEMPLO DE CRIAO E UTILIZAO DE ARRAYS.</P>

<SCRIPT LANGUAGE=vbscript>

<!

Declara um Array de sete posies

10

Como a primeira posio a posio zero,

11

Indicamos o tamanho como 6, o que significa

12

da posio 0 at a posio 6 = 7 elementos.

13

Dim Dias(6)

14

Atribumos valores para os dias da semana

113

Criando Sites Dinmicos com ASP 3.0

15

Dias(0)= Segunda-feira

16

Dias(1)= Tera-feira

17

Dias(2)= Quarta-feira

18

Dias(3)= Quinta-feira

19

Dias(4)= Sexta-feira

20

Dias(5)= Sbado

21

Dias(6)= Domingo

22

Agora utilizamos um lao For...Next

23

Para criar uma string, com o contedo

24

Do Array Dias.

25

For i=0 to 6

26

mensagem = mensagem & Dia: & i+1 & & Dias(i)& Chr(13)

27

Next

28

Utilizamos uma MsgBox, para exibir a mensagem

29

com o contedo do Array Dias.

30

MsgBox mensagem

31

>

32

</SCRIPT>

33

</BODY>

34

</HTML>

Ao carregar este exemplo, no Internet Explorer, ser exibida a janela mostrada na Figura 3.1.

Figura 3.1: Um exemplo de utilizao de Array.

114

Captulo 3 Funes, Procedimentos e Eventos com VBScript

Utilizamos a funo IsArray, para determinar se uma varivel do tipo Variant (lembre que
todas as variveis do VBScript so do tipo Variant) est armazenando um Array.
Utilizamos a seguinte sintaxe:
IsArray(NomeDaVarivel)

A funo IsArray retorna verdadeiro se a varivel for um Array, e falso em caso contrrio.
Por exemplo, se adicionssemos, Listagem 3.1, o comando:
MsgBox IsArray(Dias)

o resultado seria o indicado na Figura 3.2.

Figura 3.2: A funo IsArray retornando Verdadeiro.

A Funo VarType
Podemos utilizar a funo VarType para determinar o subtipo de uma varivel. Como todas as
variveis so do tipo Variant, o subtipo pode ser utilizado para determinar o tipo de dado
armazenado na varivel. Passamos, para a funo, o nome de uma varivel ou expresso. A
funo retorna um nmero inteiro que indica o subtipo da varivel.
A sintaxe da funo a seguinte:
VarType(NomeDaVarivel)

ou
VarType(expresso)

Na Tabela 3.1, temos os cdigos de retorno da funo VarType.


Tabela 3.1 Valores de retorno da funo VarType.
Valor

Descrio

Vazio (no inicializado)

115

Criando Sites Dinmicos com ASP 3.0

Valor

Descrio

Nulo (dados no vlidos)

Inteiro

Inteiro longo

Nmero de preciso simples

Nmero de preciso dupla

Monetrio

Data

Texto

Objeto de automao

10

Erro

11

Boleano

12

Variant (somente utilizado com Arrays de variantes)

13

Objeto para acesso a dados

17

Byte

8192

Array

Na Listagem 3.2, temos um exemplo de utilizao da funo VarType.


Listagem 3.2 Utilizando a funo VarType.
1

<HTML>

<HEAD>

<TITLE>Exemplo de uso da funo VarType!!!</TITLE>

</HEAD>

<BODY>

<P>EXEMPLO DE UTILIZAO DA FUNO VarType</P>

<SCRIPT LANGUAGE=vbscript>

<!

Dim x,y,z

116

Captulo 3 Funes, Procedimentos e Eventos com VBScript

10

Dim a, b

11

Dim c(20)

12

x=12

13

y=23.456

14

y=123456789

15

a=Este um valor de texto!

16

Utilizamos a funo Date( ), para capturar a data do sistema.

17

b=Date( )

18

mensagem = Tipo da varivel x: & Vartype(x) & Chr(13)

19

mensagem = mensagem & Tipo da varivel y: & Vartype(y) & Chr(13)

20

mensagem = mensagem & Tipo da varivel z: & Vartype(z) & Chr(13)

21

mensagem = mensagem & Tipo da varivel a: & Vartype(a) & Chr(13)

22

mensagem = mensagem & Tipo da varivel b: & Vartype(b) & Chr(13)

23

mensagem = mensagem & Tipo da varivel c: & Vartype(c) & Chr(13)

24

MsgBox mensagem

25

>

26

</SCRIPT>

27

</BODY>

28

</HTML>

Ao carregar este exemplo no Internet Explorer, obteremos o resultado indicado na Figura 3.3.

Figura 3.3: Utilizando a funo VarType.

117

Criando Sites Dinmicos com ASP 3.0

Observe, principalmente, no tipo da varivel z, o qual retornou 0. Isto significa que a varivel
z est vazia, ou seja, no foi inicializada. Este resultado est coerente com a Tabela 3.1. Tambm
podemos salientar o retorno para a varivel b, o qual retornou 7, indicando que o valor
armazenado nesta varivel do tipo Data. Portanto, tambm est coerente com a Tabela 3.1,
uma vez que usamos a funo Date( ), para armazenar a data do sistema, na varivel b.
Finalmente observe o valor de retorno para a varivel c, o qual retornou 8192, indicando que
a varivel c um Array. Este resultado est coerente com a Tabela 3.1, e com a declarao da
linha 11 Dim c(20), a qual declarou a varivel c como sendo um Array.
Muitas so as aplicaes prticas para a funo VarType, dentre as quais podemos destacar a
validao dos dados digitados em um formulrio.

A Funo IsDate
A funo IsDate recebe uma varivel ou expresso como argumento, e determina se a varivel
ou expresso uma data vlida, ou pode ser convertida para uma data vlida. Caso o argumento
passado seja uma data vlida, a funo retorna Verdadeiro, caso contrrio, retorna Falso.
Podemos utilizar esta funo, por exemplo, para verificar se o usurio digitou uma data vlida,
em um campo de um formulrio.
A sintaxe da funo IsDate a seguinte:
IsDate(NomeDaVarivel)

ou
IsDate(expresso)

Na Listagem 3.3, temos um exemplo de utilizao da funo IsDate.


Listagem 3.3 Utilizando a funo IsDate.
1

<HTML>

<HEAD>

<TITLE>Utilizando a funo IsDate!!</TITLE>

<SCRIPT ID=clientEventHandlersVBS LANGUAGE=vbscript>

<!

Sub verifica_onclick

If IsDate(Window.dataen.value) Then

8
9
10
11

MsgBox Voc digitou uma data vlida!


Else
MsgBox Data invlida, digite novamente!
window.dataen.value=

118

Captulo 3 Funes, Procedimentos e Eventos com VBScript

12

window.dataen.focus

13

End If

14

End Sub

15

>

16

</SCRIPT>

17

</HEAD>

18

<BODY>

19

<P>Exemplo de uso da funo IsDate</P>

20

<P>Digite a data de encerramento:

21

<INPUT id=dataen maxLength=10 name=dataen > (dd/mm/aaaa)

22

</P>

23

<P>Clique no boto para verificar se a data vlida:

24

<INPUT id=verifica name=verifica type=button value=Verificar data></P>

25

</BODY>

26

</HTML>

A seguir alguns comentrios sobre este exemplo.


No cdigo HTML do documento linha 17 25 , colocamos dois elementos de formulrio:
um campo de texto, que chamamos de dataen; e um boto de comando, do tipo Button, que
chamamos de verifica.
A Figura 3.4 mostra este documento aberto no Internet Explorer, onde o usurio digitou uma
data invlida, no nosso exemplo, o usurio digitou 30/02/2000.

Figura 3.4: O usurio digitou uma data invlida.

119

Criando Sites Dinmicos com ASP 3.0

Aps digitar a data, o usurio clica no boto Verificar data, para testar se a data vlida.
Esta ao do usurio, gera o evento onclik deste boto. Observe que das linhas 6 a 13, definimos
um procedimento que responde ao evento onclick do boto verifica. O que define que este
procedimento atua em resposta ao evento onclick, do boto verifica, o nome do procedimento:
Sub verifica_onclick

Esta definio faz parte do modelo de objetos e eventos do Internet Explorer, a qual
analisaremos em maiores detalhes mais adiante, ainda neste captulo.
Dentro do procedimento verifica_onclick, utilizamos a funo IsDate, para verificar se a data
digitada pelo usurio valida. Se a data for vlida, simplesmente exibimos uma mensagem,
notificando que a data digitada vlida, conforme indicado na Figura 3.5.

Figura 3.5: A data digitada pelo usurio vlida.


Caso a data no seja vlida, emitimos uma mensagem avisando linha 10. Na linha 11, voltamos
a utilizar o modelo de objetos do Internet Explorer. A expresso window.dataen.value significa:
o valor do campo dataen, da janela atual do navegador. Com este comando, estamos apagando
a data digitada pelo usurio. Na linha 12, utilizamos o mtodo focus, para posicionar o cursor
de volta no campo dataen. Com isso, quando o usurio clicar em OK, na janela da mensagem de
data invlida, o campo dataen ser apagado (linha 11) e o cursor posicionado no campo (linha
12), para que o usurio possa digitar uma nova data, conforme indicado na Figura 3.6.

Figura 3.6: Cursor posicionado no campo dataen.

120

Captulo 3 Funes, Procedimentos e Eventos com VBScript

A Funo IsEmpty
A funo IsEmpty recebe uma varivel ou expresso como argumento, e determina se, em
algum momento, foi atribudo algum valor para a varivel ou expresso. Caso tenha sido
atribudo algum valor, a funo retorna Verdadeiro, caso contrrio, retorna Falso. Podemos
utilizar esta funo, por exemplo, para verificar se um campo de digitao obrigatria, como
por exemplo o nome, no foi deixado em branco.
A sintaxe da funo IsEmpty a seguinte:
IsEmpty(NomeDaVarivel)

ou
IsEmpty(expresso)

Na Listagem 3.4, temos um exemplo de utilizao da funo IsEmpty.


Listagem 3.4 Utilizando a funo IsEmpty.
1

<HTML>

<HEAD>

<TITLE>Utilizando a funo IsEmpty!!</TITLE>

<SCRIPT LANGUAGE=vbscript>

<!

Vamos declarar uma varivel x que nunca

ser utilizada no nosso script

Dim a, b, c

Dim x

10

a=10

11

b=23

12

c=a+b

13

If IsEmpty(x) Then

14
15

MsgBox A varivel x no foi utilizada!


End If

16

>

17

</SCRIPT>

18

</HEAD>

121

Criando Sites Dinmicos com ASP 3.0

19

<BODY>

20

<P>Exemplo de uso da funo IsEmpty</P>

21

<P>

22

<INPUT id=verifica name=verifica type=button value=Verificar nome>

23

</P>

24

</BODY>

25

</HTML>

Clique no boto para verificar o nome digitado:

Ao abrir este documento, no Internet Explorer, voc recebe a mensagem indicada na Figura 3.7.

Figura 3.7: A varivel x est vazia.

A Funo IsNull
A funo IsNull recebe uma varivel ou expresso como argumento, e determina se, em
algum momento, foi atribudo o valor Null para a varivel ou expresso. Se tiver sido atribudo
o valor Null, a funo retorna Verdadeiro, caso contrrio, retorna Falso. Para atribuirmos Null
para uma varivel, utilizamos a seguinte sintaxe:
NomeDaVarivel = Null

IMPORTANTE
Uma varivel com valor Null, no a mesma coisa que uma varivel com valor zero, ou uma
varivel de texto com tamanho zero. Quando atribudo o valor Null para a varivel, a mesma
continua existindo na memria, porm sem nenhum valor definido.

A sintaxe da funo IsNull a seguinte:


IsNull(NomeDaVarivel)

ou
IsNull(expresso)

122

Captulo 3 Funes, Procedimentos e Eventos com VBScript

Na Listagem 3.5, temos um exemplo de utilizao da funo IsNull.


Listagem 3.5 Utilizando a funo IsNull.
1

<HTML>

<HEAD>

<TITLE>Utilizando a funo IsNull!!</TITLE>

<SCRIPT LANGUAGE=vbscript>

<!

Vamos declarar uma varivel x, e atribuir

Null para a mesma.

Dim x

x = Null

10

If IsNull(x) Then

11
12

MsgBox A varivel x Nula!


End If

13

>

14

</SCRIPT>

15

</HEAD>

16

<BODY>

17

<P>Exemplo de uso da funo IsNull.</P>

18

</BODY>

19

</HTML>

Ao abrir este documento, no Internet Explorer, voc recebe a mensagem indicada na Figura 3.8.

123

Criando Sites Dinmicos com ASP 3.0

Figura 3.8: A varivel x possui o valor Null.

A Funo IsNumeric
A funo IsNumeric recebe uma varivel ou expresso como argumento, e determina se o
valor atribudo varivel ou expresso numrico, ou pode ser convertido para numrico.
Se o valor for numrico, ou puder ser convertido, a funo retorna Verdadeiro, caso contrrio,
retorna Falso.
A sintaxe da funo IsNumeric a seguinte:
IsNumeric(NomeDaVarivel)

ou
IsNumeric(expresso)

Na Listagem 3.6 temos um exemplo de utilizao da funo IsNumeric.


Listagem 3.6 Utilizando a funo IsNumeric.
1

<HTML>

<HEAD>

<TITLE>Utilizando a funo IsNumeric!!</TITLE>

<SCRIPT LANGUAGE=vbscript>

<!

Dim x,y,z

x=123

Atribuo um valor que no pode ser convertido

para numrico

10

y= Riachuelo - 80

124

Captulo 3 Funes, Procedimentos e Eventos com VBScript

11

z = Date()

12

mensagem = Valor de x: & x & numrico? & IsNumeric(x)& Chr(13)

13

mensagem = mensagem & Valor de y: & y & numrico? & IsNumeric(y)& Chr(13)

14

mensagem = mensagem & Valor de z: & z & numrico? & IsNumeric(z)

15

MsgBox mensagem

16

>

17

</SCRIPT>

18

</HEAD>

19

<BODY>

20

<P>Exemplo de uso da funo IsNumeric.</P>

21

</BODY>

22

</HTML>

Ao abrir este documento, no Internet Explorer, voc recebe a mensagem indicada na Figura 3.9.

Figura 3.9: Utilizando a funo IsNumeric.


Cabe salientar a utilizao da funo Date( ), para capturar a data do sistema, e atribuir esta data
varivel z. Observe que esta data no foi considerada um valor numrico para a funo IsNumeric.

A Funo IsObject
A funo IsObject recebe uma varivel como argumento, e determina se o valor atribudo
varivel um objeto ActiveX. Se for, a funo retorna Verdadeiro, caso contrrio, retorna Falso.
Para exemplificarmos esta funo, faremos uso de uma pgina ASP, e iremos utilizar um dos
objetos do ASP. Falaremos mais sobre os objetos do ASP no Captulo 4.

125

Criando Sites Dinmicos com ASP 3.0

A sintaxe da funo IsObject a seguinte:


IsObject(NomeDaVarivel)

ou
IsObject(expresso)

Na Listagem 3.7 temos um exemplo de utilizao da funo IsObject.


Listagem 3.7 Utilizando a funo IsObject.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

<BODY>

<P>Exemplo de utilizao da funo IsObject!</P>

<%

Set tiponav= Server.CreateObject(MSWC.BrowserType)

If IsObject(tiponav) Then

10
11

Response.Write A varivel tiponav um objeto


Else

12

Response.Write A varivel tiponav no um objeto.

13

End If

14

%>

15

</BODY>

16

</HTML>

IMPORTANTE
Como este um arquivo .asp, o mesmo no pode ser aberto localmente no Internet Explorer.
Toda pgina .asp interpretada no servidor, e o resultado do processamento, na forma de
HTML puro, devolvido para o navegador. Para testar um arquivo .asp, o mesmo precisa ser
salvo no servidor IIS e acessado utilizando-se o endereo para a pgina .asp.

Ao abrir este documento, no Internet Explorer, obtemos o resultado indicado na Figura 3.10.

126

Captulo 3 Funes, Procedimentos e Eventos com VBScript

Figura 3.10: Utilizando a funo IsObject.


Observe no campo endereo, que estamos acessando a pgina .asp, em um servidor, e no
localmente, conforme indicado pelo endereo: http://servidor/Chap3/IsObject.asp.

Funes Para Converso de Tipos


Neste item aprenderemos a utilizar as principais funes para converso de tipos. Existem
situaes em que um determinado tipo de dado deve ser convertido para outro. Por exemplo,
se tivermos um nmero, armazenado na forma de texto, precisamos convert-lo para inteiro
ou double, para que possamos realizar clculos com o mesmo.
Na seqncia, apresento as principais funes de converso, bem como um pequeno fragmento
de cdigo, exemplificando a utilizao de cada uma delas.

Funo Cbool
A funo Cbool converte uma varivel ou resultado de uma expresso para o subtipo Boolean.
Qualquer nmero, com exceo do zero, automaticamente convertido para Verdadeira. O
valor zero sempre convertido para Falso. O argumento desta funo no pode ser texto, caso
contrrio ser gerado um erro em tempo de execuo.
Observe esta linha de cdigo:
MsgBox Cbool(10>25) & Chr(13) & Cbool(3)

127

Criando Sites Dinmicos com ASP 3.0

Esta linha gera a mensagem indicada na Figura 3.11.

Figura 3.11: A funo Cbool retorna Verdadeiro ou Falso.


A expresso 10>25 avaliada, como a expresso falsa, a funo Cbool retorna Falso. J no segundo
uso da funo Cbool, foi passado o parmetro 3 para a funo. Qualquer valor diferente de zero
(com exceo de texto) a funo interpreta como Verdadeiro, o que comprovado pela Figura 3.11.

Funo CByte
A funo CByte converte uma varivel ou resultado de um expresso para o subtipo Byte. O
valor a ser convertido, deve estar na faixa aceitvel para o tipo byte, que vai de 0 a 255. Caso
o nmero esteja fora desta faixa, ser gerada uma mensagem de erro; e, se o argumento desta
funo for texto tambm ser gerada uma mensagem de erro, em tempo de execuo.
Observe esta linha de cdigo:
MsgBox CByte(10+34) & Chr(13) & CByte(35)

Esta linha gera a mensagem indicada na Figura 3.12.

Figura 3.12: A funo CByte converte os valores para o subtipo Byte.


A expresso 10+34 calculada, e o resultado (44), convertido para o tipo Byte. A linha de
cdigo abaixo, ir gerar uma mensagem de erro, em tempo de execuo, pois o valor a ser
convertido para byte, est fora da faixa de 0 a 255.
MsgBox CByte(100+200)

128

Captulo 3 Funes, Procedimentos e Eventos com VBScript

Funo CCur
A funo CCur converte uma varivel, ou resultado de um expresso, para o subtipo Currency.
O argumento desta funo no pode ser Texto, caso contrrio ser gerado um erro.
Observe esta linha de cdigo:
MsgBox CCur(250.335677+324.3333) & Chr(13) & CCur(1250.326582)

Esta linha gera a mensagem indicada na Figura 3.13.

Figura 3.13: A funo CCur converte os valores para o subtipo Currency.


A expresso 250.335677+324.3333 calculada, e o resultado convertido para o tipo Currency.
Se passarmos um argumento de texto para a funo CCur ser gerado um erro de execuo,
conforme indicado na Figura 3.14.

Figura 3.14: Erro gerado ao passar um texto como argumento para CCur.

129

Criando Sites Dinmicos com ASP 3.0

Funo CDate
A funo CDate converte uma varivel ou resultado de um expresso para o subtipo Date. O
argumento desta funo deve estar em um formato que seja aceitvel para datas, caso contrrio
ser gerada uma mensagem de erro, em tempo de execuo.
Observe esta linha de cdigo:
MsgBox CDate(31/10/1980) & Chr(13) & CDate(23-01-2007)

Esta linha gera a mensagem indicada na Figura 3.15.

Figura 3.15: A funo CDate converte os valores para o subtipo Date.


A linha de cdigo abaixo ir gerar uma mensagem de erro, em tempo de execuo, conforme
indicado na Figura 3.16.
MsgBox CDate(31/02/1980)

Figura 3.16: Erro gerado ao passar um argumento com uma data invlida.

130

Captulo 3 Funes, Procedimentos e Eventos com VBScript

Funo CDbl
A funo CDbl converte uma varivel ou resultado de um expresso para o subtipo Double. O
argumento desta funo no pode ser do tipo texto, caso contrrio ser gerada uma mensagem
de erro, em tempo de execuo.
Observe esta linha de cdigo:
MsgBox CDbl(4.940651247E-17)

Esta linha gera a mensagem indicada na Figura 3.17.

Figura 3.17: A funo CDouble converte os valores para o subtipo Double.


A linha de cdigo abaixo ir gerar uma mensagem de erro, em tempo de execuo, conforme
indicado na Figura 3.18.
MsgBox CDbl(Teste)

Figura 3.18: Erro gerado ao passar um argumento de tipo invlido para a funo Cdbl.

131

Criando Sites Dinmicos com ASP 3.0

Funo CInt
A funo CInt converte uma varivel ou resultado de um expresso para o subtipo Integer. O
argumento desta funo no pode ser do tipo texto, caso contrrio ser gerada uma mensagem
de erro, em tempo de execuo.
Observe esta linha de cdigo:
MsgBox CInt(32.36) & Chr(13) & CInt(20.35+40.45)

Esta linha gera a mensagem indicada na Figura 3.19.

Figura 3.19: A funo CInt converte os valores para o subtipo Integer.


A linha de cdigo abaixo ir gerar uma mensagem de erro, em tempo de execuo, conforme
indicado na Figura 3.20.
MsgBox CInt(Teste)

Figura 3.20: Erro gerado ao passar um argumento de tipo invlido para a funo CInt.

132

Captulo 3 Funes, Procedimentos e Eventos com VBScript

Funo CLng
A funo CLng converte uma varivel ou resultado de um expresso para o subtipo Long. O
argumento desta funo no pode ser do tipo texto, caso contrrio ser gerada uma mensagem
de erro, em tempo de execuo. O argumento tambm no pode estar fora da faixa admitida
pelo subtipo Long, caso contrrio ser gerada uma mensagem de erro, em tempo de execuo.
Observe esta linha de cdigo:
MsgBox CLng(3462315)

Esta linha gera a mensagem indicada na Figura 3.21.

Figura 3.21: A funo CLng converte os valores para o subtipo Long.


A linha de cdigo abaixo ir gerar uma mensagem de erro, em tempo de execuo, conforme
indicado na Figura 3.22.
MsgBox CLng(Teste)

Figura 3.22: Erro gerado ao passar um argumento de tipo invlido para a funo CLng.

133

Criando Sites Dinmicos com ASP 3.0

Funo CSng
A funo CSng converte uma varivel ou resultado de um expresso para o subtipo Single. O
argumento desta funo no pode ser do tipo texto, caso contrrio ser gerada uma mensagem
de erro, em tempo de execuo. O argumento tambm no pode estar fora da faixa admitida
pelo subtipo Single, caso contrrio ser gerada uma mensagem de erro, em tempo de execuo.
Observe esta linha de cdigo:
MsgBox CSng(3.1418256927)

Esta linha gera a mensagem indicada na Figura 3.23.

Figura 3.23: A funo CSng converte os valores para o subtipo Single.


A linha de cdigo abaixo, ir gerar uma mensagem de erro, em tempo de execuo, conforme
indicado na Figura 3.24.
MsgBox CSng(Teste)

Figura 3.24: Erro gerado ao passar um argumento de tipo invlido para a funo CSng.

134

Captulo 3 Funes, Procedimentos e Eventos com VBScript

Funo CStr
A funo CStr converte uma varivel ou resultado de um expresso para o subtipo String.
Observe esta linha de cdigo:
MsgBox CStr(12345 & hectares de terra)

Esta linha gera a mensagem indicada na Figura 3.25.

Figura 3.25: A funo CStr converte os valores para o subtipo String.

Funes Int e Fix


As funes Int e Fix retornam somente a parte inteira de um determinado nmero. A diferena,
entre as duas funes, quando o nmero for negativo. Observe os exemplos abaixo:
Fix(-10.2) Retorna 10
Int(-10.2) Retorna 11
A funo Int, retorna, no caso de nmeros negativos, o primeiro nmero inteiro, menor ou igual
ao parmetro passado. No caso de 10.2, retornou 11. J Fix, retorna, no caso de nmeros negativos,
o primeiro inteiro, maior ou igual ao parmetro passado. No caso de 10.2, retornou 10.
Observe esta linha de cdigo:
MsgBox Fix (-7.35) & Chr(13) & MsgBox Int(-7.35)

Esta linha gera a mensagem indicada na Figura 3.26.

Figura 3.26: A diferena entre Int e Fix, para nmeros negativos.

135

Criando Sites Dinmicos com ASP 3.0

Com isso, terminamos a nossa apresentao sobre as principais funes para a converso de
tipos de dados. No prximo item, estaremos analisando mais algumas funes do VBScript,
para operaes com dados do tipo String e do tipo Data/Hora.

Outras Funes do VBScript Tratamento


de String, Datas e Funes Matemticas
Neste item, aprenderemos a utilizar as principais funes do VBScript. Apresentaremos as
funes divididas em categorias, conforme a funcionalidade das mesmas. Estaremos tratando
das seguintes categorias:
Funes para manipulao de String.
Funes para manipulao de Data/Hora.
Funes matemticas.
Para uma referncia completa sobre todas as funes do VBScript, voc pode consultar o
seguinte endereo: http://msdn.microsoft.com/scripting.

Funes Para Tratamento de String


Veremos as principais funes para tratamento de String. Nos exemplos prticos, no final do
captulo, estaremos utilizando algumas destas funes.

Funo Asc
A funo Asc retorna o valor numrico do cdigo ASCII, para a primeira letra de uma String.
Considere o exemplo:
Asc(Ainda chovia)

Este exemplo de uso da funo retorna o valor 65, o qual o cdigo ASCII para a letra A
maiscula. Caso fosse a letra a minscula, o cdigo retornado seria 97.

Funo Chr
A funo Chr(nmero), recebe um nmero como parmetro, e retorna o caractere ASCII,
correspondente. Considere o exemplo:
Chr(65)

Este exemplo de uso da funo retorna o caractere A maisculo.

136

Captulo 3 Funes, Procedimentos e Eventos com VBScript

NOTA
At agora, utilizamos a funo Chr em alguns exemplos. Utilizamos o Chr(13) para simular
um ENTER, o que faz uma quebra de linha, nas mensagens montadas com o MsgBox.

Funo Len
Esta funo determina o tamanho da String que foi passada como parmetro para a funo.
Considere o exemplo:
MsgBox Len(Este um exemplo de uso da funo Len!!)

Este exemplo de uso da funo, retorna 41, conforme indicado na Figura 3.27.

Figura 3.27: Exemplo de uso da funo Len.

Funo LCase
Esta funo converte para minsculas a String que foi passada como parmetro para a funo.
Considere o exemplo:
MsgBox Lcase(ESTE UM EXEMPLO DE USO DA FUNO LCASE)

Este exemplo de uso da funo converte, o parmetro passado, para letras minsculas,
conforme indicado na Figura 3.28.

Figura 3.28: Exemplo de uso da funo LCase.

137

Criando Sites Dinmicos com ASP 3.0

Funo UCase
Esta funo converte para maisculas a String que foi passada como parmetro para a funo.
Considere o exemplo:
MsgBox Ucase(este um exemplo do uso da funo ucase!!)

Este exemplo de uso da funo converte, o parmetro passado, para letras maisculas, conforme
indicado na Figura 3.29.

Figura 3.29: Exemplo de uso da funo UCase.

Funo Left
Esta funo retorna um nmero especificado de caracteres, a partir do incio (Left Esquerda)
de uma String. importante salientar que espaos em branco tambm devem ser considerados.
O formato geral da funo o seguinte:
Left(String, n)

onde n o nmero de caracteres a retornar.


Considere o exemplo:
MsgBox Left(Jlio Cesar Fabris Battisti,5)

Este exemplo de uso da funo, retorna as cinco primeiras letras da String passada, neste
caso, retornar Jlio.
Vamos alterar um pouco o nosso exemplo:
MsgBox Left(Jlio Cesar Fabris Battisti,7)

Ir retornar: Jlio C. Observe que o espao em branco tambm considerado.

Funo Right
Esta funo retorna um nmero especificado de caracteres, a partir do final (Right Direita)
de uma String. importante salientar que espaos em branco tambm devem ser considerados.

138

Captulo 3 Funes, Procedimentos e Eventos com VBScript

O formato geral da funo o seguinte:


Right(String, n)

onde n o nmero de caracteres a retornar.


Considere o exemplo:
MsgBox Right(Jlio Cesar Fabris Battisti,6)

Este exemplo de uso da funo, retorna as seis ltimas letras da String passada, neste caso,
retornar ttisti.
Vamos alterar um pouco o nosso exemplo:
MsgBox Right(Jlio Cesar Fabris Battisti,10)

Ir retornar: s Battisti. Observe que o espao em branco tambm considerado.

Funo Mid
Esta funo retorna um nmero especificado de caracteres, a partir de uma posio especificada
dentro da String. importante salientar que espaos em branco tambm devem ser
considerados.
O formato geral da funo o seguinte:
Mid(String, posicao_inicio, n)

onde posicao_inicio a posio a partir da qual devem ser retornados caracteres, e n o


nmero de caracteres a retornar.
Considere alguns exemplos:
Mid(Jlio Cesar Fabris Battisti,7,5)

Este exemplo de uso da funo, retorna, a partir da posio 7, cinco caracteres, neste caso,
retornar Cesar.
Mid(SANTA MARIA,3,7)

ir retornar NTA MAR. Observe que o espao em branco tambm considerado.


Um detalhe interessante, que podemos utilizar o retorno de uma funo, como parmetro
para outra funo. Considere o seguinte exemplo:
LCase(Mid(SANTA MARIA,3,7))

139

Criando Sites Dinmicos com ASP 3.0

Este exemplo retorna nta mar.


A funo Mid retira os caracteres NTA MAR, os quais so passados como parmetros para a
funo LCase, a qual converte os caracteres para minsculos.

Funo String
Esta funo retorna um determinado caractere, um nmero especificado de vezes.
O formato geral da funo o seguinte:
String(n, Caracter)

onde n o nmero de vezes que o caractere deve ser repetido.


Considere o exemplo:
MsgBox String(35,*)

A Figura 3.30 mostra o resultado deste comando.

Figura 3.30: Exemplo de uso da funo String.

Funes Para Tratamento de Data e Hora


Veremos as principais funes para tratamento de Data e Hora. Nos exemplos prticos, no
final do captulo, estaremos utilizando algumas destas funes.

Funo Date
Retorna a data corrente do sistema. No precisamos passar parmetros para esta funo.
Considere o exemplo abaixo:
MsgBox Data do Sistema: & Date( )

O resultado deste comando est indicado na Figura 3.31.

140

Captulo 3 Funes, Procedimentos e Eventos com VBScript

Figura 3.32: Exemplo de uso da funo Date.

Funo Time
Retorna a hora corrente do sistema. No precisamos passar parmetros para esta funo.
Considere o exemplo abaixo:
MsgBox Hora do Sistema: & Time( )

O resultado deste comando est indicado na Figura 3.32.

Figura 3.32: Exemplo de uso da funo Time.

Funo Day
Recebe como parmetro uma data, e retorna um nmero entre 1 e 31, indicando o dia do ms.
O formato geral o seguinte:
Day(data)

Considere o exemplo abaixo:


MsgBox Dia do ms: & Day(Date( ))

O resultado deste comando est indicado na Figura 3.33.


A funo Date( ) captura a data do sistema e passa como parmetro para a funo Day, que,
por sua vez, retorna apenas o dia do ms.

141

Criando Sites Dinmicos com ASP 3.0

Figura 3.33: Exemplo de uso da funo Day.

Funo Month
Recebe como parmetro uma data, e retorna um nmero entre 1 e 12, indicando o ms do
ano. O formato geral o seguinte:
Month(data)

Considere o exemplo abaixo:


MsgBox Ms do ano: & Month(Date( ))

O resultado deste comando est indicado na Figura 3.34.

Figura 3.34: Exemplo de uso da funo Month.


A funo Date( ) captura a data do sistema e passa como parmetro para a funo Month, que,
por sua vez, retorna apenas o ms do ano.

Funo Now
Retorna a hora e a data corrente do sistema. No precisamos passar parmetros para esta
funo. Considere o exemplo abaixo:
MsgBox Data e Hora do Sistema: & Now( )

O resultado deste comando est indicado na Figura 3.35.

142

Captulo 3 Funes, Procedimentos e Eventos com VBScript

Figura 3.35: Exemplo de uso da funo Now.

Funo MonthName
Recebe como parmetro um nmero, indicativo do ms do ano (1 Janeiro, 2 Fevereiro, e assim
por diante), e um segundo parmetro que pode ser Verdadeiro ou Falso. Se o segundo parmetro
for Verdadeiro, o nome do ms ser exibido abreviadamente. O formato geral o seguinte:
MonthName(nmero_do_ms, abreviar)

Considere o exemplo abaixo:


MsgBox Ms do ano: & MonthName(Month(Date(),False)

O resultado deste comando est indicado na Figura 3.36.

Figura 3.36: Exemplo de uso da funo MonthName.


A funo Date( ) captura a data do sistema e passa como parmetro para a funo Month. A
funo Month retorna o nmero do ms retornado pela data. Este nmero passado como
primeiro parmetro para a funo MonthName. O segundo parmetro definido em Falso, o
que significa que para exibir o nome do ms por extenso, isto , no abreviado.

Funo Hour
Recebe como parmetro uma hora, e retorna um nmero entre 0 e 23, indicando o hora do
dia. O formato geral o seguinte:
Hour(horrio)

143

Criando Sites Dinmicos com ASP 3.0

Considere o exemplo abaixo:


MsgBox Hora do sistema: & Hour(Time( ))

O resultado deste comando est indicado na Figura 3.37.

Figura 3.37: Exemplo de uso da funo Hour.


A funo Time( ) captura a hora do sistema e passa como parmetro para a funo Hour, que,
por sua vez, retorna apenas a hora do dia.

A funo DateDiff
Esta funo pode ser utilizada para determinar o nmero de intervalos (em dias, trimestres,
semestres, anos, etc.), entre duas datas. A sintaxe desta funo o seguinte:
DateDiff(intervalo, data1, data2)

O parmetro intervalo uma String que diz que tipo de intervalo vamos calcular. Por exemplo,
este parmetro que define se queremos calcular o nmero de dias, ou o nmero de meses
entre duas datas. Na Tabela 3.2, temos os valores possveis para o parmetro intervalo.
Tabela 3.2 Valores para o parmetro intervalo.
Valor

Descrio

yyyy

Anos

Trimestres

Meses

Dias do ano (o mesmo que dias)

Dias

Semanas

ww

Semanas do ano (o mesmo que semanas)

144

Captulo 3 Funes, Procedimentos e Eventos com VBScript

Valor

Descrio

Horas

Minutos

Segundos

A ttulo de exemplo, vamos calcular o nmero de meses, desde o descobrimento do Brasil,


at 31 de Dezembro de 1999. Para isso, utilizaramos o seguinte comando:
MsgBox Meses desde o descobrimento: & DateDiff(m,22/04/1500,31/12/1999)

O resultado deste comando pode ser conferido na Figura 3.38.

Figura 3.38: Exemplo de uso da funo DateDiff.


Vamos modificar um pouco o nosso exemplo, e calcular o nmero de horas desde o
descobrimento. Para isto, podemos utilizar o seguinte comando:
MsgBox Nmero aproximado de horas, desde o descobrimento: & DateDiff(h,22/04/
1500,31/12/1999)

O resultado deste comando pode ser conferido na Figura 3.39.

Figura 3.39: O nmero aproximado de horas, desde o descobrimento do Brasil.

A Funo DateAdd
Esta funo pode ser utilizada para determinar uma data futura, com base em uma data
fornecida, o tipo de perodo a ser acrescentado (dias, meses, anos, etc.), e o nmero de perodos
a serem acrescentados. A sintaxe desta funo a seguinte:

145

Criando Sites Dinmicos com ASP 3.0

DateAdd(intervalo, nmero_de_intervalos, data)

O parmetro intervalo uma String que diz que tipo de intervalo vamos acrescentar. Por
exemplo, este parmetro que define se queremos acrescentar um nmero especificado de
dias, meses, anos, etc. Na Tabela 3.3, temos os valores possveis para o parmetro intervalo.
Tabela 3.3 Valores para o parmetro intervalo.
Valor

Descrio

yyyy

Anos

Trimestres

Meses

Dias do ano (o mesmo que dias)

Dias

Semanas

ww

Semanas do ano (o mesmo que semanas)

Horas

Minutos

Segundos

A ttulo de exemplo, vamos calcular a data em que tivemos um perodo de 1.000 meses, aps
o descobrimento do Brasil. Para isso, utilizaramos o seguinte comando:
MsgBox Mil meses aps o descobrimento foi em: & DateAdd(m,1000,22/04/1500)

O resultado deste comando pode ser conferido na Figura 3.40.

Figura 3.40: Exemplo de uso da funo DateAdd.


Vamos modificar um pouco o nosso exemplo, e calcular em que data teremos passado um
milho de dias aps o descobrimento.

146

Captulo 3 Funes, Procedimentos e Eventos com VBScript

MsgBox Um milho de dias aps o descobrimento em : & DateAdd(d,1000000,22/04/1500)

O resultado deste comando pode ser conferido na Figura 3.41.

Figura 3.41: Em 19/03/4238, o Brasil completar um milho de dias.

Funo Year
Recebe como parmetro uma data, e retorna um nmero indicativo do ano. O formato geral
o seguinte:
Year(data)

Considere o exemplo abaixo:


MsgBox Ano atual: & Year(Date( ))

O resultado deste comando est indicado na Figura 3.42.

Figura 3.42: Exemplo de uso da funo Year.


A funo Date( ) captura a data do sistema e passa como parmetro para a funo Year, a qual
por sua vez, retorna apenas o ano.

Funo WeekDay
Recebe como parmetros uma data, e um parmetro opcional, que indica qual o primeiro dia da
semana. Se este parmetro for omitido, o primeiro dia da semana ser considerado domingo. O
valor para o primeiro dia da semana numrico: 1 domingo, 2 segunda-feira, e assim por diante.
WeekDay(data, prim_dia_semana.)

147

Criando Sites Dinmicos com ASP 3.0

Considere o exemplo abaixo:


MsgBox Dia da semana: & WeekDay(31/12/1999)

O resultado deste comando est indicado na Figura 3.43.

Figura 3.43: Exemplo de uso da funo WeekDay.


O valor 6 indica que foi uma sexta-feira, o que confere com o calendrio.
Poderamos determinar que o primeiro dia da semana a segunda-feira (2). Com isso o nosso
exemplo, ficaria assim:
MsgBox Dia da semana: & WeekDay(31/12/1999,2)

O resultado deste comando est indicado na Figura 3.44.

Figura 3.44: Definindo a segunda-feira como o primeiro dia da semana.


O valor 5 indica que foi uma sexta-feira, pois agora a segunda-feira passou a ser o dia 1, a
tera-feira o dia 2, e assim por diante. Novamente confere com o calendrio.

Funo WeekDayName
Recebe como parmetro um nmero, indicativo do dia da semana, e um segundo parmetro
que pode ser Verdadeiro ou Falso. Se o segundo parmetro for Verdadeiro, o nome do dia da
semana ser exibido abreviadamente. O formato geral o seguinte:
WeekDayName(nmero_do_dia, abreviar)

148

Captulo 3 Funes, Procedimentos e Eventos com VBScript

Considere o exemplo abaixo:


MsgBox Dia da semana: & WeekDayName(6,False)

O resultado deste comando est indicado na Figura 3.45.

Figura 3.45: Exemplo de uso da funo WeekDayName.

Funes Para Clculos Matemticos


Veremos as principais funes para efetuar clculos matemticos. Nos exemplos prticos, no
final do captulo, estaremos utilizando algumas destas funes.
Na Tabela 3.4, temos a descrio das principais funes matemticas, disponveis no VBScript.
Tabela 3.4 Funes para clculos matemticos.
Funo

Descrio

Abs(n)

Retorna o valor absoluto (sem sinal) do nmero n.

Atn(n)

Retorna o valor do arco, cuja tangente o nmero n. O


nmero n deve ser fornecido em radianos.

Cos(n)

Retorna o coseno do nmero n. O nmero n deve ser


fornecido em radianos.

Exp(n)

Retorna o nmero e (logaritmo neperiano e=2,7183),


elevado no nmero n.

Log(n)

Retorna o logaritmo natural de um nmero n.

Rnd(n)

Retorna um nmero aleatrio entre 0 e 1.

Sgn(n)

Retorna um nmero inteiro, indicando o sinal do


nmero n. Retorna 1 para nmeros negativos e 1 para
nmeros positivos.

149

Criando Sites Dinmicos com ASP 3.0

Funo

Descrio

Sin(n)

Retorna o seno do nmero n. O nmero n deve ser


fornecido em radianos.

Sqr(n)

Retorna a raiz quadrada do nmero n.

Tan(n)

Retorna a tangente do nmero n. O nmero n deve ser


fornecido em radianos.

NOTA
Para converter graus para radianos, multiplique o valor em graus por (3.14), e divida o
resultado por 180.

Na Tabela 3.5, temos alguns exemplos de utilizao das funes matemticas do VBScript.
Tabela 3.5 Alguns exemplos de utilizao das funes matemticas.
Exemplo

Valor de retorno

Abs(-2350)

2350

Atn(2)

1,1071487177

Cos(0)

Exp(1)

2,71828182845905

Log(1000)

6,90775527898214

Rnd*10

Gera um nmero aleatrio entre 0 e 10.

Sgn(-235)

Retorna 1, pois o nmero negativo.

Sin(0)

Retorna 0

Sqr(400)

Retorna 20

Tan(0)

Retorna 0

Com isso, encerramos a apresentao das principais funes do VBScript. Para uma referncia
completa, voc pode consultar o site http://msdn.microsoft.com/scripting, ou os CDs da
assinatura do MSDN (Microsoft Developer Network). Junto com o Visual Studio 6.0 fornecida
uma cpia do MSDN.

150

Captulo 3 Funes, Procedimentos e Eventos com VBScript

Criando Suas Prprias Funes e Procedimentos


Neste item, aprenderemos a criar nossas prprias funes e sub-rotinas. O princpio, por trs
da criao de funes e sub-rotinas, o de reaproveitamento de cdigo e facilidade de
manuteno do programa. Imagine que estejamos criando uma pgina para clculos
financeiros, por exemplo, depreciao contbil. Vamos supor que, em diversos pontos do
nosso script, seja necessria a realizao do clculo de depreciao. Poderamos colocar o
cdigo que faz o clculo, em cada um dos pontos, onde o mesmo seja necessrio. Porm esta
no a melhor maneira de criarmos nosso script. Imagine, por exemplo, quando fosse
necessrio alterar a maneira de realizar os clculos. Teramos que repassar todo o script,
procurando os pontos onde o cdigo est, e fazer as alteraes. Sem contar que estaramos
criando um script bastante longo, dependendo do nmero de clculos necessrios.
Para resolver estes problemas, poderamos criar uma funo ou sub-rotina que faz os clculos
de depreciao. Depois, em cada local onde precisamos fazer os clculos, s chamar a
funo (ou sub-rotina), para fazer os clculos. Quando fosse necessria a alterao da
metodologia de clculo, era s alterar a funo (ou sub-rotina) e pronto! Os novos clculos
passaro a ser feitos com base na nova metodologia. Isto poupa esforo, reduz o nmero de
linhas do script, facilita a manuteno do mesmo, alm de reduzir a possibilidade de erros.
Agora chegada a hora de aprendermos a criar funes e sub-rotinas.

NOTA
Um termo que pode aparecer procedimento. Um procedimento um grupo de instrues
que pode ser chamado pelo nome atribudo a ele. Neste contexto, funes e sub-rotinas so
tipos de procedimentos.

Criando e Utilizando Sub-rotinas


Uma sub-rotina um grupo de comandos que podem ser executados, simplesmente atravs
da chamada do nome da Sub-rotina. Podemos passar um ou mais argumentos para uma Subrotina. Quando a mesma chamada, a execuo desloca-se para dentro da Sub-rotina e executa
todos os comandos. Depois, a execuo do script continua, com o comando seguinte ao que
chamou a Sub-rotina.
A sintaxe para declarao de uma sub-rotina a seguinte:
Sub Nome_da_Sub-rotina(argumento1, argumento2, ..., argumenton)
Comando1
Comando2
...
Comandon
End Sub

151

Criando Sites Dinmicos com ASP 3.0

Uma sub-rotina pode, ou no, conter argumentos. Caso sejam necessrios argumentos, os
mesmos sero passados quando a Sub-rotina for chamada, e devem ser passados, na mesma
ordem em que foram definidos.

DICA
Quando voc criar Sub-rotinas, procure utilizar nomes que descrevam a funo que ela tem.
Com isso voc torna o entendimento do cdigo mais fcil para quem for utiliz-lo.

Considere o seguinte exemplo de declarao de uma Sub-rotina:


Sub Calcula_imposto(salario, desconto, extras)
Comando1
Comando2
...
Comandon
End Sub

Neste caso, declaramos uma Sub-rotina chamada Calcula_imposto, a qual espera receber trs
parmetros: salario, desconto e extras. Os parmetros devem ser fornecidos nesta ordem,
para que a Sub-rotina funcione corretamente.
Uma vez criada a Sub-rotina, podemos cham-la, simplesmente digitando o nome, ou
utilizando a palavra Call, mais o nome da Sub-rotina. Nos exemplos abaixo, temos dois mtodos
de chamada da Sub-rotina Calcula_imposto:
Calcula_imposto(1500,23,125)

ou
Call Calcula_imposto(1500,23,125)

Observe que os parmetros so passados dentro do parnteses.


Tambm poderamos declarar uma Sub-rotina sem parmetros. Neste caso posso simplesmente
no utilizar os parnteses aps o nome da Sub-rotina, ou utilizar um par de parnteses, sem
nada dentro, conforme indicado abaixo:
Sub Nome_da_Sub-rotina
Comando1
Comando2
...
Comandon
End Sub

ou

152

Captulo 3 Funes, Procedimentos e Eventos com VBScript

Sub Nome_da_Sub-rotina( )
Comando1
Comando2
...
Comandon
End Sub

Por exemplo, poderamos criar uma Sub-rotina que exibe uma caixa de mensagem com a data
do sistema e a hora, no formato indicado na Figura 3.46.

Figura 3.46: Exibindo a data e a hora em uma caixa de mensagem.


Poderamos criar todos os comandos necessrios, para exibir a hora e a data neste formato, cada
vez que a exibio fosse necessria. Porm mais prtico criar uma Sub-rotina que faz este trabalho.
Cada vez que precisarmos exibir a data e a hora neste formato, s chamarmos a Sub-rotina.
Na Listagem 3.8, temos o cdigo da Sub-rotina exibe_data_hora, a qual faz a exibio da data
e da hora, no formato proposto pela Figura 3.46.
Listagem 3.8 A Sub-rotina exibe_data_hora.
1

Sub exibe_data_hora

mes_atual=Month(Date())

mes_nome=MonthName(mes_atual,False)

153

Criando Sites Dinmicos com ASP 3.0

mensagem = Ano atual: & Year(Date()) & Chr(13)

mensagem = mensagem & Ms atual: & mes_nome & Chr(13)

mensagem = mensagem & Hoje dia: & Day(Date())& Chr(13)


mensagem = mensagem & Chr(13) & *************** & Chr(13)& Chr(13)

hora_atual = Hour(Time())

minuto_atual = Minute(Time())

segundo_atual = Second(Time())

10

mensagem = mensagem & Hora atual: & hora_atual & chr(13)

11

mensagem = mensagem & Minuto atual: & minuto_atual & chr(13)

12

mensagem = mensagem & Segundo atual: & segundo_atual

13

MsgBox mensagem

14

End Sub

Agora, cada vez que for necessrio exibir a data e a hora nos formatos do exemplo, basta
chamar a Sub-rotina exibe_data_hora, utilizando um dos seguintes comandos:
Call exibe_data_hora

ou
exibe_data_hora

Criando e Utilizando Funes


Uma funo um grupo de comandos que podem ser executados, simplesmente atravs da
chamada do nome da Funo. Podemos passar um ou mais argumentos para uma Funo, e
quando a mesma chamada, a execuo desloca-se para dentro da Funo e executa todos os
comandos. Depois, a execuo do script continua, com o comando seguinte ao que chamou a
Funo. A diferena da Funo para a Sub-rotina, que a primeira sempre retorna um valor
para o comando que a chamou.
A sintaxe para declarao de uma Funo a seguinte:
Function Nome_da_Funo(argumento1, argumento2, ..., argumenton)
Comando1
Comando2
...
Comandon
End Function

154

Captulo 3 Funes, Procedimentos e Eventos com VBScript

Uma Funo pode, ou no, conter argumentos. Caso sejam necessrios argumentos, os mesmos
sero passados quando a Funo for chamada, e devem ser passados, na mesma ordem em
que foram definidos.

DICA
Quando voc criar Funo, procure utilizar nomes que descrevam os objetivos da Funo.
Com isso voc torna o entendimento do cdigo mais fcil para quem for utiliz-lo.

Considere o seguinte exemplo de declarao de uma Funo:


Function Converte_para_dolar(valor_em_real, cotacao_dolar)
Comando1
Comando2
...
Comandon
End Function

Neste caso, declaramos uma Funo chamada Converte_para_dolar, a qual espera receber
dois parmetros: um valor em real e a cotao do dlar.
Uma vez criada a Funo, devemos cham-la, em um comando de atribuio, isto , o valor retornado
pela funo, deve ser atribudo a uma varivel, ou exibido atravs de um comando como MsgBox.
No exemplo abaixo, estamos atribuindo o valor de retorno da funo, varivel valor_dolar.
valor_dolar = Converte_para_dolar (1500,1.81)

Tambm poderamos exibir o valor retornado pela funo, utilizando o comando MsgBox,
conforme indicado a seguir:
MsgBox Valor em dlar: & Converte_para_dolar (1500,1.81)

Observe que os parmetros so passados dentro dos parnteses, e na mesma ordem definida
quando da criao da funo.
Tambm poderamos declarar uma Funo, sem parmetros. Neste caso posso simplesmente
no utilizar os parnteses aps o nome da Funo, ou utilizar um par de parnteses, sem nada
dentro, conforme indicado a seguir:
Function Nome_da_Funo
Comando1
Comando2
...
Comandon
End Function

155

Criando Sites Dinmicos com ASP 3.0

ou
Function Nome_da_Funo( )
Comando1
Comando2
...
Comandon
End Function

Por exemplo, vamos criar uma Funo que converte um valor de um ngulo de graus para
radianos. Depois a utilizaremos dentro de um lao For...Next, para exibir o valor em radianos,
para os ngulos de 0 a 20 graus.
Na Listagem 3.9, temos o exemplo de um script onde foi criada a funo CRad, que converte
um valor em graus para radianos. Depois utilizamos um lao For para exibir, atravs de uma
caixa de mensagem, os valores em radianos, para os ngulos de 0 a 20 graus.
Listagem 3.9 A Funo CRad Converte valores de graus para radianos.
1

<HTML>

<HEAD>

<TITLE>Exemplo de criao de Funo CRad.</TITLE>

</HEAD>

<BODY>

<SCRIPT LANGUAGE=vbscript>

<!

Criao da funo CRad.

Function CRad(valor_graus)

10

CRad = (valor_graus*3.14)/180

11

End Function

12

For i=0 to 20

13

mensagem = mensagem & Angulo: & i & Valor em Radianos: &


FormatNumber(CRad(i),5)& Chr(13)

14

Next

15

MsgBox mensagem

156

Captulo 3 Funes, Procedimentos e Eventos com VBScript

16

>

17

</SCRIPT>

18

<P>Converte de graus para radianos.</P>

19

</BODY>

20

</HTML>

Observe que, dentro da Funo, atribumos varivel CRad um determinado valor. isso
que caracteriza uma Funo. Dentro de seu cdigo, devemos atribuir a uma varivel que
tenha o mesmo nome da Funo, um determinado valor. Este valor que ser o valor de
retorno da Funo.
Tambm cabe salientar o uso da funo FormatNumber, dentro do lao For. Essa funo
utilizada para formatar a maneira como um nmero exibido. Neste caso, utilizamos a funo
FormatNumber, para limitar o nmero de casas decimais, a cinco casas depois da vrgula.
Em cada passada do lao For...Next chamamos a funo CRad, para fazer a converso de
graus para radianos. O valor retornado pela funo CRad, passado para a funo
FormatNumber, para ser formatado com apenas cinco casas decimais.

OBSERVAO
A linha 13 est sendo exibida em duas linhas, por questes de espao. Quando for criar este
script, todo o contedo da linha 13, deve ser digitado em uma nica linha.

Trabalhando com Eventos no VBScript


Com o Internet Explorer, temos um conjunto de objetos a nossa disposio. Cada um destes
objetos possui um conjunto de eventos, para os quais podemos criar cdigo.
Um evento uma ao realizada pelo usurio em uma pgina. Por exemplo, quando o usurio
clica com o mouse, em um boto de comando, gerado o evento onclick deste boto. Para
cada evento, existe uma Sub-rotina associada, para a qual podemos criar cdigo em resposta
ao evento. Por exemplo, quando o usurio clica em um boto de comando, podemos colocar
cdigo no evento onclick deste boto, que valida os dados digitados pelo usurio. Caso algum
dado esteja com problemas, uma mensagem de erro exibida, solicitando que o usurio
corrija os dados com problema.
No Modelo de Objetos do Internet Explorer, temos quatro objetos que podem responder a eventos:

157

Criando Sites Dinmicos com ASP 3.0

Window.
Document.
Form.
Element.
Para criar procedimentos que respondam a eventos utilizamos o seguinte formato:
<SCRIPT ID=clientEventHandlersVBS LANGUAGE=vbscript>
<!
Sub NomeDoObjeto_NomeDoEvento
Comando1
Comando2
...
Comandon
End Sub
>
</SCRIPT>

O nome da Sub-rotina que define a qual evento a mesma ir responder. O padro para o
nome da Sub-rotina : NomeDoObjeto_NomeDoEvento.
Na Listagem 3.10, temos um exemplo de utilizao do evento Onload, do objeto Window.
Este evento, conforme o prprio nome sugere, ocorre quando a pgina carregada. Observe
que o nome da Sub-rotina : Window_onload, o que conforme descrito, significa o evento
Onload do objeto Window.
Listagem 3.10 O evento Onload do objeto Window.
1

<HTML>

<HEAD>

<TITLE>Exemplo de eventos.</TITLE>

<SCRIPT ID=clientEventHandlersVBS LANGUAGE=vbscript>

<!

Sub Window_onload

MsgBox A pgina est sendo carregada!!

End Sub

>

158

Captulo 3 Funes, Procedimentos e Eventos com VBScript

10

</SCRIPT>

11

</HEAD>

12

<BODY>

13

<P>Exemplo de utilizao do evento onload do objeto Window.</P>

14

</BODY>

15

</HTML>

Ao ser carregada esta pgina, o evento Onload do objeto Window disparado, e o cdigo da
Sub-rotina Window_onload executado. Com isso exibida uma caixa de mensagem, conforme
indicado na Figura 3.47.

Figura 3.47: Caixa de dilogo criada pelo evento Window_onload.

Principais Eventos dos Objetos do Internet Explorer


O objeto Window o objeto de mais alto nvel. Ele representa a janela do Internet Explorer e
todos os seus elementos. Existem diversos eventos disponveis para o objeto Window, conforme
descrito na Tabela 3.6.
Tabela 3.6 Os eventos do objeto Window.
Evento

Descrio

Onbeforeunload

Ocorre quando a janela est para ser fechada.

Onblur

Ocorre quando a janela perde o foco.

Onerror

Ocorre quando um erro gerado na janela.

Onfocus

Ocorre quando a janela recebe o foco.

Onhelp

Ocorre quando pressionada a tecla F1.

159

Criando Sites Dinmicos com ASP 3.0

Evento

Descrio

Onload

Ocorre quando a janela est sendo carregada.

Onresize

Ocorre quando a janela redimensionada.

Onscroll

Ocorre quando o usurio rola atravs do


contedo da janela.

Onunload

Ocorre quando a janela fechada.

Na Listagem 3.11, temos cdigo definido para os eventos Window_onload, Window_onhelp


e Window_onunload.
Listagem 3.11 Utilizando alguns eventos do objeto Window.
1

<HTML>

<HEAD>

<TITLE>Exemplo de eventos.</TITLE>

<SCRIPT ID=clientEventHandlersVBS LANGUAGE=vbscript>

<!

Sub Window_onload

MsgBox A pgina est sendo carregada!!

End Sub

Sub Window_onhelp

10

MsgBox Voc pressionou a tecla F1!!

11

End Sub

12

Sub Window_onunload

13
14

MsgBox Voc est fechando este documento!!!


End Sub

15

>

16

</SCRIPT>

17

</HEAD>

18

<BODY>

19

<P>Exemplo de utilizao de eventos do objeto Window.</P>

20

</BODY>

21

</HTML>

160

Captulo 3 Funes, Procedimentos e Eventos com VBScript

NOTA
Ao pressionar F1, ser exibida a mensagem indicada na Figura 3.48, e logo em seguida ser
aberta uma janela com a Ajuda do Internet Explorer, conforme indicado na Figura 3.49, uma
vez que F1 a tecla padro de Ajuda no Windows.

Figura 3.48: Mensagem exibida pelo evento Window_onhelp.

Figura 3.49: Janela com a Ajuda do Internet Explorer.


O objeto Document representa todo o contedo existente dentro do objeto Window. Existem
diversos eventos disponveis para o objeto Document, conforme descrito na Tabela 3.7.

161

Criando Sites Dinmicos com ASP 3.0

Tabela 3.7 Os eventos do objeto Documento.


Evento

Descrio

Onafterupdate

Ocorre aps os dados terem sido enviados para o servidor


Web. Por exemplo, quando a pgina possui um formulrio, no
qual o usurio preenche os campos e depois clica no boto
Enviar, enviando os dados para o servidor Web. Este, na
verdade, um evento que ocorre no objeto Form, mas como
o objeto Form est contido no objeto Document, o objeto
Documento tambm capaz de responder a este evento.

Onbeforeupdate

Ocorre antes que os dados tenham sido enviados para o


servidor Web. Por exemplo, quando a pgina possui um
formulrio, no qual o usurio preenche os campos e
depois clica no boto Enviar, enviando os dados para o
servidor Web. Este, na verdade, um evento que ocorre
no objeto Form, mas como o objeto Form est contido no
objeto Document, o objeto Document tambm capaz de
responder a este evento.

Onclick

Ocorre cada vez que o usurio clica no documento.

Ondblclick

Ocorre quando o usurio d um clique duplo no


documento.

Ondragstart

Ocorre quando o usurio comea a arrastar algum


elemento no documento.

Onhelp

Ocorre quando o usurio pressiona a tecla F1.

OnKeyDown

Ocorre quando uma tecla pressionada, com exceo de


algumas teclas especiais, como Alt, por exemplo.

OnKeyPress

Ocorre quando qualquer tecla pressionada, inclusive as


teclas especiais.

OnKeyUp

Ocorre quando uma tecla, que estava pressionada, liberada.

Onmousedown

Ocorre quando um boto do mouse pressionado.

Onmousemove

Ocorre quando o mouse movimentado sobre o documento.

Onmouseup

Ocorre quando um boto, que estava pressionado, liberado.

Onselectstart

Ocorre quando um elemento do documento selecionado.

162

Captulo 3 Funes, Procedimentos e Eventos com VBScript

Agora vamos listar os principais eventos do objeto Form. O objeto Form criado com a tag
<FORM> </FORM>. Podemos ter mais do que um objeto Form em um documento, desde
que os mesmos possuam nomes diferentes. Existem diversos eventos disponveis para o objeto
Form, conforme descrito na Tabela 3.8.
Tabela 3.8 Os eventos do objeto Form.
Evento

Descrio

Onafterupdate

Ocorre aps os dados terem sido enviados para o servidor


Web. Por exemplo, quando a pgina possui um formulrio,
no qual o usurio preenche os campos e depois clica no
boto Enviar, enviando os dados para o servidor Web.

Onbeforeupdate

Ocorre antes que os dados tenham sido enviados para o


servidor Web. Por exemplo, quando a pgina possui um
formulrio, no qual o usurio preenche os campos e
depois clica no boto Enviar, enviando os dados para o
servidor Web.

Onclick

Ocorre cada vez que o usurio clica no formulrio.

Ondblclick

Ocorre quando o usurio d um clique duplo no formulrio.

Ondragstart

Ocorre quando o usurio comea a arrastar algum


elemento no formulrio.

Onhelp

Ocorre quando o usurio pressiona a tecla F1.

OnKeyDown

Ocorre quando uma tecla pressionada, com exceo de


algumas teclas especiais, como Alt, por exemplo.

OnKeyPress

Ocorre quando qualquer tecla pressionada, inclusive as


teclas especiais.

OnKeyUp

Ocorre quando uma tecla, que estava pressionada, liberada.

Onmousedown

Ocorre quando um boto do mouse pressionado.

Onmousemove

Ocorre quando o mouse movimentado sobre o


formulrio.

Onmouseout

Ocorre quando o usurio move o mouse para fora da rea


do formulrio.

Onmouseover

Ocorre quando o mouse movimentado sobre o


formulrio.

163

Criando Sites Dinmicos com ASP 3.0

Evento

Descrio

Onmouseup

Ocorre quando um boto, que estava pressionado,


liberado.

Onselectstart

Ocorre quando um elemento do formulrio selecionado.

Onsubmit

Ocorre quando o usurio clica no boto Enviar do formulrio.

Onreset

Ocorre quando o usurio clica no boto Reset do formulrio.

Agora vamos listar os principais eventos do objeto Element. O objeto Element, representa
qualquer controle ou elemento visvel que possa ser colocado em uma pgina. Podemos ter
mais do que um objeto Element em um documento, sendo que cada objeto identificado pelo
seu nome. No podemos ter dois elementos com o mesmo nome. Existem diversos eventos
disponveis para o objeto Element, conforme descrito na Tabela 3.9.
Tabela 3.9 Os eventos do objeto Element.
Evento

Descrio

Onafterupdate

Ocorre aps os dados terem sido enviados para o servidor


Web. Por exemplo, quando a pgina possui um formulrio,
no qual o usurio preenche os campos e depois clica no
boto Enviar, enviando os dados para o servidor Web.

Onbeforeupdate

Ocorre antes que os dados tenham sido enviados para o


servidor Web. Por exemplo, quando a pgina possui um
formulrio, no qual o usurio preenche os campos e
depois clica no boto Enviar, enviando os dados para o
servidor Web.

Onblur

Ocorre quando o elemento perde o foco.

Onchange

Ocorre quando os dados do elemento so alterados. Por


exemplo, quando alteramos o valor de um campo de
texto, em um formulrio.

Onclick

Ocorre cada vez que o usurio clica no elemento.

Ondblclick

Ocorre quando o usurio d um clique duplo no elemento.

Ondragstart

Ocorre quando o usurio comea a arrastar um elemento


pela primeira vez.

164

Captulo 3 Funes, Procedimentos e Eventos com VBScript

Evento

Descrio

Onfocus

Ocorre quando o elemento recebe o foco.

Onhelp

Ocorre quando o usurio pressiona a tecla F1.

OnKeyDown

Ocorre quando uma tecla pressionada, com exceo de


algumas teclas especiais, como Alt, por exemplo.

OnKeyPress

Ocorre quando qualquer tecla pressionada, inclusive


as teclas especiais.

OnKeyUp

Ocorre quando uma tecla, que estava pressionada, liberada.

Onmousedown

Ocorre quando um boto do mouse pressionado.

Onmousemove

Ocorre quando o mouse movimentado sobre o formulrio.

Onmouseout

Ocorre quando o usurio move o mouse para fora da rea


do formulrio.

Onmouseover

Ocorre quando o mouse movimentado sobre o formulrio.

Onmouseup

Ocorre quando um boto, que estava pressionado, liberado.

Onresize

Ocorre quando o elemento redimensionado.

Onselectstart

Ocorre quando um elemento selecionado.

Onsubmit

Ocorre quando o usurio clica no boto Enviar do formulrio.

Onselect

Ocorre quando o usurio termina de selecionar os dados de


um controle de entrada, como uma caixa de texto, por exemplo.

Apenas para exemplificar a utilizao de eventos, vamos criar uma pgina onde temos uma
caixa de seleo. Nesta caixa de seleo temos trs opes: Axcel Books, Developers Magazine
e Microsoft. Quando o usurio seleciona uma destas opes, o Internet Explorer,
automaticamente, carrega a pgina relacionada.
A Figura 3.50, mostra a pgina de exemplo.
Para tornar esta lista dinmica, utilizamos o modelo de eventos e cdigo VBScript, conforme
indicado na Listagem 3.12.

165

Criando Sites Dinmicos com ASP 3.0

Figura 3.50: Criando uma lista de navegao.


Listagem 3.12 Criando uma lista de navegao dinmica.
1

<HTML>

<HEAD>

<TITLE></TITLE>

<SCRIPT ID=clientEventHandlersVBS LANGUAGE=vbscript>

<!

Sub navega_onchange

window.navigate window.navega.value

End Sub

>

10

</SCRIPT>

11

</HEAD>

12

<BODY>

13

<P>Selecione uma opo na lista, para ir pgina selecionada:</P>

14

<P>

15

<SELECT id=navega name=navega>

16

<OPTION

selected value=Informativo>Selecione uma opo na lista</OPTION>

166

Captulo 3 Funes, Procedimentos e Eventos com VBScript

17

<OPTION

value=http://www.axcel.com.br>Axcel Books Editora</OPTION>

18

<OPTION

value=http://www.developers.com.br>Developers Magazine</OPTION>

19

<OPTION

value=http://www.microsoft.com>Microsoft</OPTION>

20

SELECT>

21

</P>

22

</BODY>

23

</HTML>

Para tornar a lista dinmica, utilizamos o evento onchange, do controle Navega. O controle
navega uma caixa de combinao. Para maiores informaes sobre criao de formulrio
com HTML, consulte o Captulo 2. Utilizamos o evento navega_onchange, o qual acontece
toda vez que um elemento da lista for selecionado.
Vejam que com uma nica linha de cdigo, tornamos a lista dinmica. A linha de cdigo foi
a seguinte:
window.navigate window.navega.value

A primeira parte utiliza o mtodo Navigate do objeto Window. Este mtodo utilizado para
carregar uma pgina no Internet Explorer. O mtodo Navigate espera receber um nico
parmetro, que o endereo da pgina que deve ser carregada. Este parmetro obtido a
partir da propriedade value do controle Navega. Cada opo da caixa de combinao possui
um valor associado. Por exemplo, quando o usurio seleciona Microsoft, a propriedade value
definida como http://www.microsoft.com, e este parmetro passado para o mtodo
window.navigate, fazendo com que seja carregada a pgina da Microsoft. Este o comportamento desejado para a nossa pgina, ou seja, quando uma opo selecionada, a pgina associada
a ela, deve ser carregada no Internet Explorer.

IMPORTANTE
Estamos utilizando o modelo de objetos e de eventos do Internet Explorer. O Nestcape Navigator
possui um modelo de objetos diferente do modelo do Internet Explorer. Por isso, scripts
desenvolvidos para o modelo do Internet Explorer, podem no funcionar corretamente no Netscape.

Concluso
Neste captulo, abordamos diversos tpicos importantes do VBScript. Iniciamos pelas funes
para determinao do subtipo de uma varivel, bem como funes para converso de subtipos.
Depois passamos a tratar de outras funes, tais como as para tratamento de texto, data e hora
e funes matemticas. Estas funes so utilizadas na criao de aplicaes prticas e so
de grande ajuda.

167

Criando Sites Dinmicos com ASP 3.0

Em seguida, aprendemos a criar e utilizar Sub-rotinas e Funes, conhecendo as vantagens


de sua utilizao.
Na parte final do captulo, tratamos sobre o modelo de objetos do Internet Explorer e os
principais eventos associados a cada um dos objetos. Para quem procura maiores informaes
sobre este assunto, sugiro o seguinte endereo: http://msdn.microsoft.com/scripting.
A partir do prximo captulo estaremos aprendendo a utilizar a tecnologia ASP na criao de
pginas e sites dinmicos. O contedo apresentado nestes captulos iniciais de fundamental
importncia para a aprendizagem de ASP, e formam a base para o restante do livro.

168

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

Captulo 4
A Tecnologia ASP e o Modelo
de Objetos do ASP 3.0

169

Criando Sites Dinmicos com ASP 3.0

Introduo
Vamos iniciar, a partir deste captulo, a nossa jornada rumo a aprendizagem da tecnologia de
Active Server Pages ASP 3.0. Passaremos ao aprendizado de uma srie de conceitos importantes,
os quais so utilizados na construo de pginas dinmicas e aplicativos para a Web.
Iniciaremos o captulo com uma apresentao detalhada sobre a tecnologia ASP, para que
possam ser solucionadas quaisquer dvidas, que por ventura o leitor ainda tenha a respeito
do que exatamente esta tecnologia e do que necessrio para utiliz-la.
Em seguida, passaremos ao estudo do Modelo de Objetos do ASP 3.0, apresentando uma
viso geral sobre o Modelo de Objetos e a funo de cada um dos objetos existentes.
Feitas as devidas apresentaes, passaremos a estudar alguns objetos do ASP 3.0, sempre
ilustrando os conceitos apresentados com exemplos prticos e de fcil assimilao. Nos
exemplos procuro ilustrar a forma de utilizao de cada um dos objetos, de modo que os
mesmos possam ser facilmente, adaptados para uso nas aplicaes que se esteja desenvolvendo.

NOTA
Os objetos, que no forem tratados neste captulo, sero vistos nos demais captulos deste livro.

Finalizaremos o captulo com alguns exemplos mais elaborados, onde procuro apresentar
diversas utilizaes prticas para os objetos da tecnologia ASP 3.0.

Entendendo e Utilizando ASP


Quando comeamos a utilizar ASP, surgem algumas dvidas a respeito desta tecnologia. Conhecer
os diversos objetos, mtodos e comandos importante, porm igualmente importante conhecer
o funcionamento de uma pgina ASP. Para isso temos que responder s seguintes perguntas:
Como e onde uma pgina ASP processada?
O que uma pgina ASP retorna para o navegador do cliente?
O que preciso para criar e acessar pginas ASP?
Vamos s respostas.

170

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

Como e Onde uma Pgina ASP Processada?


Primeiro devemos lembrar que o que caracteriza uma pgina como sendo uma pgina ASP
a extenso .asp. Isto significa que nossas pginas devem ter a extenso .asp e no .htm ou
.html, normalmente utilizadas para pginas HTML estticas. Por exemplo, quando o usurio
digita um endereo como o seguinte:
http://www.abc.com.br/compras.asp

o servidor identifica a pgina como sendo uma pgina ASP, devido a extenso .asp.
Uma vez identificada, a pgina ASP processada pelo servidor Web (que pode ser o IIS ou o
Personal Web Server). O servidor, aps identificar a pgina ASP, passa a mesma para uma DLL
chamada ASP.DLL. O cdigo contido nesta DLL analisa toda a pgina ASP, linha por linha, em
busca de linhas de cdigo ASP, o qual executado. Aps executado todo o cdigo existente na
pgina, o resultado, no formato de uma pgina HTML simples, enviado para o navegador do
cliente. Este processo detalhado na Figura 4.1 e explicado em seguida.
1) www.abc.com.br/page1.asp

Cliente

Servidor Web IIS


2) Identifica que uma pgina ASP.
3) Passa o processamento para ASP.DLL
4) Interpreta e executa o cdigo existente.
5) Retorna um resultado no formato HTML.

Cliente
1) www.abc.com.br/page2.asp

Figura 4.1: O processamento de uma pgina ASP.


Abaixo descrevemos, detalhadamente, os passos indicados na Figura 4.1.
1. O usurio digita o endereo ou clica em um link para uma pgina ASP, como por
exemplo www.abc.com.br/catalogo/precos.asp. O pedido do usurio enviado para o
servidor Web, que no nosso exemplo o IIS Internet Information Services.

171

Criando Sites Dinmicos com ASP 3.0

2. O servidor identifica que o pedido para uma pgina que contm cdigo ASP, pois a
extenso da pgina .asp. No exemplo da Figura 4.1 um dos clientes solicita a pgina
page1.asp e o outro a pgina page2.asp.
3. Uma vez identificada como uma pgina ASP, o servidor Web passa o processamento da
pgina para o interpretador ASP (que no caso a DLL ASP.DLL, normalmente instalada
no diretrio winnt\System32\inetsrv, o qual o diretrio de instalao do IIS).
4. O interpretador passa linha por linha da pgina ASP. Sempre que for encontrado cdigo
ASP, o mesmo interpretado e executado.
5. Aps todo o cdigo ter sido executado, o resultado do processamento enviado para o
navegador do cliente, no formato de uma pgina HTML padro. importante detalhar
bastante este ponto, pois existem muitas confuses e interpretaes errneas a respeito
do mesmo. Vamos fazer isso no prximo item.
Com isso podemos responder a pergunta do item: como e onde uma pgina ASP processada?
Uma pgina ASP processada no servidor Web (IIS ou Personal Web Server) pelo interpretador
ASP (ASP.DLL). O interpretador percorre a pgina, linha por linha, interpretando e executando
todo o cdigo existente na pgina.
Agora vamos detalhar um pouco mais sobre o que a pgina ASP retorna para o navegador
do cliente.

O que uma Pgina ASP Retorna Para o Navegador do Cliente?


Quando o usurio digita o endereo ou clica em um link para uma pgina ASP, por exemplo
www.abc.com.br/page1.asp, a pgina page1.asp interpretada e o cdigo ASP executado.
Enquanto a pgina est sendo executada nada retornado para o cliente (embora possamos
ter um certo controle sobre isso, fazendo com que a pgina seja exibida medida que a
mesma vai sendo interpretada e executada. Aprenderemos a fazer este controle mais adiante.).
Aps o processamento da pgina, o resultado retornado para o navegador do cliente. Nunca
demais repetir que o que enviado para o navegador do cliente apenas cdigo HTML
padro, resultante do processamento da pgina ASP. Isso pode facilmente ser comprovado.
No Internet Explorer 5.0 ou superior, basta que o usurio selecione o comando Exibir/Cdigo
fonte, no menu de Opes. Isto ir exibir o cdigo fonte da pgina que enviada para o
navegador do cliente. Uma observao atenta suficiente para verificar que o resultado
apenas cdigo HTML. Vamos exemplificar este fato. Considere a pgina ASP, extremamente
simples, da Listagem 4.1.

172

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

Listagem 4.1 Uma pgina ASP simples list4-1.asp.


1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

<BODY>

<H1>EXEMPLO DE PGINA ASP</H1>

<%

Response.Write Toda pgina ASP interpretada <BR>

Response.Write e executada no servidor WEB !!!<BR>

10

Response.Write O resultado que retorna para o navegador<BR>

11

Response.Write do cliente, cdigo HTML padro.

12

%>

13

</BODY>

14

</HTML>

Ao acessar esta pgina ASP, o servidor Web interpreta e executa todo o cdigo existente. No
nosso exemplo, o cdigo ASP inicia na linha 7 e termina na linha 12. Relembrando o que
vimos no Captulo 1: toda seo de cdigo ASP inicia com <% e termina com %>.
O resultado, gerado pela pgina ASP, cdigo HTML padro, o qual enviado para o navegador
do cliente. A Figura 4.2, mostra a pgina list4-1.asp sendo acessada no Internet Explorer.

Figura 4.2: Acessando a pgina list4-1.asp.

173

Criando Sites Dinmicos com ASP 3.0

Se escolhermos o comando Exibir/Cdigo fonte, veremos o resultado indicado na Figura 4.3,


o que nada mais do que cdigo HTML. Isto comprova o que foi descrito neste item.

Figura 4.3: Cdigo HTML resultante do processamento da pgina ASP.


Apenas para esclarecer,vamos ver qual o cdigo ASP que gerou a seguinte linha de cdigo HTML:
Toda pgina ASP interpretada <BR>

Esta linha de cdigo HTML resultado da execuo da seguinte linha de cdigo ASP:
Response.Write Toda pgina ASP interpretada <BR>

Ao executar esta linha de cdigo ASP, o interpretador encontra o comando Response.Write. O


interpretador sabe que para enviar para o navegador do cliente, tudo o que estiver entre aspas,
pois o comando Response.Write foi criado justamente para enviar um determinado texto para o
navegador do cliente (seria melhor dizer: O mtodo Write do objeto Response, ao invs de
Response.Write, mas falaremos mais sobre objetos e seus mtodos durante todo este captulo).
Neste exemplo, simplesmente estamos utilizando o comando Response.Write para enviar o
cdigo HTML para o cliente. A tag <BR> a utilizada para quebra de linha: BR Break Row.
Outro detalhe interessante a ser observado que temos cdigo HTML fora da seo de cdigo
ASP. Na listagem 4.1, a linha 6 <H1>EXEMPLO DE PGINA ASP</H1> cdigo HTML.
Neste caso estamos utilizando a tag <H1> para criar o cabealho do documento, conforme
indicado na Figura 4.2. Este cdigo HTML, que no gerado por comandos ASP, enviado
diretamente para o navegador do cliente, quando a pgina ASP acessada.

174

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

Veja que a possibilidade de alternar trechos de cdigo HTML, com trechos de cdigo ASP,
dentro de uma mesma pgina ASP, nos d uma grande flexibilidade. As partes da pgina que
no apresentam natureza dinmica, podem ser criadas simplesmente utilizando cdigo HTML.
Outras partes que necessitam ser dinamicamente criadas, quer seja atravs da realizao de
clculos ou atravs do acesso a campos de uma tabela de um banco de dados, podem ser
criadas utilizando cdigo ASP. Alm disso podemos ter vrias sees de cdigo ASP dentro
de uma mesma pgina. Para iniciar uma seo utilizo <% e para finalizar a seo utilizo %>.
Posso colocar cdigo HTML entre as diversas sees de cdigo ASP. Com isso vou criando a
pgina utilizando HTML nos pontos estticos e ASP nos pontos que precisam ser dinmicos.

O que Preciso Para Criar e Acessar Pginas ASP?


Uma pgina ASP gravada no servidor, no formato de um arquivo de texto comum, no qual
colocamos cdigo HTML e cdigo ASP, conforme descrito anteriormente. Por isso, posso
utilizar um redator de texto, como por exemplo o Bloco de Notas, para criao de pginas
ASP. Uma vez criado o arquivo .asp, basta salv-lo em uma pasta no servidor Web e pronto, o
mesmo j pode ser acessado pelo navegador do cliente.
Tambm existem ferramentas grficas que facilitam a criao de aplicaes para a Web,
utilizando a tecnologia ASP. Uma ferramenta, desenvolvida pela prpria Microsoft, o
Microsoft Visual Interdev, o qual est, atualmente, na sua verso 6.0.
Como descrito anteriormente, uma pgina ASP interpretada e executada no servidor Web.
Como servidor Web devemos utilizar o IIS Internet Information Services 5.0 (o qual faz
parte do Windows 2000 Server), ou o Personal Web Server, para Windows 95 ou Windows 98.
No existe, por exemplo, um interpretador ASP para o servidor Web Apache, ou para o Domino
da Lotus. Para maiores informaes sobre os servidores Web que suportam ASP, consulte a
Introduo deste livro.
Podemos acessar pginas ASP utilizando qualquer navegador disponvel (Internet Explorer,
Netscape Navigator, Mosaic, etc.). Isto possvel pelo fato de que uma pgina ASP interpretada e executada no servidor Web, retornando apenas cdigo HTML padro. Qualquer navegador
capaz de exibir o contedo do cdigo HTML de retorno. Com isso a utilizao de pginas
ASP independe do navegador do cliente, o que passa a ser uma preocupao a menos para
quem desenvolve as pginas.
O fato de uma pgina ASP ser interpretada e executada no servidor Web traz inmeras
vantagens, conforme j descrevemos, porm traz a desvantagem de no poder ser testada
localmente. Isto significa que voc no pode simplesmente gravar uma pgina ASP em uma
pasta do seu computador e tentar acess-la atravs do seu navegador. Fazendo isso, todo o
cdigo ASP ser, simplesmente, ignorado. Para que uma pgina ASP seja processada

175

Criando Sites Dinmicos com ASP 3.0

corretamente, a mesma precisa estar armazenada em um servidor como o IIS, onde existe o
interpretador ASP. A pgina deve ser acessada utilizando-se o protocolo HTTP, isto , ou voc
digita o endereo da pgina, como por exemplo http://www.abc.com.br/page1.asp, ou clica
em um link que aponta para a pgina ASP gravada no servidor Web.
Uma das novidades da tecnologia ASP 3.0 que podemos ter pginas com a extenso .asp,
sem que as mesmas contenham cdigo ASP. Por exemplo, posso ter uma pgina .asp que
contm apenas cdigo HTML. Quando esta pgina solicitada, o servidor Web passa a
solicitao para o interpretador ASP (ASP.DLL). A primeira coisa que o interpretador faz
verificar se existe algum cdigo a ser interpretado e executado. Caso no exista cdigo ASP, a
pgina enviada de volta para o IIS, o qual retorna a pgina para o navegador do cliente. Com
este procedimento o interpretador no precisa passar a pgina, linha por linha. Isto torna a
execuo das pginas bem mais rpida.
Caso a pgina possua cdigo ASP, o cdigo interpretado e executado, e o resultado do
processamento retornado para o IIS. Ser inserido o cdigo HTML, retornado pelo processador
ASP, nos pontos especficos da pgina, e o IIS enviar, depois, a pgina resultante no formato
HTML para o navegador do cliente. Com isso posso criar todas as pginas com a extenso
.asp, mesmo aquelas que no iro conter cdigo ASP. Caso sejam necessrias mudanas nas
pginas, posso inserir o cdigo ASP, sem que precise alterar os links do site, pois as extenses
das pginas no precisaro ser alteradas (isso aconteceria somente se tivssemos criado as
pginas como .htm e depois trocado a extenso para .asp quando fosse necessrio inserir
cdigo ASP nas pginas).

Objetos do ASP 3.0


Com a tecnologia ASP 3.0 temos acesso a uma srie de objetos e mtodos que fazem parte do
prprio ASP. Estes objetos e mtodos fornecem diversas funcionalidades necessrias criao
de pginas dinmicas. Como exemplo, temos um objeto chamado Request, o qual pode ser
utilizado para processar as informaes que o usurio preenche em um formulrio. Temos
tambm um objeto Response, do qual j utilizamos o mtodo Write na Listagem 4.1, o qual
utilizado para retornar informaes para o navegador do cliente, alm de vrios outros.
Neste item faremos uma apresentao genrica sobre o Modelo de Objetos do ASP 3.0, bem
como uma breve descrio de cada objeto. Nos demais itens deste captulo estaremos tratando,
em detalhes, de cada um destes objetos. Estudaremos os objetos atravs de exemplos prticos
de utilizao dos mesmos.

176

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

Uma Viso Geral do Modelo de Objetos do ASP 3.0


O Modelo de Objetos do ASP 3.0 apresenta os seguintes objetos:
Response
Request
Application
Session
Server
ASPError (este novidade do ASP 3.0).
Cada um destes objetos pode possuir os seguintes elementos:
Methods (Mtodos)
Collections (Colees)
Properties (Propriedades)
Events (Eventos)
Chamamos um mtodo de um objeto para que o mesmo realize uma determinada ao. De
maneira geral, sem nos preocuparmos em sermos precisos em relao teoria de Orientao
a Objetos, poderamos dizer que: Um mtodo um comportamento ou ao realizada por
um objeto. Por exemplo, quando utilizamos o mtodo Write do objeto Response
(Response.Write), o comportamento esperado que o mtodo Write envie o texto fornecido
entre aspas, para o servidor Web, que por sua vez envia para o navegador do cliente.
Conforme pode ser constatado pela Listagem 4.1, para chamarmos um mtodo de um objeto,
utilizamos a seguinte sintaxe:
Nome_do_objeto.Nome_do_mtodo parmetros

Observe o exemplo da Figura 4.4.

Mtodo

Response.Write "Objetos do ASP 3.0!!!"


Objeto

Parmetro

Figura 4.4: Utilizando o mtodo Write do objeto Response.

177

Criando Sites Dinmicos com ASP 3.0

Uma propriedade de um objeto define uma caracterstica ou atributo do mesmo. Por exemplo,
temos a propriedade ScriptTimeout, a qual define o tempo mximo em que o cdigo ASP
pode ficar sendo executado em uma pgina, antes que o servidor cancele a execuo e retorne
uma mensagem de erro. O valor padro de 90 segundos. O exemplo seguinte define esta
propriedade para 5 minutos (300 segundos):
Server.ScriptTimeout = 300

Observe que as propriedades de um objeto so chamadas da mesma maneira que os mtodos,


isto :
Nome_do_objeto.Nome_da_propriedade = valor

Uma coleo contm um ou mais valores, os quais podem ser acessados pelo cdigo ASP. Por
exemplo, a coleo Form, do objeto Request, contm os nomes e valores de todos os controles de
um formulrio cujos dados foram passados para processamento da pgina ASP. Lembre que isto
feito atravs do atributo Action da tag FORM, alm disso o atributo Method deve ser definido
em POST. Para maiores detalhes sobre os atributos Action e Method, consulte o Captulo 2.

Figura 4.5: O Modelo de Objetos do ASP 3.0.


Um evento uma determinada ao que acontece, e para a qual podemos escrever cdigo
ASP em resposta. Por exemplo, o objeto Session contm um evento OnStart, que ocorre quando
um usurio estabelece uma sesso com uma pgina ASP antes que uma requisio do usurio

178

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

seja executada. Podemos utilizar este evento para iniciar variveis ou rodar qualquer outro
cdigo que seja necessrio. Voc j deve ter entrado em um site onde necessrio preencher
um formulrio de cadastramento. Da prxima vez que voc entra no site, voc recebe uma
mensagem dizendo Bem vindo Fulano de tal!. Como que o site sabe que voc, ou pelo
menos o seu computador, que est entrando no site? A pgina utiliza o evento Session.OnStart
para ler informaes que foram gravadas no seu computador, normalmente na forma de um
Cookie e determinar quem est acessando a pgina.
Na Figura 4.5, temos uma viso geral de todos os Objetos, seus mtodos, colees, eventos e
propriedades. No restante deste captulo, estaremos aprendendo a utilizar os objetos Response
e Request. Os demais objetos sero vistos ao longo do livro.

O Objeto Request
Com o objeto Request podemos ter acesso a diversas informaes fornecidas pelo cliente ao
acessar uma pgina ASP, ou ao preencher dados em um formulrio e envi-los. Podemos ter
acesso a informaes a respeito do navegador que o cliente est utilizando, quais os Cookies
gravados no computador do usurio, qual Certificado Digital o usurio est utilizando e muitas
outras informaes importantes.
A partir de agora passaremos a estudar os principais mtodos, colees e propriedades do
objeto Request. Analisaremos os diversos aspectos deste objeto, atravs da utilizao de alguns
exemplos prticos.

Colees do Objeto Request


O objeto Request possui diversas colees. Uma coleo nada mais do que uma estrutura de
dados. Nesta estrutura de dados temos diversos valores, e a cada um deles est associada
uma chave de identificao, a qual pode ser utilizada para acessar o valor contido na coleo.
Atravs das colees do objeto Request, podemos ter acesso a diversas informaes do cliente,
como por exemplo, os dados que digita em um formulrio.

A Coleo Form do Objeto Request


Para estudar esta coleo, vamos fazer uma reviso rpida sobre a maneira como os dados
digitados em um formulrio so passados para o servidor para processamento.
Considere o formulrio da Listagem 4.2.

179

Criando Sites Dinmicos com ASP 3.0

Listagem 4.2 Um formulrio HTML simples list4-2.htm.


1

<HTML>

<HEAD>

<TITLE>Formulrio para Cadastro de Clientes !!</TITLE>

</HEAD>

<BODY>

<P><STRONG>Formulrio para Cadastro de Clientes:</STRONG></P>

<P>Digite os dados solicitados e clique no boto Enviar.</P>

<FORM action=list4-2.asp method=post>

<P>Nome: <INPUT id=nome maxLength=50 name=nome></P>

10

<P>Rua: <INPUT id=rua maxLength=35 name=rua ></P>

11

<P>Cidade: <INPUT id=cidade maxLength=30 name=cidade></P>

12

<P>e-mail: <INPUT id=email maxLength=50 name=email></P>

13

<P>Carto Crdito:

14

<INPUT id=cartao name=cartao type=radio value=Visa>Visa

15

<INPUT id=cartao name=cartao type=radio value=Master Card>Master Card

16

<INPUT id=cartao name=cartao type=radio value=Outros>Outros</P>

17

<P>

18

<INPUT id=enviar name=enviar type=submit value=Enviar>

19

<INPUT id=limpar name=limpar type=reset value=Reset>

20

</P>

21

</FORM>

22

</BODY>

23

</HTML>

Ao acessarmos o arquivo da Listagem 4.2, no Internet Explorer, obtemos o resultado indicado


na Figura 4.6.
Para maiores detalhes sobre a construo de formulrios HTML, veja o Captulo 2.
Observe que cada campo possui as propriedades id e name iguais. Definimos estas duas
propriedades para de manter a padronizao. Para os objetos do ASP, o que realmente utilizado
a propriedade name, a qual identifica cada um dos campos de um formulrio.
Observe que o atributo method do formulrio, na linha 8, foi definido como post. Quando
utilizamos o mtodo post, os dados digitados no formulrio so enviados em uma conexo
separada, fazendo com que os mesmos no fiquem visveis na linha de endereo do navegador.

180

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

Alm disso o mtodo post permite que mais informaes sejam enviadas, do que se
estivssemos utilizando o mtodo get. Falaremos um pouco mais sobre as diferenas entre os
mtodos post e get, no prximo item.

Figura 4.6: O formulrio da Listagem 4.2.


O atributo action do formulrio, na linha 8, foi definido como list4-2.asp. Isto significa que a
pgina ASP list4-2.asp que vai processar os dados enviados pelo formulrio. Neste caso
digitamos somente o nome da pgina porque a pgina HTML, que contm o formulrio, e a
pgina ASP, que ir processar os dados digitados no formulrio, esto na mesma pasta do
servidor Web. Poderia acontecer da pgina ASP estar, inclusive, em um outro servidor. Neste
caso devemos digitar o endereo completo da pgina ASP, como por exemplo:
<FORM action=http://www.abc.com.br/Capitulo4/list4-2.asp method=post>

Ao clicar no boto Enviar, os dados digitados no formulrio so passados para a pgina list42.asp. Precisamos de uma maneira de acessar estes dados. A coleo que nos permite ter
acesso a estes dados a coleo Form do objeto Request.

181

Criando Sites Dinmicos com ASP 3.0

IMPORTANTE
A coleo Form somente utilizada quando o atributo method do formulrio definido como
post. Quando o mtodo for definido como get, conforme veremos mais adiante, devemos utilizar
a coleo QueryString, ao invs da coleo Form.

A maneira de acessar os dados exemplificada abaixo:


Request.Form(Nome_do_Campo)

Onde Nome_do_Campo o valor definido no atributo name de cada um dos campos do


formulrio. Por exemplo, o campo nome, na Listagem 4.2, tem a sua propriedade name definida
como nome. Para acessar o valor digitado no campo nome, utilizaramos o seguinte comando:
Request.Form(nome)

Na Listagem 4.3, temos um exemplo para a pgina list4-2.asp, a qual simplesmente informa
ao usurio quais os valores que ele digitou em cada um dos campos. Para isso, utilizamos a
coleo Form do objeto Request.
Listagem 4.3 A pgina ASP list4-2.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

<BODY>

<h2> Voc digitou os seguintes dados !!</h2>

<P>Nome:

<%

=Request.Form(nome)

10

%>

11

</P>

12

<p>Rua:

13

<%

14

=Request.Form(rua)

15

%>

16

</p>

17

<p>Cidade:

182

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

18

<%

19

=Request.Form(cidade)

20

%>

21

</p>

22

<p>E-mail:

23

<%

24

=Request.Form(email)

25

%>

26

</p>

27

<p>Carto de Crdito:

28

<%

29

=Request.Form(cartao)

30

%>

31

</p>

32

<P><A href=list4-2.htm>Clique aqui para voltar ao formulrio</A></P>

33

</BODY>

34

</HTML>

Observe que vamos alternando trechos de cdigo HTML com trechos de cdigo ASP. Vamos
analisar o seguinte trecho de cdigo:
7

<P>Nome:

<%

=Request.Form(nome)

10

%>

11

</P>

Na linha 7, aberta uma tag de pargrafo <P>. Dentro deste pargrafo colocado o texto
Nome:. Na linha 8 aberto um trecho de cdigo ASP, e utilizo a coleo Form do objeto
Request para ter acesso ao valor digitado no campo nome. No nosso exemplo, a linha 9
simplesmente retorna o texto digitado no campo nome do formulrio. Este nome colocado
logo aps Nome:. Finalmente na linha 11 fechado o pargrafo. O resultado deste trecho de
cdigo que retorna para o usurio o seguinte (supondo que no campo nome tenha sido
digitado Jlio Cesar Fabris Battisti):
<P>Nome: Jlio Cesar Fabris Battisti</P>

Na Figura 4.7, temos o retorno da pgina list4-2.asp, para os dados de exemplo indicados na
Figura 4.6.

183

Criando Sites Dinmicos com ASP 3.0

Figura 4.7: O retorno da pgina list4-2.asp.


Observe que, com o uso da coleo Form, podemos ter acesso a todos os campos do formulrio.
A maneira como a pgina list4-2.asp foi construda ir funcionar bem, porm poderemos ter
alguns problemas. Por exemplo, vamos supor que por algum motivo, o nome de um dos
campos do formulrio precise ser alterado. Caso isso acontea, precisaramos alterar a pgina
ASP, pois a coleo Form, utiliza a propriedade name do campo, para ter acesso ao contedo
do mesmo.
Podemos contornar esta dificuldade utilizando uma estrutura de controle que permite percorrer
todos os itens de uma coleo. Percorreremos os itens da coleo Form capturando o nome do
campo e o valor do mesmo. Com isso se o nome de algum campo mudar, a mudana ser
detectada cada vez que a pgina ASP for chamada, pois o nome do campo no estar fixado
dentro do prprio arquivo ASP, como ocorre na Listagem 4.3.
A estrutura de controle que permite percorrer todos os elementos de uma coleo possui a
seguinte estrutura:
For Each membro In Nome_da_Coleo
Comando1

184

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

Comando2
...
Comandon
Next

Com a estrutura For Each...Next, conseguimos percorrer todos os membros de uma coleo.
Considere o seguinte exemplo:
<%
For Each Item in Request.Form
=Item
Next
%>

Neste caso estaremos listando todos os nomes dos campos do formulrio, atravs da utilizao
da estrutura For Each...Next.
Agora vamos utilizar a estrutura For Each...Next para rescrever a nossa pgina ASP de uma
maneira mais genrica, conforme indicado na Listagem 4.4.
Listagem 4.4 A pgina ASP list4-2-2.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

<BODY>

<H2> Voc digitou os seguintes dados !!</H2>

<%

For Each Item in Request.Form %>

<P>

10

<%=Item%>

11

12

<%=Request.Form(Item)%>

13

</P>

14

<% Next %>

15

<P><A href=list4-2.htm>Clique aqui para voltar ao formulrio</A></P>

16

</BODY>

17

</HTML>

185

Criando Sites Dinmicos com ASP 3.0

Esta pgina produz o mesmo resultado que a pgina ASP da Listagem 4.3, porm vejam como
o cdigo bem menor. Alm disso este cdigo funciona sempre, mesmo que o nome de
algum dos campos do formulrio seja alterado. Para testar este cdigo basta salvar esta listagem
com o nome de list4-2-2.asp e alterar a pgina list4-2.htm. No atributo action da tag <FORM>
troque action=list4-2.asp por action=list4-2-2.asp.
Tambm interessante notar que fomos alternando trechos de cdigo HTML com cdigo
ASP. Por exemplo, as linhas 7 e 8 so cdigo ASP, onde iniciado o lao For Each...Next. Na
linha 9 abrimos uma tag de pargrafo. Na linha 10 exibido o nome do campo, atravs da
utilizao de <% = Item%>. Na linha 11 colocamos o sinal : que vai ficar entre o nome do
campo e o valor digitado no campo. Na linha 12 exibido o valor digitado no campo do
formulrio, cujo atributo nome foi exibido pela linha 10. A linha 13 fecha a tag de pargrafo
e, finalmente, a linha 14 encerra o lao For Each...Next. Observe que o lao foi aberto em uma
seo de cdigo e fechado em outra, o que nos d uma grande flexibilidade.

A Coleo QueryString do Objeto Request


Utilizamos a coleo QueryString quando o formulrio utilizar o mtodo get ao invs do
mtodo post. Quando utilizamos o mtodo get, os dados so passados para o servidor, junto
com a URL de endereo. Vamos alterar o formulrio da Listagem 4.2, para que o mesmo
utilize o mtodo get ao invs do mtodo post. Tambm vamos alterar o atributo action, para
que o mesmo chame a pgina ASP formget.asp, para processar os dados digitados no
formulrio. Com estas modificaes, teremos o formulrio indicado na Listagem 4.5.
Listagem 4.5 Um formulrio HTML simples formget.htm.
1

<HTML>

<HEAD>

<TITLE>Formulrio para Cadastro de Clientes !! </TITLE>

</HEAD>

<BODY>

<P><STRONG>Formulrio para Cadastro de Clientes:</STRONG></P>

<P>Digite os dados solicitados e clique no boto Enviar.</P>

<FORM action=formget.asp method=get>

<P>Nome: <INPUT id=nome maxLength=50 name=nome></P>

10

<P>Rua: <INPUT id=rua maxLength=35 name=rua ></P>

11

<P>Cidade: <INPUT id=cidade maxLength=30 name=cidade></P>

12

<P>e-mail: <INPUT id=email maxLength=50 name=email></P>

186

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

13

<P>Carto Crdito:

14

<INPUT id=cartao name=cartao type=radio value=Visa>Visa

15

<INPUT id=cartao name=cartao type=radio value=Master Card>Master Card

16

<INPUT id=cartao name=cartao type=radio value=Outros>Outros</P>

17

<P>

18

<INPUT id=enviar name=enviar type=submit value=Enviar>

19

<INPUT id=limpar name=limpar type=reset value=Reset>

20

</P>

21

</FORM>

22

</BODY>

23

</HTML>

Ao acessarmos o arquivo da Listagem 4.5, no Internet Explorer, obtemos o resultado indicado


na Figura 4.8.

Figura 4.8: O formulrio da Listagem 4.5.

187

Criando Sites Dinmicos com ASP 3.0

Para criar o arquivo formget.asp, basta pegar o cdigo da Listagem 4.4 e trocar Request.Form
por Request.QueryString. Com isso teremos o cdigo da Listagem 4.6.
Listagem 4.6 A pgina ASP formget.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

<BODY>

<H2> Voc digitou os seguintes dados !!</H2>

<%

For Each Item in Request.QueryString %>

<P>

10

<%=Item%>

11

12

<%=Request.QueryString(Item)%>

13

</P>

14

<% Next %>

15

<P><A href=formget.htm>Clique aqui para voltar ao formulrio</A></P>

16

</BODY>

17

</HTML>

Esta pgina fornece o retorno indicado na Figura 4.9. Observe que o resultado praticamente
o mesmo da Figura 4.7, porm com a diferena de que os dados foram passados atravs do
endereo de chamada da pgina.
No campo endereo temos o seguinte:
http://servidor/Capitulo4/formget.asp?nome=J%FAlio+Cesar+Fabris+Battisti&rua=Sinimbu++456&cidade=Boqueir%E3o+do+Le%E3o&email=batisti@hotmail.com&cartao=Outros&enviar=Submit

Observe que os dados foram passados dentro da prpria URL. Caracteres especiais, como o u
com acento agudo, so substitudos. Observe que o nome Jlio foi substitudo por J%FAlio,
ou seja, o foi substitudo por %FA. Tambm podemos observar que todo espao em branco
foi substitudo pelo sinal +, e assim por diante. Neste caso a coleo QueryString sabe tratar
estes caracteres especiais e exibi-los corretamente, conforme indicado pela Figura 4.9.
O mtodo get possui limitaes quanto a quantidade de informaes que o mesmo pode
passar para o servidor. Esta limitao est em torno de 1.000 caracteres, conforme definio

188

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

do protocolo HTTP. Alm disso, toda a informao passada ser visvel na URL, o que em
muitas situaes no desejado.

Figura 4.9: O retorno da pgina formget.asp.


por isso que hoje, na maioria dos casos, utilizamos o mtodo post, que no tem as mesmas
limitaes do mtodo get. Algumas aplicaes antigas, com alguns scripts CGI, podem ter
sido desenvolvidos para usar o mtodo get, neste caso os mesmos no funcionaro com o
mtodo post. No restante deste livro, estaremos utilizando o mtodo post.

Alguns Campos que Merecem Consideraes Especiais


Um dos campos de formulrios que merecem consideraes especiais o grupo de Check
Box. Quando temos um grupo de Check Box, um ou mais itens do grupo podem ser
selecionados. Neste caso precisamos determinar qual ou quais itens foram selecionados e
qual o valor associado a cada um deles. Observe a Listagem 4.7.

189

Criando Sites Dinmicos com ASP 3.0

Listagem 4.7 Modificando o formulrio formget.htm.


1

<HTML>

<HEAD>

<TITLE>Formulrio para Cadastro de Clientes !! </TITLE>

</HEAD>

<BODY>

<P><STRONG>Formulrio para Cadastro de Clientes:</STRONG></P>

<P>Digite os dados solicitados e clique no boto Enviar.</P>

<FORM action=formget.asp method=get>

<P>Nome: <INPUT id=nome maxLength=50 name=nome></P>

10

<P>Rua: <INPUT id=rua maxLength=35 name=rua ></P>

11

<P>Cidade: <INPUT id=cidade maxLength=30 name=cidade></P>

12

<P>e-mail: <INPUT id=email maxLength=50 name=email></P>

13

<P>Carto Crdito:

14

<INPUT id=cartao name=cartao type=radio value=Visa>Visa

15

<INPUT id=cartao name=cartao type=radio value=Master Card>Master Card

16

<INPUT id=cartao name=cartao type=radio value=Outros>Outros</P>

17

<P>

18

<INPUT id=enviar name=enviar type=submit value=Enviar>

19

<INPUT id=limpar name=limpar type=reset value=Reset>

20

</P>

21

<P>

22

<INPUT id=estado name=estado type=checkbox value=SP>SP

23

<INPUT id=estado name=estado type=checkbox value=RJ>RJ

24

<INPUT id=estado name=estado type=checkbox value=RS>RS

25

<INPUT id=estado name=estado type=checkbox value=SC>SC

26

<INPUT id=estado name=estado type=checkbox value=PR>PR

27

</P>

21

</FORM>

22

</BODY>

23

</HTML>

190

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

Ao acessarmos o arquivo da Listagem 4.7, no Internet Explorer, obtemos o resultado indicado


na Figura 4.10.

Figura 4.10: Um grupo de Check Box foi adicionado ao formulrio.


Ao clicar no boto Enviar receberemos os resultados indicados na Figura 4.11. Observe que a
nossa pgina ASP formget.asp j processou corretamente os resultados.
Um detalhe que devemos observar que os valores associados a cada um dos Check Box
marcados o valor do atributo value. Se este atributo no tiver sido definido, ser exibido On
para cada um dos Check Box marcados. Observe, na Listagem 4.7, que o atributo name o
mesmo para todos os Check Box do grupo. justamente isto que caracteriza um grupo de
Check Box, todos possuem o mesmo valor para a propriedade name.

191

Criando Sites Dinmicos com ASP 3.0

Figura 4.11: O resultado dos Check Box marcados j exibido corretamente.


Quando a pgina ASP recebe os dados, ela recebe os valores selecionados, todos no nome do
grupo. Por exemplo o seguinte cdigo:
<% =Request.QueryString(estado)%>

produziria uma sada com o valor dos Check Box selecionados. Caso mais do que um Check Box
tenha sido selecionado, os valores sero exibidos separados por vrgula, conforme indicado abaixo:
SP, RS, PR

Com isso dizemos que o elemento estado, da coleo QueryString, possui valores mltiplos.
Existem situaes em que pode ser necessrio acessar um destes valores individualmente.
Isto possvel, pois cada um dos valores possui uma propriedade de ndice associada. O
primeiro valor selecionado possui ndice 1, o segundo possui ndice 2 e assim por diante.

192

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

IMPORTANTE
No caso de um grupo de Check Box, os ndices no so associados ordem com que os Check
Box so apresentados no formulrio, mas sim em relao a quantos so selecionados. Se
tivermos 2 Check Box selecionados, somente teremos o ndice 1 e o ndice 2. O ndice 1 ligado
ao primeiro Check Box selecionado que aparece no formulrio. O ndice 2 ligado ao prximo
Check Box do grupo que aparecer selecionado, e assim por diante.

Caso quisssemos acessar somente o valor do primeiro Check Box selecionado, utilizaramos
o seguinte cdigo:
<% =Request.QueryString(estado)(1) %>

Observe a utilizao do ndice (1) aps o nome do campo. Com isso estou pedindo para que
seja retornado apenas o valor do primeiro Check Box selecionado. Este cdigo retornaria
somente SP, no nosso exemplo.

NOTA
Estas mesmas consideraes so vlidas para elementos do tipo Caixa de seleo e Caixa de
combinao.

A Coleo ServerVariables do Objeto Request


A coleo ServerVariables possui valores que so somente de leitura, isto , no podemos
modificar os valores desta coleo. So valores enviados atravs da requisio do navegador do
cliente, dentro do cabealho do protocolo HTTP, e alguns valores existentes no servidor Web.
Podemos acessar o valor de uma determinada varivel utilizando a seguinte sintaxe:
Request.ServerVariables(Nome_da_Varivel)

Por exemplo, o seguinte cdigo retorna o nmero IP do computador do cliente:


<%=Request.ServerVariables(remote_addr)%>

Na Tabela 4.1, temos uma descrio das principais variveis disponveis.


Tabela 4.1 Variveis de ambiente acessveis atravs da coleo ServerVariables.
Nome

Descrio

ALL_HTTP

Retorna todos os cabealhos HTTP enviados pelo cliente.

ALL_RAW

Captura todos os cabealhos, da maneira como foram


enviados pelo cliente.

193

Criando Sites Dinmicos com ASP 3.0

Nome

Descrio

AUTH_TYPE

Retorna o tipo de autenticao utilizado pelo servidor


Web.

AUTH_USER

Retorna o nome do usurio autenticado no servidor Web.

CERT_COOKIE

Retorna um identificador nico, ligado ao certificado


do cliente.

CERT_FLAGS

Mostra se o certificado do cliente vlido.

PATH_INFO

Retorna informaes sobre o caminho relativo


pgina que est sendo exibida.

PATH_TRANSLATED Retorna informaes sobre o caminho fsico (por


exemplo: c:\inetpu\wwroot\page1.asp), relativo
pgina que est sendo exibida.
QUERY_STRING

Retorna os valores de um formulrio passados atravs


do mtodo get.

REMOTE_ADDR

Retorna o endereo IP da mquina do cliente.

REMOTE_HOST

Retorna o nome da mquina do cliente.

REQUEST_METHOD Retorna o mtodo utilizado para a requisio da


pgina: post ou get.
SERVER_PORT

Retorna a porta TCP na qual a requisio foi feita. Por


padro, o servidor Web atende requisies na porta 80.

SERVER_PROTOCOL Retorna a verso e o nome do protocolo de requisio,


por exemplo HTTP 1.1.
SERVER_SOFTWARE Retorna o nome e a verso do servidor HTTP.
URL

Retorna a poro bsica da URL.

Na Listagem 4.8, utilizamos o lao For Each...Next, para exibir todos os valores contidos na
coleo ServerVariables.
Listagem 4.8 Exibindo os valores contidos na coleo ServerVariables variables.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

194

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

<BODY>

<TABLE border=2>

<%For Each Variavel in Request.ServerVariables %>

<TR>

<TD>

10

<% =Variavel %>

11

=</TD>

12

<TD>

13

<% =Request.ServerVariables(Variavel) %>

14

&nbsp;</TD></TR>

15

<%Next%>

16

</BODY>

17

</HTML>

Com este cdigo simples conseguimos exibir todo o contedo da coleo ServerVariables.
Observe, na Listagem 4.8, que utilizamos algumas tags HTML para a construo de tabelas.
Estas tags foram utilizadas apenas para melhorar a aparncia do documento resultante. Para
cada varivel exibimos o nome da varivel (linha 10) e o valor contido na varivel (linha 13).
Na linha 14, utilizamos &nbsp. Este um caractere especial para o HTML e utilizado para
que o navegador do cliente exiba as clulas da tabela, mesmo quando estas estiverem vazias.
O Internet Explorer no exibe os contornos de uma clula, caso no exista nenhum contedo
na mesma, o que torna o resultado final pouco elegante. Na Figura 4.12, podemos ver a parte
final do resultado do processamento do documento variables.asp.

Figura 4.12: Exibindo o contedo da coleo ServerVariables.

195

Criando Sites Dinmicos com ASP 3.0

Observe a varivel SERVER_SOFTWARE, a qual exibe o valor Microsoft-IIS/5.0, indicando


que esta pgina est armazenada em um servidor Windows 2000, com servidor Web IIS 5.0.
Um pequeno exemplo prtico: vamos supor que voc deseja construir uma pgina que somente
deve ser acessada por pessoas de uma determinada rede. Os computadores da Internet utilizam
um protocolo chamado TCP/IP. Todo computador que faz parte da rede deve possuir um
nmero IP, e no podem existir dois computadores com o mesmo nmero IP. O nmero IP
um nmero no seguinte formato:
10.200.120.135
162.233.140.72

So quatro nmeros separados por um ponto. O valor mximo de cada nmero 249, ou seja,
no posso ter um endereo IP 10.300.210.143. O 300 um valor invlido em termos de nmero
IP. Parte do nmero IP identifica a rede a qual pertence o computador e outra parte identifica
o nmero do computador dentro da rede. Esta fora do escopo deste livro uma discusso mais
ampla sobre o protocolo TCP/IP, mas existem excelentes fontes de referncia na Internet.
Voc pode comear pelos sites da CISCO (www.cisco.com) e 3COM (www.3com.com).
Vamos supor que somente devem acessar a nossa pgina computadores cujo endereo IP
comea com 10.204.123 (que exatamente o nmero da rede que utilizo em minha casa),
sendo que o quarto nmero no importa. Neste caso estamos admitindo que os trs primeiros
nmeros identificam a rede (10.204.123) e o ltimo nmero identifica o computador dentro
da rede. Neste caso, quero construir uma pgina que somente permita acesso a computadores
da rede 10.204.123. Vamos ver como se faz isto?
O algoritmo que utilizaremos o descrito a seguir.
Utilizaremos a varivel REMOTE_ADDR para capturar o nmero IP do computador que est
tentando acessar a nossa pgina.
Depois utilizaremos funes do VBScript para capturar apenas a parte do endereo da rede
(trs primeiros nmeros), e comparo este valor com o valor 10.204.123.
Caso o valor esteja OK, o acesso ao restante da pgina liberado, caso contrrio o usurio ser
direcionado para um outra pgina, a qual contm uma mensagem dizendo que o mesmo no
tem permisso para acessar a pgina desejada.
A cdigo que implementa o nosso algoritmo mostrado na Listagem 4.9.
Listagem 4.9 Um exemplo prtico de uso da coleo ServerVariables filtro.asp.
1

<%@ Language=VBScript %>

<HTML>

196

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

<HEAD>

</HEAD>

<BODY>

<%

Captura o nmero IP do computador do Cliente

Dim ip_cliente

Dim num_rede

10

ip_cliente=Request.ServerVariables(REMOTE_ADDR)

11

Utilizo a funo Left para extrair apenas

12

os 10 primeiros caracteres, os quais devem

13

ser iguais a 10.204.123

14

num_rede=Left(ip_cliente,10)

15

Agora comparo o nmero de rede do cliente com

16

o nmero de rede permitido

17

If num_rede=10.204.123" Then

18

Response.Write <P>Parabns !!!</P>

19

Response.Write <P>VOC CONSEGUIU ACESSAR ESTA PGINA,<BR> PORQUE O SEU

20

Response.Write COMPUTADOR<BR> FAZ PARTE DA REDE<BR> %>

21

<%=num_rede%>

22

<% Response.Write </P> %>

23

<% Else

24

Response.Redirect(erro.htm)

25

End If

26

%>

27

</BODY>

28

</HTML>

Ao acessar esta pgina de um computador que faz parte da rede 10.204.123, receberemos a
pgina indicada na Figura 4.13.

197

Criando Sites Dinmicos com ASP 3.0

Figura 4.13: Usurios da rede 10.204.123 tm permisso de acesso.


Ao acessar esta pgina de um computador que no faz parte da rede 10.204.123, receberemos
a mensagem de erro indicada na Figura 4.14.

Figura 4.14: Usurios fora da rede 10.204.123 no tm permisso de acesso.

198

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

NOTA
Na linha 24 utilizamos o mtodo Redirect do objeto Response (Response.Redirect) para
redirecionar o usurio para uma outra pgina (erro.htm), caso o mesmo no fizesse parte da
rede 10.204.123. Falaremos mais sobre o objetos Response e seus mtodos ainda neste captulo.

A Coleo Cookies do Objeto Request


Esta coleo contm os valores de todos os Cookies enviados pelo navegador do cliente,
juntamente com a requisio da pgina ASP. Conforme descrevemos anteriormente, Cookies
so pequenos arquivos que so gravados no computador do usurio. A informao contida
nestes Cookies, normalmente, utilizada para o site poder identificar o usurio na prxima
vez que for acessado. Quando o usurio acessa uma determinada pgina, o navegador envia,
junto com a requisio da pgina, todos os Cookies relacionados com o site que est sendo
acessado. Cada Cookie pode conter um ou mais valores, e podem existir um ou mais Cookies
associados ao site acessado. Todos os valores de todos os Cookies so acessveis atravs da
coleo Cookies do objeto Request. Estes valores so somente para leitura, isto , no podem
ser modificados. Os Cookies so gravados utilizando o mtodo Cookies do objeto Response.
Veremos o objeto Response em mais detalhes ainda neste captulo. A ttulo de exemplo,
vamos considerar a pgina da Listagem 4.10.
Listagem 4.10 Criando um Cookie no computador do usurio CreateCookie.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

<BODY>

<p>ESTA PGINA CRIA UM COOKIE CHAMADO TESTE_COOKIE</p>

<%

Response.Cookies(TESTE_COOKIE)(Nome)= Jlio Battisti

Response.Cookies(TESTE_COOKIE)(Cidade)= Boqueiro do Leo

10

Response.Cookies(TESTE_COOKIE)(Data)= Date()

11

%>

12

</BODY>

13

</HTML>

A pgina da Listagem 4.10 cria um Cookie chamado TESTE_COOKIE. Dentro deste Cookie
so gravados trs campos ou chaves, conforme indicado na Tabela 4.2.

199

Criando Sites Dinmicos com ASP 3.0

Tabela 4.2 Valores gravados no Cookie TESTE_COOKIE.


Campo/Chave

Valor

Nome

Jlio Battisti

Cidade

Boqueiro do Leo

Data

3/7/1999

Na Figura 4.15, temos o resultado do acesso pgina da Listagem 4.10.

Figura 4.15: Criando um Cookie no computador do usurio.


Observe que o endereo desta pgina, no nosso exemplo : http://servidor/Capitulo4/
CreateCookie.asp. Conforme descrevemos anteriormente, o Cookie associado com o domnio
no qual reside a pgina. No nosso exemplo, todas as pginas que estiverem em http://servidor
podero acessar informaes deste Cookie.
Para acessar as informaes do Cookie, podemos utilizar a coleo Cookies do objeto Request,
conforme indicado na Listagem 4.11.
Listagem 4.11 Acessando os valores gravados no Cookie TESTE_COOKIE getCookie.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

200

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

<BODY>

<B><FONT COLOR=BLUE> Seja bem vindo:

<%Response.Write Request.Cookies (TESTE_COOKIE)(Nome)& <br>%>

</FONT></B>

<%

10

Response.Write Valores presentes em Cookies & <br>

11

Response.Write Request.Cookies (TESTE_COOKIE)(Nome)& <br>

12

Response.Write Request.Cookies (TESTE_COOKIE)(Cidade)& <br>

13

Response.Write Request.Cookies (TESTE_COOKIE)(Data)& <br>

14

%>

15

<P>&nbsp;</P>

16

</BODY>

17

</HTML>

Observe que a sintaxe para acessar os valores da coleo Cookie a seguinte:


Request.Cookies(Nome_do_Cookie) (Nome_da_chave)

Por exemplo, a linha de cdigo:


11

Response.Write Request.Cookies (TESTE_COOKIE)(Nome)& <br>

acessa o valor da chave nome, do Cookie TESTE_COOKIE. Este valor retornado para o
navegador do cliente pelo mtodo Write do objeto Response.
Na Figura 4.16, temos o resultado do acesso pgina da Listagem 4.11.

Figura 4.16: Acessando os valores, utilizando a coleo Cookies do objeto Request.

201

Criando Sites Dinmicos com ASP 3.0

Tambm podemos utilizar a estrutura For Each...Next para percorrer todos os valores de um
determinado Cookie, exibindo o nome das chaves e o valor associado cada chave, conforme
indicado na Listagem 4.12.
Listagem 4.12 Utilizando a estrutura For Each...Next, para acessar as chaves do Cookie
TESTE_COOKIE forCookie.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

<BODY>

<I><B><FONT COLOR=RED><P>Valores de Cookies:</P></FONT></B></I>

<%

For Each Chave in Request.Cookies(TESTE_COOKIE)

Response.Write Chave & :

10
11

Response.Write Request.Cookies(TESTE_COOKIE)(Chave) & <BR>


Next

12

%>

13

</BODY>

14

</HTML>

Na Figura 4.17, temos o resultado do acesso pgina da Listagem 4.12.

Figura 4.17: Utilizando a estrutura For Each...Next para acessar todas as


chaves do Cookie TESTE_COOKIE.

202

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

A Coleo ClientCertificate do Objeto Request


Com a necessidade de serem efetuadas operaes seguras atravs da Internet, foi criada a
tecnologia de Certificados Digitais. Um Certificado funciona como uma espcie de carteira
de identidade do usurio ou do site que est sendo acessado, e pode conter diversas
informaes, tais como nome, e-mail, endereo, telefone, etc.
Quando o usurio acessa uma determinada pgina, o navegador envia informaes sobre seu
Certificado Digital, caso possua um. Para acessar as informaes sobre o Certificado Digital
do Cliente, podemos utilizar a coleo ClientCertificate do objeto Request.
A sintaxe para utilizarmos a coleo ClientCertificate a seguinte:
Request.ClientCertificate(Chave[Subchave])

Onde temos:
Chave: o nome do campo do certificado a ser acessado. Por exemplo, o campo
ValidForm retorna a data a partir da qual o certificado vlido; o campo ValidUntil,
determina a data de expirao do Certificado; e assim por diante. A cdigo da linha
abaixo ir exibir a data de expirao do Certificado do cliente:
Response.Write Seu Certificado expira em:
Response.Write Request.ClientCertificate(ValidUntil)

Propriedade do Objeto Request


O objeto Request apresenta uma nica propriedade: TotalBytes. Esta propriedade informa o
nmero total de bytes enviados pelo navegador do cliente. Esta informao est ligada a
utilizao do mtodo post, para enviar as informaes digitadas em um formulrio. A sintaxe
bastante simples, conforme indicado no exemplo seguinte.
total_bytes = Request.TotalBytes

Na Listagem 4.13 temos um exemplo da utilizao da propriedade TotalBytes. Este exemplo


uma pequena modificao do exemplo da Listagem 4.4, onde inclumos cdigo para informar
quantos bytes foram enviados pela requisio do usurio (linhas 7 at 9).
Listagem 4.13 Utilizando a propriedade TotalBytes do objeto Request TotalBytes.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

<BODY>

<B><P>A sua requisio enviou o seguinte quantitativo de bytes para o servidor:</B></P>

203

Criando Sites Dinmicos com ASP 3.0

<%

Response.Write Request.TotalBytes

%>

10

<H2> Voc digitou os seguintes dados !!</H2>

11

<%

12

For Each Item in Request.Form %>

13

<P>

14

<%=Item%>

15

16

<%=Request.Form(Item)%>

17

</P>

18

<% Next %>

19

<P><A href=list4-2.htm>Clique aqui para voltar ao formulrio</A></P>

20

</BODY>

21

</HTML>

O cdigo da linha 8 informa quantos bytes foram enviados pelo navegador do cliente.

Mtodo do Objeto Request


O objeto Request apresenta um nico mtodo: BinaryRead(quantidade_de_bytes). Este mtodo
utilizado para capturar um determinado nmero de bytes, do total de bytes que foram
enviados pela requisio do cliente, atravs do mtodo post. O nmero de bytes a ser capturado
definido pelo parmetro quantidade_de_bytes. No podemos utilizar este mtodo na mesma
pgina ASP em que utilizamos Request.Form, ou utilizamos a coleo Request.Form, ou o
mtodo BinaryRead. A sintaxe para utilizao deste mtodo a seguinte:
tantos_bytes = Request.BinaryRead(tantos_bytes).

O exemplo abaixo coloca os 100 primeiros bytes enviados pelo cliente, na varivel 100_bytes:
100_bytes = Request.BinaryRead(100)

Na Listagem 4.14 temos um exemplo onde tentamos utilizar a propriedade BinaryRead e a


coleo Request.Form, na mesma pgina.
Listagem 4.14 No podemos utilizar Request.BinaryRead e Request.Form na mesma
pgina BinaryRead.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

204

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

<BODY>

<P>No podemos utilizar Request.BinaryRead e</P>

<P>Request.Form na mesma pgina!</P>

<%

Dim vinte_bytes

10

vinte_bytes=Request.BinaryRead(20)

11

Esta linha ir gerar um erro.

12

Nome=Request.Form(Nome)

13

%>

14

</BODY>

15

</HTML>

Ao tentarmos acessar esta pgina, receberemos a mensagem de erro indicada na Figura 4.18.

Figura 4.18: Mensagem de erro.


Com isso, encerramos o estudo do objeto Request. Vimos todos as colees, propriedades e
mtodos do objeto Request, lembrando que o mesmo no possui nenhum evento. Com a
utilizao do objeto Request, podemos ter acesso a diversas informaes enviadas pelo cliente,
como por exemplo, informaes enviadas atravs do preenchimento de um formulrio.

205

Criando Sites Dinmicos com ASP 3.0

No prximo item passaremos ao estudo do objeto Response. Os demais objetos do Modelo de


Objetos do ASP 3.0 sero estudados em outros captulos deste livro.

O Objeto Response
Utilizamos o objeto Response para retornar o resultado do processamento de uma pgina ASP,
para o navegador do cliente. Conforme descrito anteriormente, o resultado retornado cdigo
HTML puro. Podemos utilizar o objeto Response para montar uma pgina de retorno, por
exemplo, com os resultados de uma pesquisa em um banco de dados. Nos exemplos do final
deste captulo, teremos uma introduo ao acesso bancos de dados, atravs de pginas ASP.
Tambm podemos utilizar o objeto Response para gravar Cookies no computador do cliente.
A partir de agora passaremos a estudar os principais mtodos, colees e propriedades do
objeto Response. Analisaremos os diversos aspectos do objeto atravs da utilizao de alguns
exemplos prticos.

Coleo do Objeto Response


O objeto Response possui uma nica coleo: Cookies. Esta coleo utilizada para gravar
informaes no equipamento do cliente. Estas informaes so conhecidas como Cookies.
Existem diversas aplicaes prticas para os Cookies. Por exemplo, quando estamos fazendo
compras em um site de Comrcio Eletrnico, vamos escolhendo os itens a serem comprados.
Quando selecionamos um determinado item, adicionamos o mesmo lista de compras. Ao
sairmos da pgina da lista de compras para selecionarmos mais itens, precisamos guardar a
informao sobre os itens j selecionados, caso contrrio esta informao ser perdida e
somente seria possvel adquirir um item por vez. Muitos bancos de dados gravam a informao
da lista de compras em um banco de dados no servidor e as informaes sobre a identificao
do usurio em um Cookie, na mquina do usurio. Com isso, quando o usurio volta lista
de compras, identificado atravs da leitura das informaes contidas no Cookie, as quais
so utilizadas para pesquisar o banco de dados e exibir sua lista de compras. Outra abordagem
seria gravar os itens da compra em um Cookie, e enviar estas informaes para o servidor,
somente quando o usurio finalizar a compra. As possibilidades so variadas, depende da
necessidade de cada aplicao.
Outro detalhe importante que devemos conhecer quando o navegador envia para o servidor,
um Cookie gravado no cliente. Cada Cookie est associado com um determinado domnio.
Por exemplo, a primeira vez que voc acessa o site http://www.abc.com, vamos supor que seja
gravado um Cookie no seu computador. Toda vez que voc acessar uma pgina no domnio
www.abc.com, as informaes contidas neste Cookie sero enviadas para o site, mesmo que
a pgina que esteja sendo acessada no utilize estas informaes. Quando voc acessa, por

206

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

exemplo, a pgina: http://www.abc.com/cadastro/index.asp, as informaes contidas no Cookie


associado ao domnio www.abc.com sero enviadas para o servidor, mesmo que a pgina
index.asp no utilize estas informaes. Podemos ter mais do que um Cookie associado com
um determinado domnio. Neste caso, todos os Cookies associados com o domnio sero
enviados quando uma pgina deste domnio for acessada.
A pgina que cria o Cookie tambm pode determinar a qual domnio o mesmo est relacionado,
podendo inclusive precisar que o Cookie somente esteja relacionado com uma determinada
rea do site. Por exemplo, posso determinar que o Cookie somente seja enviado para o servidor
quando forem acessadas pginas da seguinte rea: http://www.abc.com/cadastro. Tambm
podemos definir uma data de expirao para o Cookie. Vamos estudar estas possibilidades
atravs de exemplos prticos.
Na Listagem 4.15, temos um exemplo de criao de um Cookie chamado Cliente.
Listagem 4.15 Criando um Cookie associado ao domnio http://servidor
CriandoCookie.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

<BODY>

<B>

<P>Esta pgina cria um Cookie associado ao domnio

http://servidor. Toda vez que uma pgina do domnio

http://servidor for acessada, as informaes contidas

10

neste Cookie sero enviadas.

11

</B>

12

</P>

13

<%

14

Cria um Cookie chamado Cliente

15

Response.Cookies(Cliente)(Nome)= Jlio Battisti

16

Response.Cookies(Cliente)(Endereco)=Boqueiro do Leo

17

Response.Cookies(Cliente)(Email)=juliobattisti@hotmail.com

18

Response.Cookies(Cliente)(Cartao)=ABC

19

Response.Cookies(Cliente)(Preferencial)=Sim

20

%>

21

<P><FONT COLOR=BLUE>

207

Criando Sites Dinmicos com ASP 3.0

22

O Cookie Cliente foi criado com sucesso. <br>

23

Foram adicionadas as seguintes informaes:

24

</FONT></P>

25

<%

26

Exibe os valores gravados no Cookie Cliente.

27

For Each Chave in Request.Cookies(Cliente)

28

Response.Write Chave & :

29
30

Response.Write Request.Cookies(Cliente)(Chave) & <BR>


Next

31

%>

32

</BODY>

33

</HTML>

Na Figura 4.19, temos o resultado do acesso pgina da Listagem 4.15.

Figura 4.19: O Cookie Cliente foi gravado com sucesso.


Conforme descrito anteriormente, podemos definir o domnio, ou uma rea do site, ao qual o
Cookie est associado, bem como a data para expirao. Para isso utilizamos os comandos
abaixo indicados.
Para definir o domnio ao qual o Cookie est associado:
Response.Cookies(Nome_do_Cookie).domain=URL do domnio
EX: Response.Cookies(Cliente).domain=http://servidor

208

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

Para associar o Cookie apenas com uma determinada rea do site:


Response.Cookies(Nome_do_Cookie).path=caminho virtual
EX: Response.Cookies(Cliente).path=/cadastro

Assim, estou dizendo que o Cookie somente deve ser enviado quando o usurio acessar pginas
que esto dentro do seguinte endereo: http://servidor/cadastro, como por exemplo: http://
servidor/cadastro/index.asp ou http://servidor/cadastro/carros.asp. Se voc quiser que o Cookie
seja enviado para qualquer pgina do site, utilize o seguinte comando:
Response.Cookies(Cliente).path=/

Para definir uma data de expirao para o Cookie:


Response.Cookie(Nome_do_Cookie).expires=#data#
EX: Response.Cookie(Cliente).expires=#31/12/2000#

Neste exemplo, estou definindo a data de expirao do Cookie para 31 de Dezembro de 2000.
Se no for definida uma data de expirao para o Cookie, o mesmo ser eliminado quando o
usurio fechar o navegador.

IMPORTANTE
Em verses anteriores do ASP, o cdigo para criar Cookies deveria ser colocado no cabealho
do documento, antes da tag <BODY>. Isso era necessrio, porque o Cookie deveria ser criado,
antes que qualquer contedo fosse enviado para o navegador do cliente. Isso porque, nas
verses anteriores do ASP, o contedo ia sendo enviado para o cliente medida em que a
pgina era processada. No ASP 3.0, o contedo somente enviado quando toda a pgina foi
processada com sucesso, ou quando for utilizado o comando Response.Flush. Este
comportamento pode ser controlado atravs da habilitao ou no de buffer para a pgina,
conforme veremos mais adiante neste captulo.

Na Listagem 4.16, temos um exemplo definindo algumas caractersticas do Cookie Cliente2.


Listagem 4.16 Criando um Cookie Cliente2 CriandoCliente2.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

<BODY>

<B><P>Esta pgina cria um Cookie associado ao caminho

http://servidor/Capitulo4.

Toda vez que uma pgina do caminho

http://servidor/Capitulo4, ou um dos

209

Criando Sites Dinmicos com ASP 3.0

10

seus subdiretrios, for acessada, as informaes

11

contidas neste Cookie sero enviadas.

12

</B></P>

13

<%

14

Cria um Coockie chamado Cliente2

15

E define algumas propriedades adicionais

16

Response.Cookies(Cliente2).domain=http://servidor

17

Response.Cookies(Cliente2).path=/Capitulo4"

18

Response.Cookies(Cliente2).expires=#31/12/2000#

19

Response.Cookies(Cliente2)(Nome)= Jlio Battisti

20

Response.Cookies(Cliente2)(Endereco)=Boqueiro do Leo

21

Response.Cookies(Cliente2)(Email)=juliobattisti@hotmail.com

22

Response.Cookies(Cliente2)(Cartao)=ABC

23

Response.Cookies(Cliente2)(Preferencial)=Sim

24

%>

25

<P><FONT COLOR=BLUE>

26

O Cookie Cliente2 foi criado com sucesso. <br>

27

Foram adicionadas as seguintes informaes:

28

</FONT></P>

29

<%

30

For Each Chave in Request.Cookies(Cliente)

31

Response.Write Chave & :

32
33

Response.Write Request.Cookies(Cliente)(Chave) & <BR>


Next

34

%>

35

</BODY>

36

</HTML>

Na Figura 4.20, temos o resultado do acesso pgina da Listagem 4.20.


O Cookie Cliente2 um Cookie com mltiplos valores, isto , temos armazenado diversos
campos de informao, tais como: Nome, Endereo, Email, etc. Tambm podemos ter os
chamados Cookies simples, os quais contm um nico valor. O seguinte cdigo cria um
Cookie simples:
Response.Cookies(Cliente)=Jlio Battisti

Ns podemos utilizar o atributo HasKeys, para determinar se um Cookie possui um nico


valor ou possui mltiplos valores. Considere a seguinte linha de cdigo:
Response.Write Response.Cookies(Cliente2).HasKeys

210

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

Figura 4.20: O Cookie Cliente2 foi gravado com sucesso.


Caso o Cookie Cliente2 possua mltiplos valores, esta linha de cdigo retorna Verdadeiro,
caso contrrio retorna Falso.
Agora passaremos ao estudo das propriedades do objeto Response.

Propriedades do Objeto Response


O objeto Response possui diversas propriedades, as quais so utilizadas para definir algumas
caractersticas da comunicao entre o servidor Web e o navegador do cliente. A correta
utilizao destas propriedades permite um controle refinado sobre a maneira como as
informaes so enviadas do servidor Web para o navegador do cliente.

A Propriedade Buffer do Objeto Response


Esta propriedade do tipo Boolean, isto , pode ser definida como Verdadeiro (True) ou Falso
(False). Os comportamentos desta propriedade, de acordo com o seu valor, so os seguintes:
Verdadeiro (True): Quando esta propriedade for definida como Verdadeiro, o servidor
Web somente enviar contedo para o navegador do cliente depois que todo o cdigo
ASP da pgina for executado; isto , medida que a pgina for sendo processada, o

211

Criando Sites Dinmicos com ASP 3.0

resultado do processamento mantido em um Buffer do servidor Web. Aps todo o


cdigo da pgina ter sido processado, o contedo do Buffer enviado para o navegador
do cliente. Este o comportamento padro no ASP 3.0. Tambm possvel enviar o
contedo j processado para o navegador do cliente, a qualquer momento, utilizandose os mtodos Response.Flush ou Response.End. Falaremos mais sobre estes dois
mtodos no prximo item.
Falso (False): Quando a propriedade Buffer for definida como Falso, medida em que
a pgina for sendo processada, o contedo ser enviado para o navegador do cliente;
isto , o contedo processado no fica armazenado em um Buffer no servidor Web.
Esta propriedade deve ser definida antes que qualquer contedo tenha sido enviado para o
navegador do cliente. O cdigo da Listagem 4.17 mostra onde o local mais indicado para
definirmos esta propriedade.
Listagem 4.17 Definindo a propriedade Buffer do objeto Response.
1

<%@ Language=VBScript %>

<% Response.Buffer=False%>

<HTML>

<HEAD>

</HEAD>

<BODY>

<P>Documento com Buffer desabilitado</P>

</BODY>

</HTML>

Observe que devemos utilizar as expresses em ingls: True, para Verdadeiro, e False, para
Falso. Tambm no devemos esquecer que, por padro, no ASP 3.0, esta propriedade definida
como True. Em situaes onde devemos efetuar algum processamento, tais como clculos ou
pesquisas em banco de dados, antes de enviar a pgina para o navegador do cliente
interessante mantermos a propriedade Buffer em seu valor padro True. Em situaes onde
no sejam necessrios processamentos deste tipo, podemos desabilitar o Buffer definindo
esta propriedade como False.

A Propriedade CacheControl do Objeto Response


Hoje em dia muito comum a utilizao de servidores Proxy para acesso a Internet. As
diversas mquinas da Rede Local acessam a Internet atravs deste servidor. Com isso, possvel
aumentar a segurana de mecanismos do prprio servidor. Uma das funes que o servidor
Proxy pode executar o Cache de pginas. Quando algum acessa uma determinada pgina,
uma cpia da mesma gravada no Cache do servidor Proxy. O servidor armazena pginas
HTML em Cache para que solicitaes repetidas da mesma pgina possam ser retornadas

212

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

com rapidez e eficincia aos navegadores. Na prxima vez que algum for acessar esta pgina,
e a mesma estiver no Cache, no existe necessidade de carregar novamente a pgina da Internet.
A cpia que est no Cache enviada para o navegador do cliente. O uso de Cache no servidor
Proxy agiliza o acesso, principalmente, s pginas mais utilizadas.
Por padro, o ASP instrui servidores Proxy a no armazenarem a prpria pgina ASP em cache
(embora imagens, mapas de imagens, miniaplicativos e outros itens aos quais a pgina faz
referncia sejam armazenados em Cache). Voc pode permitir o armazenamento de determinadas
pginas em Cache usando a propriedade Response.CacheControl. Com o uso da propriedade
CacheControl podemos definir se uma pgina ASP deve ou no ser mantida no Cache do servidor
Proxy. Este controle nos oferecido devido natureza dinmica das pginas ASP, as quais
mudam constantemente. Caso uma pgina tenha sido colocada no Cache do servidor Proxy, o
usurio corre o risco de estar recebendo uma verso desatualizada da pgina.
Esta propriedade deve ser definida antes que qualquer contedo tenha sido enviado para o
navegador do cliente. O cdigo da Listagem 4.18 mostra onde o local mais indicado para
definirmos esta propriedade.
Listagem 4.18 Definindo a propriedade CacheControl do objeto Response.
1

<%@ Language=VBScript %>

<% Response.CacheControl=Public%>

<HTML>

<HEAD>

</HEAD>

<BODY>

<P>Definindo a propriedade CacheControl do objeto Response.</P>

</BODY>

</HTML>

Esta propriedade pode assumir os seguintes valores:


Public: Permite que a pgina ASP seja armazenada no Cache do servidor Proxy.
Private: Faz com que a pgina ASP no seja armazenada no Cache do servidor Proxy.

A Propriedade CharSet do Objeto Response


Quando o servidor envia informaes para o cliente, antes de mandar o contedo da pgina
propriamente dito, enviado um cabealho (Header) de informaes. Neste cabealho existem
diversas definies importantes, tais como o tipo de contedo que est sendo enviado. Uma
das informaes contidas neste cabealho qual o conjunto de caracteres a ser utilizado para
exibir o contedo enviado. Para ter uma noo exata do que significa um conjunto de caracteres

213

Criando Sites Dinmicos com ASP 3.0

basta observar as diferenas entre uma pgina desenvolvida para o idioma Portugus e outra
para ser exibida no idioma Chins ou Japons.
Esta propriedade deve ser definida antes que qualquer contedo tenha sido enviado para o
navegador do cliente. O cdigo da Listagem 4.19 mostra onde o local mais indicado para
definirmos esta propriedade.
Listagem 4.19 Definindo a propriedade Charset do objeto Response.
1

<%@ Language=VBScript %>

<% Response.Charset(ISO-LATIN-1)%>

<HTML>

<HEAD>

</HEAD>

<BODY>

<P>Definindo a propriedade Charset do cabealho do documento.</P>

</BODY>

</HTML>

IMPORTANTE
Todas as propriedades que alteram alguma caracterstica do cabealho do documento devem
ser definidas antes que qualquer contedo visvel seja enviado para o navegador do cliente.
Por isso, o local mais indicado para definir estas propriedades antes da abertura da tag
<BODY>, que onde realmente comea o contedo que compor a pgina a ser enviada.

A Propriedade ContentType do Objeto Response


Esta propriedade define o tipo de contedo que ser enviado para o cliente. Os tipos de
contedo so definidos por um padro conhecido como MIME-type. A propriedade
ContentType informa ao navegador qual o tipo de contedo que o mesmo dever receber.
Apenas para exemplificar, vamos citar alguns dos tipos mais conhecidos:
text/html: Define o arquivo como sendo do tipo texto, com contedo de cdigo HTML.
o tipo padro, isto , se no for definido outro tipo, este ser o utilizado.
image/gif: O navegador espera receber um arquivo de imagem do tipo .gif.
image/jpg: O navegador espera receber um arquivo de imagem do tipo .jpg.
Esta propriedade deve ser definida antes que qualquer contedo tenha sido enviado para o
navegador do cliente. O cdigo da Listagem 4.20 mostra onde o local mais indicado para
definirmos esta propriedade.

214

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

Listagem 4.20 Definindo a propriedade ContentType do objeto Response.


1

<%@ Language=VBScript %>

<% Response.ContentType = text/html %>

<HTML>

<HEAD>

</HEAD>

<BODY>

<P>Definindo a propriedade ContentType para o cabealho do documento.</P>

</BODY>

</HTML>

A Propriedade Expires do Objeto Response


A propriedade Expires especifica o tempo decorrido antes que uma pgina armazenada no
Cache de um navegador perca a validade. Se o usurio retornar para a mesma pgina antes
dela expirar, a verso armazenada em Cache ser exibida.
A sintaxe para esta propriedade a seguinte:
Response.Expires=Nmero

onde Nmero especificado em minutos.


Quando a pgina .asp chama Response.Expires, o IIS cria um cabealho HTTP indicando a
hora no servidor. Se a hora do sistema do cliente anterior hora do sistema do servidor
(caso o cliente ou servidor no tenham uma configurao de hora precisa ou haja diferenas
de fuso horrio) a configurao do parmetro como 0 no ter o efeito de expirar a pgina
imediatamente. Voc pode usar a propriedade Response.ExpiresAbsolute (veja prximo item)
para obter a expirao imediata de uma pgina. Alm disso, pode usar um nmero negativo
para a propriedade Expires. Por exemplo:
<% Response.Expires = -1 %>

expirar a resposta imediatamente.

NOTA
Se existirem vrias chamadas para Response.Expires em uma nica pgina, o servidor usar
o perodo de tempo mais curto.

Esta propriedade deve ser definida antes que qualquer contedo tenha sido enviado para o
navegador do cliente. O cdigo da Listagem 4.21 mostra onde o local mais indicado para
definirmos esta propriedade.

215

Criando Sites Dinmicos com ASP 3.0

Listagem 4.21 Definindo a propriedade Expires do objeto Response.


1

<%@ Language=VBScript %>

<% Response.Expires = 1440 %>

<HTML>

<HEAD>

</HEAD>

<BODY>

<P>Definindo a propriedade Expires para o cabealho do documento.</P>

</BODY>

</HTML>

Neste exemplo estou definindo em um dia (1.440 minutos) o tempo de expirao para a
pgina. Para forar uma nova requisio para o servidor Web, a cada solicitao da pgina,
podemos utilizar o seguinte cdigo:
<% Response.Expires = 0 %>

Com isso a pgina expira imediatamente. Na prxima requisio do cliente, a pgina ser
novamente carregada a partir do servidor. Isto garante que sempre a ltima verso da pgina
ser enviada do servidor Web para o navegador do cliente.

A Propriedade ExpiresAbsolute do Objeto Response


A propriedade ExpiresAbsolute especifica a data e a hora na qual uma pgina armazenada
em Cache em um navegador expira. Se o usurio retornar para a mesma pgina antes dessa
data e hora, a verso em Cache ser exibida. Se uma hora no for especificada, a pgina
expirar meia-noite desse dia. Se uma data no for especificada, a pgina expirar na hora
determinada no dia que o script for executado.
A sintaxe para esta propriedade a seguinte:
Response.ExpiresAbsolute =#[data] [hora]#

NOTA
Se essa propriedade for definida mais de uma vez em uma pgina, a data ou hora de expirao
mais prxima atual ser usada. Se tentarmos definir a data de expirao como uma data
que j passou, a data e hora atuais sero utilizadas como de expirao.

Esta propriedade deve ser definida antes que qualquer contedo tenha sido enviado para o
navegador do cliente. O cdigo da Listagem 4.22 mostra onde o local mais indicado para
definirmos esta propriedade.

216

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

Listagem 4.22 Definindo a propriedade ExpiresAbsolute do objeto Response.


1

<%@ Language=VBScript %>

<% Response.ExpiresAbsolute=#May 29,2002 18:30:35# %>

<HTML>

<HEAD>

</HEAD>

<BODY>

<P>Definindo a propriedade ExpiresAbsolute para o cabealho do documento.</P>

</BODY>

</HTML>

NOTA
Observe que a data e a hora devem estar entre os caracteres #.

A Propriedade IsClientConnected do Objeto Response


A propriedade IsClientConnected uma propriedade somente de leitura que indica se o
cliente foi desconectado do servidor.
A sintaxe para esta propriedade a seguinte:
Response.IsClientConnected ( )

IMPORTANTE
Essa propriedade permite que voc tenha um maior controle sobre as circunstncias nas quais
o cliente pode ter se desconectado do servidor. Por exemplo, se um longo perodo de tempo tiver
decorrido entre o momento de uma solicitao do cliente e o momento em que o servidor
respondeu, talvez seja benfico garantir que o cliente ainda esteja conectado antes de continuar
a processar o script.

Esta propriedade retorna True (Verdadeiro) ou False (Falso). Se o cliente continua conectado
a propriedade retorna True, caso contrrio retorna False.
O cdigo da Listagem 4.23 mostra um exemplo de utilizao desta propriedade.
Listagem 4.23 Utilizando a propriedade IsClientConnected do objeto Response.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

217

Criando Sites Dinmicos com ASP 3.0

<BODY>

<P>Exemplo de utilizao da propriedade IsClientConnected.</P>

<% If Response.IsClientConnected( ) Then

Response.Write O Cliente continua conectado.

10

Else

11

Response.Write O Cliente foi desconectado.

12

End If

13

%>

14

</BODY>

15

</HTML>

A Propriedade PICS do Objeto Response


Um rtulo PICS Platform for Internet Content Selection (Plataforma para Seleo de Contedo
da Internet) um rtulo que define uma pgina em termos do seu contedo, tais como:
Infantil
Sexo
Violncia
Estes rtulos podem ser utilizados para classificar a informao da Internet. Os principais
navegadores do mercado permitem que seja ativado um Supervisor de Contedo com a
definio de uma senha. Para alterar as definies do Supervisor de Contedo, somente com
o conhecimento da senha. Pais podem usar este Supervisor de Contedo para evitar que os
filhos tenham acesso a sites com contedo de sexo explcito ou violncia.
A sintaxe para esta propriedade a seguinte:
Response.PICS(PICSLabel)

IMPORTANTE
A propriedade PICS insere qualquer seqncia de caracteres no cabealho, independente dela
representar ou no um rtulo PICS vlido.

Exemplo:
<% Response.PICS((PICS-1.1 <http://www.rsac.org/ratingv01.html> labels on &
chr(34) & 1997.01.05T08:15-0500 & chr(34) & until & chr(34) & 1999.12.31T23:590000 & chr(34) & ratings (v 0 s 0 l 0 n 0))) %>

218

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

NOTA
Para maiores informaes sobre a Classificao de Contedo consulte os sites www.rsac.org ou
os www.w3.org, ou o livro Internet Explorer 5.0 Resource Kit.

A informao do cabealho PICS enviada para o navegador do cliente. Com base na


classificao da pgina e das configuraes do navegador, o contedo da pgina pode no ser
exibido, como no exemplo de pais que bloqueiam o acesso a sites de sexo.

A Propriedade Status do Objeto Response


A propriedade Status define a mensagem que ser enviada para o cliente, dentro do cabealho
HTTP da resposta. Esta mensagem pode ser utilizada para indicar um erro ou o processamento
com sucesso da requisio do usurio. Os valores de Status so definidos na especificao HTTP.
A sintaxe para esta propriedade a seguinte:
Response.Status = DescrioDoStatus

Exemplo:
<% Response.Status = 410 Unauthorized %>

ou
<% Response.Status = 404 Not Found %>

Abaixo temos uma descrio das principais mensagens de status de erro:


400 Bad Request
410 Unauthorized Login Failed
404 Not Found
414 Request URL Too Long
500 Internal Server Error
501 Not Implemented
Com isso encerramos o estudo das propriedades do objeto Response. Agora passaremos ao
estudo dos mtodos do objeto Response.

Mtodos do Objeto Response


O objeto Response possui diversos mtodos, os quais permitem o controle sobre o contedo
que ser enviado para o cliente. Um mtodo, conforme j descrito anteriormente, realiza uma

219

Criando Sites Dinmicos com ASP 3.0

determinada ao. Por exemplo, j utilizamos inmeras vezes o mtodo Write do objeto Response.
Este mtodo utilizado para enviar contedo do servidor Web para o navegador do cliente.

O Mtodo AddHeader do Objeto Response


O mtodo AddHeader adiciona um cabealho HTML com um valor especificado. Esse mtodo
sempre adiciona um novo cabealho HTTP resposta. Ele no substituir um j existente de
mesmo nome. Uma vez que um cabealho tenha sido adicionado, ele no poder ser removido.

NOTA
Este mtodo pouco utilizado, se outro mtodo Response fornecer a funcionalidade necessria,
recomendvel que voc o utilize.

Como o protocolo HTTP requer que os cabealhos sejam enviados antes do contedo, em
geral, voc deve modificar todos os cabealhos enviados antes que seu script ASP gere alguma
sada. No IIS 4.0, isso significava que era necessrio chamar AddHeader no script antes que
alguma sada (como aquela gerada pelo cdigo HTML ou pelo mtodo Write) fosse enviada ao
cliente, normalmente antes da tag <BODY>. No IIS 5.0, com ASP 3.0, o Buffer ativado por
padro, conforme descrito anteriormente. Portanto, voc pode chamar o mtodo AddHeader
em qualquer ponto do script, desde que o Buffer no tenha sido desativado
(Response.Buffer=False) e que ele preceda todas as chamadas para Flush.
O cdigo da Listagem 4.24 mostra um exemplo de utilizao deste mtodo.
Listagem 4.24 Utilizando o mtodo AddHeader do objeto Response.
1

<%@ Language=VBScript %>

<% Response.AddHeader AVISO IMPORTANTE , Servidor Indisponvel %>

<HTML>

<HEAD>

</HEAD>

<BODY>

<P>Exemplo de utilizao do mtodo AddHeader.</P>

</BODY>

</HTML>

O Mtodo AppendToLog do Objeto Response


Todo servidor Web mantm um arquivo de Log. Neste arquivo so gravadas diversas
informaes, tais como o nmero IP da mquina do cliente, a pgina que o mesmo est
acessando, a hora de acesso, etc. Estas informaes podem ser utilizadas para, por exemplo,

220

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

gerar estatsticas de acesso. No IIS 5.0 podemos configurar quais tipos de informao devem
ser gravadas no Log. Alm disso, temos o mtodo AppendToLog, o qual adiciona uma seqncia
de caracteres ao final da entrada de Log do servidor Web. Voc pode cham-lo vrias vezes
em uma seo do script. Cada vez que o mtodo chamado, ele anexa a seqncia de caracteres
especificada entrada existente.
Este mtodo utiliza a seguinte sintaxe:
Response.AppendToLog seqncia de caracteres

O cdigo da Listagem 4.25 mostra um exemplo de utilizao deste mtodo.


Listagem 4.25 Utilizando o mtodo AppendToLog do objeto Response.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

<BODY>

<P>Exemplo de utilizao do mtodo AppendToLog.</P>

7
8

<% Response.AppendToLog Incio da pgina. %>


<P>Contedo da Pgina.</P>

<% Response.AppendToLog Final da pgina %>

10

</BODY>

11

</HTML>

Este exemplo adiciona os textos Incio da pgina e Final da pgina ao Log do IIS.

O Mtodo BinaryWrite do Objeto Response


O mtodo BinaryWrite grava as informaes especificadas na sada HTTP atual sem nenhum
caractere de converso. Esse mtodo til para gravar informaes que no so seqncias
de caracteres como dados binrios requeridos por um aplicativo personalizado, ou quando
preciso enviar qualquer tipo de dado que no seja do tipo text/html.
Este mtodo apresenta a seguinte sintaxe:
Response.BinaryWrite dados

Considere o exemplo abaixo:


<% Response.BinaryWrite dados_enviar %>

221

Criando Sites Dinmicos com ASP 3.0

Onde dados_enviar pode ser um objeto que contm, por exemplo, um trecho de vdeo no
formato .avi.

O Mtodo Clear do Objeto Response


O mtodo Clear limpa todas as sadas HTML armazenadas no Buffer. No entanto, este mtodo
limpa apenas o contedo do corpo da resposta; ele no limpa os cabealhos.
Utilizamos a seguinte sintaxe para o mtodo Clear:
Response.Clear

ou
Response.Clear( )

IMPORTANTE
Esse mtodo causar um erro de tempo de execuo se Response.Buffer no tiver sido definido
para True, isto , se no houver contedo no Buffer, a chamada ao mtodo Response.Clear
causar um erro.

O cdigo da Listagem 4.26 mostra um exemplo de utilizao deste mtodo quando o Buffer
est desabilitado, isto ir gerar a mensagem de erro indicada na Figura 4.21. Este erro causado
por termos desabilitado o Buffer (Response.Buffer=False) e mesmo assim tentar utilizar o
mtodo Response.Clear.
Listagem 4.26 Utilizando o mtodo Response.Clear ErroClear.asp.
1

<%@ Language=VBScript %>

<% Response.Buffer = False %>

<HTML>

<HEAD>

</HEAD>

<BODY>

<P>A prxima linha ir gerar um erro.</P>

<% Response.Clear %>

</BODY>

10

</HTML>

222

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

Figura 4.21: Erro causado pelo uso do mtodo Response.Clear.

O mtodo End do Objeto Response


O mtodo End faz com que o servidor Web pre o processamento do script e retorne o resultado
atual. O contedo restante do arquivo no ser processado.
Utilizamos a seguinte sintaxe:
Response.End

ou
Response.End( )

Comentrios
Se Response.Buffer tiver sido definido para True (o que o padro no ASP 3.0), a chamada de
Response.End liberar o Buffer. Se voc no deseja que a sada retorne para o usurio, deve
chamar primeiro Response.Clear, conforme indicado no exemplo abaixo:
<%
Response.Clear
Response.End
%>

223

Criando Sites Dinmicos com ASP 3.0

O Mtodo Flush do Objeto Response


O mtodo Flush envia, imediatamente, a sada armazenada no Buffer do servidor. Esse mtodo
causar um erro de tempo de execuo se Response.Buffer tiver sido definido para False.
Utilizamos a seguinte sintaxe:
Response.Flush

ou
Response.Flush( )

O cdigo da Listagem 4.27 mostra um exemplo de utilizao deste mtodo quando o Buffer
est desabilitado, isto ir gerar a mensagem de erro indicada na Figura 4.22. Este erro causado
por termos desabilitado o Buffer (Response.Buffer=False) e depois de desabilit-lo tentamos
utilizar o mtodo Response.Flush.

Figura 4.22: Erro causado pelo uso do mtodo Response.Flush.


Listagem 4.27 Utilizando o mtodo Response.Flush ErroFlush.asp.
1

<%@ Language=VBScript %>

<% Response.Buffer = False %>

<HTML>

<HEAD>

</HEAD>

224

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

<BODY>

<P>A prxima linha ir gerar um erro.</P>

<% Response.Flush( ) %>

</BODY>

10

</HTML>

O Mtodo Redirect do Objeto Response


O mtodo Redirect faz com que o navegador tente acessar a pgina passada como parmetro
para o mtodo. Por exemplo, podemos utilizar o mtodo Redirect para carregar uma pgina
personalizada, dependendo das opes que o usurio preencheu em um determinado formulrio.
A sintaxe para este mtodo a seguinte:
Response.Redirect URL

Como exemplo, vamos supor que o usurio preencheu um formulrio onde existe um campo
chamado Destino. Este campo pode ter um dos seguintes valores:
Brasil
Canad
EUA
Europa
Outros
Com base no valor selecionado neste campo, voc deseja enviar o usurio para uma pgina
personalizada para cada caso. Na listagem 4.28 temos um exemplo de cdigo que soluciona o
problema proposto.
Listagem 4.28 Utilizando o mtodo Response.Redirect.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

<BODY>

<P>Aguarde Redirecionando...</P>

7
8
9
10

<%
Vai_para = Request.Form(Destino)
Select Case Vai_para
Case Brasil

225

Criando Sites Dinmicos com ASP 3.0

11

Response.Redirect http://www.abc.com/brasil

12

Case Canad

13

Response.Redirect http://www.abc.com/canada

14

Case EUA

15

Response.Redirect http://www.abc.com/eua

16

Case Europa

17

Response.Redirect http://www.abc.com/europa

18

Case Outros

19

Response.Redirect http://www.abc.com/outros

20

End Select

21

%>

22

</BODY>

23

</HTML>

O Mtodo Write do Objeto Response


J utilizamos o mtodo Write inmeras vezes. Este mtodo utilizado para enviar uma
seqncia de caracteres para a sada HTML, enviada para o navegador do cliente. Esta seqncia de caracteres pode ser texto comum, tags HTML, valor de variveis calculadas pela pgina
ASP ou at mesmo valores de campos de dados em um banco de dados. Em resumo, podemos
dizer que o mtodo Write utilizado para montar a pgina HTML que retorna para o usurio.
A sintaxe para o mtodo bastante simples:
Response.Write Contedo

O seguinte exemplo envia texto para a sada HTML, que enviada para o cliente:
Response.Write Bem vindos tecnologia de Pginas Dinmicas.

No prximo exemplo, alm do texto, enviamos uma tag HTML de quebra de linha:
Response.Write Utilizao do mtodo Write <BR>

Assim, o seguinte contedo enviado para o navegador do cliente:


Utilizao do mtodo Write <BR>

O texto Utilizao do mtodo Write exibido e a tag <BR> reconhecida como sendo uma
tag HTML que orienta o navegador a fazer uma quebra de linha.
Com certeza este o mtodo que mais utilizaremos ao longo deste livro.
Agora encerramos o estudo do objeto Response, do qual estudamos todos os mtodos,
propriedades e a coleo Cookies. A partir de ento, passaremos a analisar alguns exemplos
prticos de utilizao do contedo visto at agora.

226

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

Alguns Exemplos Prticos de Aplicao


Neste item veremos alguns exemplos prticos de aplicao do contedo visto at o momento.
Sero propostos alguns problemas e, para resolv-los, utilizaremos o conhecimento aprendido,
com a utilizao dos objetos ASP j apresentados, alm de elementos da linguagem VBScript.
Tambm precisaremos dos conhecimentos de HTML introduzidos no Captulo 2.

Exemplo 1: Validao dos Dados de um Formulrio


Descrio do problema: vamos supor que tenhamos um formulrio para cadastro dos nossos
clientes em um banco de dados. Alguns campos deste formulrio so de preenchimento
obrigatrio, isto , no podem ficar em branco ou conter valores nulos. Caso o usurio deixe
um ou mais destes campos sem preencher, devemos retornar o formulrio para o cliente,
indicando qual ou quais campos de preenchimento obrigatrio no foram preenchidos. Ao
voltar o formulrio para o cliente, no podemos fazer com que ele tenha que preencher todos
os campos novamente, mas somente os que estiverem faltando. Portanto, o formulrio voltar
para o cliente, mantendo os valores que ele j preencheu, apenas indicando quais campos
obrigatrios no foram preenchidos.

NOTA
Na prtica os valores preenchidos no formulrio deveriam ser armazenados em um banco de
dados como o Microsoft SQL Server 7.0 ou o Microsoft Access 2000. Como ainda no aprendemos
a trabalhar com banco de dados, vamos apenas validar os dados digitados. Caso o usurio
tenha digitado todos os dados corretamente, apenas informaremos que os dados foram digitados
com sucesso e exibiremos os valores. No prximo captulo estaremos tratando sobre a conexo
de pginas ASP com bancos de dados.

Na Listagem 4.29 temos o formulrio que o usurio dever preencher. Neste formulrio, so
de preenchimento obrigatrio os seguintes campos:
Nome
Rua
Cidade
Bairro
email
CPF

227

Criando Sites Dinmicos com ASP 3.0

Listagem 4.29 Formulrio para cadastro do cliente exemplo-1.htm.


1

<HTML>

<HEAD>

<TITLE>Formulrio para Cadastro de Clientes !!</TITLE>

</HEAD>

<BODY>

<P><STRONG>Formulrio para Cadastro de Clientes:</STRONG></P>

<P>Digite os dados solicitados e clique no boto Enviar.</P>

<FORM action=exemplo-1.asp method=post>

<P>Nome: <INPUT id=nome maxLength=50 name=nome>(*)</P>

10

<P>Rua: <INPUT id=rua maxLength=35 name=rua >(*)</P>

11

<P>Cidade: <INPUT id=cidade maxLength=30 name=cidade>(*)

12

Bairro: <INPUT id=Bairro maxLength=20 name=Bairro></P>

13

<P>e-mail: <INPUT id=email maxLength=50 name=email>(*)

14

Fone:<INPUT id=fone maxLength=15 name=fone></P>

15

<P>CPF: <INPUT id=cpf maxLength=11 name=cpf>(*)

16

<FONT size=2><STRONG>(Digite sem o ponto e sem o trao)

17

</STRONG></FONT></P>

18

<P>Carto Crdito:

19

<INPUT id=cartao name=cartao type=radio value=Visa>Visa

20

<INPUT id=cartao name=cartao type=radio value=Master Card>Master Card

21

<INPUT id=cartao name=cartao type=radio value=Outros>Outros

22

</P>

23

<P><INPUT id=enviar name=enviar type=submit value=Enviar>

24

<INPUT id=limpar name=limpar type=reset value=Reset>

25

<BR>

26

(*)->Campos de digitao obrigatria.<BR></P>

27

</FORM>

28

</BODY>

29

</HTML>

Ao visualizarmos este formulrio no Internet Explorer, obtemos o resultado mostrado na Figura 4.23.
Observe, na linha 8, que o atributo action, da tag FORM definido como exemplo-1.asp.
Agora precisamos criar a pgina exemplo-1.asp, a qual vai processar os dados digitados no
formulrio quando o usurio clicar no boto Enviar. A pgina exemplo-1.asp deve verificar se
todos os campos obrigatrios foram digitados. Em caso afirmativo a pgina informar os
valores digitados pelo usurio, caso contrrio, o formulrio ser enviado de volta, indicando
quais os campos obrigatrios que no foram preenchidos. Alm disso ao enviar o formulrio
de volta para o usurio, os valores digitados pelo usurio sero preservados, evitando que
seja preciso digitar todos os campos novamente.

228

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

Figura 4.23: O formulrio para cadastro de clientes.


Existem diversas maneiras e algoritmos diferentes para solucionar este problema. Na Listagem
4.30 apresentamos uma soluo para o problema proposto.
Listagem 4.30 Fazendo a validao dos dados obrigatrios exemplo-1.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

<BODY>

<%

Inicia a verificao para saber se todos

os campos obrigatrios foram preenchidos.

Atribui os campos obrigatrios variveis.

10

nome = Request.Form(nome)

11

rua = Request.Form(rua)

12

cidade = Request.Form(cidade)

229

Criando Sites Dinmicos com ASP 3.0

13

email = Request.Form(email)

14

cpf = Request.Form(CPF)

15

Verifica se os campos obrigatrios foram preenchidos.

16

Qualquer dado obrigatrio que no tenha sido preenchido,

17

definir a varivel faltou_dado em Sim.

18

If (nome=)Then

19

mensagem_nome=Preencha o campo Nome:

20

faltou_dado=Sim

21

faltou_nome=Sim

22

End If

23

If (rua=)Then

24

mensagem_rua=Preencha o campo Rua:

25

faltou_dado=Sim

26

faltou_rua=Sim

27

End If

28

If (cidade=)Then

29

mensagem_cidade=Preencha o campo Cidade:

30

faltou_dado=Sim

31

faltou_cidade=Sim

32

End If

33

If (email=)Then

34

mensagem_email=Preencha o campo email:

35

faltou_dado=Sim

36

faltou_email=Sim

37

End If

38

If (cpf=)Then

39

mensagem_cpf=Preencha o campo CPF:

40

faltou_dado=Sim

41

faltou_cpf=Sim

42

End If

43

Caso todos os campos obrigatrios tenham sido

44

preenchidos, apenas informo os valores digitados.

45

If faltou_dado<>Sim Then

230

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

46

Response.Write <P>Voc digitou os seguintes dados !</P>

47

Response.Write <HR>

48

For Each Dado in Request.Form %>

49

<P>

50

<% =Dado %>

51

52

<%=Request.Form(Dado)%>

53

</P>

54

<%Next

55

End If

56

Caso algum dado obrigatrio no tenha sido digitado

57

Envia o formulrio de volta para o cliente,

58

preservando os valores que o mesmo j digitou.

59

Observe que utilizamos Response.Write para ir

60

recriando todo o formulrio.

61

Tambm observe que o formulrio enviado de volta

62

na pgina exemplo-1.asp e que o atributo action

63

da tag FORM definido como exemplo-1.asp, ou seja

64

a pgina exemplo-1.asp chama a si mesma aps o

65

usurio clicar no boto Enviar.

66

Esta uma tcnica bastante interessante.

67

Antes de enviar o formulrio, informamos quais

68

os campos obrigatrio que no foram preenchidos.

69

If faltou_nome=Sim Then

70

Response.Write O campo Nome deve ser preenchido. <BR>

71

End If

72

If faltou_rua=Sim Then

73

Response.Write O campo Rua deve ser preenchido. <BR>

74

End If

75

If faltou_cidade=Sim Then

76

Response.Write O campo Cidade deve ser preenchido. <BR>

77

End If

78

If faltou_email=Sim Then

79

Response.Write O campo email deve ser preenchido. <BR>

231

Criando Sites Dinmicos com ASP 3.0

80

End If

81

If faltou_cpf=Sim Then

82

Response.Write O campo CPF deve ser preenchido. <BR>

83

End If

84

Comeo a reenviar o formulrio para o usurio.

85

%>

86

<P><B>Formulrio para Cadastro de Clientes:</B></P>

87

<P>Digite os dados solicitados e clique no boto Enviar.</P>

88

<FORM action=exemplo-1.asp method=post id=form1 name=form1>

89
90

<% Response.Write Caso queira alterar algum dado, digite no formulrio abaixo.
If faltou_nome=Sim Then

91

Response.Write <P>Nome: <INPUT id=nome maxLength=50 name=nome


size=50>(*)</P>

92

Else

93

Response.Write <P>Nome: <INPUT id=nome maxLength=50 name=nome


size=50 value= & Chr(34)& Request.Form(nome) & Chr(34) & >(*)</P>

94

End If

95

If faltou_rua=Sim Then

96

Response.Write <P>Rua: <INPUT id=rua maxLength=35 name=rua size=35>


(*)</P>

97

Else

98

Response.Write <P>Rua: <INPUT id=rua maxLength=35 name=rua size=35


value= & Chr(34)& Request.Form(rua) & Chr(34) & >(*)</P>

99

End If

100

If faltou_cidade=Sim Then

101

Response.Write <P>Cidade: <INPUT id=cidade maxLength=30


name=cidade size=18>(*)

102

Else

103

Response.Write <P>Cidade: <INPUT id=cidade maxLength=30


name=cidade size=18 value= & Chr(34) &
Request.Form(cidade) & Chr(34) & >(*)

104

End If

232

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

105

Response.Write Bairro:<INPUT id=bairro maxLength=25 name=bairro


value= & Chr(34) & Request.Form(bairro) & Chr(34) & ></P>

106

If faltou_email=Sim Then

107

Response.Write <P>Email: <INPUT id=email maxLength=35


name=email size=19>(*)</P>

108

Else

109

Response.Write <P>Email: <INPUT id=email maxLength=30


name=email size=19 value= & Chr(34)& Request.Form(email)
& Chr(34) & >(*)

110

End If

111

Response.Write Fone:<INPUT id=fone maxLength=15 name=fone


value= & Chr(34) & Request.Form(fone) & Chr(34) & ></P>

112

If faltou_cpf=Sim Then
Response.Write <P>CPF: <INPUT id=cpf maxLength=11 name=cpf
size=11>(*)

113

Else

114

Response.Write <P>CPF: <INPUT id=cpf maxLength=11 name=cpf


size=11 value= & Chr(34)& Request.Form(cpf) & Chr(34) & >(*)

115
116
117
118

End If
Response.Write <FONT size=2><B>(Digite sem o ponto e sem o trao)
</B></FONT></P>
Response.Write <P>Carto Crdito:
If Request.Form(cartao)=Visa Then

119

Response.Write <INPUT id=cartao name=cartao type=radio


value=Visa checked>Visa

120

Else

121

Response.Write <INPUT id=cartao name=cartao type=radio value=Visa>Visa

122

End If

121

If Request.Form(cartao)=Master Card Then

122

Response.Write <INPUT id=cartao name=cartao type=radio value=


& Chr(34) & Master Card & Chr(34)& checked>Master Card

123

Else

124

Response.Write <INPUT id=cartao name=cartao type=radio value=


& Chr(34) & Master Card & Chr(34)& checked>Master Card

125

End If

233

Criando Sites Dinmicos com ASP 3.0

126

If Request.Form(cartao)=Outros Then

127

Response.Write <INPUT id=cartao name=cartao type=radio


value=Outros checked>Outros

128

Else

129

Response.Write <INPUT id=cartao name=cartao type=radio value=


Outros>Outros</P>

130

End If

131

Response.Write <P><INPUT id=enviar name=enviar type=submit value=Enviar>

132

Response.Write <INPUT id=limpar name=limpar type=reset value=Reset>

133

Response.Write <BR>

134

Response.Write (*)->Campos de digitao obrigatria.</P>

135

Neste ponto encerro a montagem do formulrio

136

%>

137

</FORM>

138

</BODY>

139

</HTML>

Algumas observaes sobre a Listagem 4.30:


Linhas de cdigo como a do seguinte exemplo:
111

Response.Write Fone:<INPUT id=fone maxLength=15 name=fone

value= & Chr(34) & Request.Form(fone) & Chr(34) & ></P>

devem ser digitadas em uma nica linha. A linha aparece dividida por questes de espao
para exibio, quando for digitar esta linha, digite-a como uma linha nica.
O exemplo foi desenvolvido de maneira que o cdigo fosse de fcil compreenso, alm
disso foram inseridas diversas linhas de comentrio para facilitar o acompanhamento
do exemplo proposto. Cabe lembrar que, para criarmos uma linha de comentrio,
devemos iniciar a mesma com o sinal de apstrofe.
Observe o seguinte fragmento de cdigo:
18

If (nome=)Then

19

mensagem_nome=Preencha o campo Nome:

20

faltou_dado=Sim

21
22

faltou_nome=Sim
End If

Neste fragmento, estamos testando se o campo obrigatrio nome foi preenchido. Caso o
mesmo no tenha sido preenchido, definimos a varivel faltou_dado como sendo igual a

234

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

Sim. Tambm definimos a varivel faltou_nome como sendo igual a Sim. Este procedimento
repetido para os demais campos obrigatrios. Desta forma, qualquer campo obrigatrio que
esteja faltando, ir definir a varivel faltou_dado como sendo igual a Sim. Estas variveis
sero utilizadas mais adiante para informar quais campos obrigatrios esto faltando, e caso
nenhum esteja faltando, para informar os valores digitados pelo usurio.
Observe o seguinte fragmento de cdigo:
45

If faltou_dado<>Sim Then

46

Response.Write <P>Voc digitou os seguintes dados !</P>

47

Response.Write <HR>

48

For Each Dado in Request.Form %>

49

<P>

50

<% =Dado %>

51

52

<%=Request.Form(Dado)%>

53

</P>

54

<%Next

55

End If

Neste fragmento, verificamos se no faltou nenhum dado (faltou_dado<>Sim), em caso


afirmativo, simplesmente exibimos os dados digitados pelo usurio. Veja que utilizamos a
estrutura For Each...Next para percorrer todos os valores do formulrio.
A partir da linha 69 comeo a enviar mensagens, informando os campos de
preenchimento obrigatrio que no foram digitados. Considere o fragmento abaixo:
69

If faltou_nome=Sim Then

70
71

Response.Write O campo Nome deve ser preenchido. <BR>


End If

Neste caso, se o campo nome no foi digitado, envio a seguinte mensagem: O campo Nome
deve ser preenchido.
A partir da linha 90:
90

If faltou_nome=Sim Then

verifico um a um os campos obrigatrios para ver qual ou quais esto faltando. Caso o campo
esteja faltando, emito uma mensagem dizendo que o mesmo deve ser digitado, caso contrrio
crio o campo do formulrio e defino o seu valor conforme digitado pelo usurio. Observe o
fragmento de cdigo abaixo:
90

If faltou_nome=Sim Then

91

Response.Write <P>Nome: <INPUT id=nome maxLength=50 name=nome


size=50>(*)</P>

92

Else

235

Criando Sites Dinmicos com ASP 3.0

93
94

Response.Write <P>Nome: <INPUT id=nome maxLength=50 name=nome


size=50 value= & Chr(34)& Request.Form(nome) & Chr(34) & >(*)</P>
End If

Primeiro (linha 90), testamos se o nome no foi digitado. Em caso afirmativo criamos o campo
nome, em branco. Isto feito pela linha 91:
91

Response.Write <P>Nome: <INPUT id=nome maxLength=50 name=nome


size=50>(*)</P>

Esta linha envia o texto entre aspas para o navegador do cliente:


<P>Nome: <INPUT id=nome maxLength=50 name=nome size=50>(*)</P>

E este justamente o cdigo HTML que cria o campo nome e define os seus atributos. Veja
que estamos utilizando Response.Write para recriar o formulrio HTML original.
Caso o campo tenha sido preenchido, criamos o campo novamente com o cuidado de j preenchlo com o valor digitado previamente pelo usurio. Isto feito pelo cdigo abaixo:
93

Response.Write <P>Nome: <INPUT id=nome maxLength=50 name=nome


size=50 value= & Chr(34)& Request.Form(nome) & Chr(34) & >(*)</P>

Veja que esta instruo Response.Write um pouco mais complexa. A instruo formada
por diversas partes, sendo que cada parte concatenada pelo operador &. Na primeira parte
enviado o texto:
<P>Nome: <INPUT id=nome maxLength=50 name=nome size=50 value=

A segunda parte Chr(34) envia um sinal de aspas (). Depois do sinal de aspas, usamos
Request.Form(nome) para capturar o nome digitado pelo usurio. Vamos supor que o usurio
tenha digitado Jos da Silva no campo nome. Neste ponto, o nosso comando estaria assim:
<P>Nome: <INPUT id=nome maxLength=50 name=nome size=50 value=Jos da Silva

Depois enviamos mais um sinal de aspas, Chr(34), e a parte final >(*)</P>. Com isso o
cdigo enviado por este comando o seguinte:
<P>Nome: <INPUT id=nome maxLength=50 name=nome size=50 value=Jos da Silva>(*)</P>

que justamente o cdigo HTML necessrio para criar o campo Nome e definir o seu valor
conforme o valor digitado pelo usurio. Um detalhe importante a salientar a utilizao do
Chr(34) antes e depois do nome do usurio. Precisamos envolver o nome digitado entre aspas,
pois caso contrrio o nome seria truncado no primeiro espao em branco. Se o usurio digitasse
Jos da Silva, sem as aspas seria retornado apenas Jos. Tudo o que vier depois do primeiro espao
em branco ser ignorado, por isso que utilizamos uma sinal de aspas antes e outro depois.
Veja que com a utilizao de cdigo ASP vamos recriando o formulrio original. Alm disso
mesclamos diversos trechos de cdigo ASP com HTML. Perceba que dentro do cdigo ASP podemos
utilizar todos os recursos da linguagem VBScript, ou seja, as possibilidades so variadas.

236

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

Agora vamos a alguns exemplos de utilizao da nossa aplicao. Na figura 4.24, temos um
exemplo onde o formulrio original foi aberto no Internet Explorer e o usurio preencheu
todos os campos, isto , no deixou de preencher nenhum campo obrigatrio.

Figura 4.24: O usurio preencheu todos os campos.


Ao clicar no boto Enviar os dados so enviados para a pgina exemplo-1.asp. Como todos os
campos obrigatrios foram preenchidos, a pgina simplesmente exibe os valores digitados
pelo usurio, conforme mostrado na Figura 4.25.

Figura 4.25: A pgina ASP informa os valores digitados.

237

Criando Sites Dinmicos com ASP 3.0

Alm de informar os valores digitados, a pgina retorna o formulrio com os dados digitados
pelo usurio. Caso o usurio queira alterar algum valor digitado s fazer as alteraes
necessrias e clicar no boto Enviar. O formulrio aparece abaixo da informao dos valores
digitados, mais no final da pgina, conforme indicado na Figura 4.26.

Figura 4.26: O usurio pode alterar os valores digitados.


Vamos testar uma outra situao do nosso aplicativo. Suponhamos que o usurio deixe de preencher
um dos campos obrigatrios. No exemplo da Figura 4.27, o usurio no preenche o campo Cidade.

Figura 4.27: O usurio no preencheu um campo obrigatrio.

238

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

Neste caso, ao clicar no boto Enviar, o usurio recebe uma pgina contendo uma mensagem
que avisa que o campo Cidade de preenchimento obrigatrio, e contendo o formulrio
somente com o campo Cidade em branco para que o mesmo seja preenchido, conforme
indicado pela Figura 4.28.

Figura 4.28: Formulrio informando que o campo Cidade obrigatrio.

Exemplo 2: Formulrio Para Clculo de Imposto


Descrio do problema: vamos supor que tenhamos um formulrio para pedido de mercadorias.
O usurio preenche o formulrio com os produtos desejados e clica em um boto Calcular.
Este boto chama uma pgina ASP que retorna o formulrio de pedidos mais o valor do frete
e do imposto, bem como o valor total do pedido. Vamos supor que, por motivos de simplicidade,
somente so possveis entregas para os estados do RS, PR, SC, SP e RJ. Sendo que o imposto
e a taxa de frete diferente para cada um destes estados.
Tabela 4.3 Valores de frete e imposto para cada estado.
Estado

Frete (R$)

Imposto (%)

RS

3,50

12

PR

4,50

11

239

Criando Sites Dinmicos com ASP 3.0

Estado

Frete (R$)

Imposto (%)

SC

4,20

13

SP

5,50

17

RJ

5,50

14

O frete nico para o pedido, independente do nmero de itens. O imposto ser calculado
sobre o total da Nota, sem contar o valor do frete, isto , sobre o valor total das mercadorias.
O nosso pedido permitir a entrada de at trs produtos. Tambm faremos uso de tabelas para
facilitar o layout da pgina.
Na Listagem 4.31 temos o formulrio de pedidos.
Listagem 4.31 Formulrio de pedidos exemplo-2.htm.
1

<HTML>

<HEAD>

<TITLE>Pedido de mercadorias.</TITLE>

</HEAD>

<BODY>

<P><B>FORMULRIO DE PEDIDOS:</B></P>

<P>Digite at trs produtos a serem entregues.</P>

<P>

<FORM action=exemplo-2.asp method=post>

10

<TABLE align=left bgColor=gray border=1 cellPadding=1 cellSpacing=1 width=75%>

11

<TR>

12

<TD>Descrio</TD>

13

<TD>Pr. Unit.</TD>

14

<TD>Quant.</TD>

15

<TD>Subtotal</TD>

16

</TR>

17

<TR>

18

<TD><INPUT id=prod1 name=prod1></TD>

19

<TD><INPUT id=unit1 name=unit1 style=HEIGHT: 22px; WIDTH: 37px></TD>

240

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

20

<TD><INPUT id=quant1 name=quant1 style=HEIGHT: 22px; WIDTH: 37px></TD>

21

<TD><INPUT id=valor1 name=valor1 style=HEIGHT: 22px; WIDTH: 51px></TD>

22

</TR>

23

<TR>

24

<TD><INPUT id=prod2 name=prod2></TD>

25

<TD><INPUT id=unit2 name=unit2 style=HEIGHT: 22px; WIDTH: 37px></TD>

26

<TD><INPUT id=quant2 name=quant2 style=HEIGHT: 22px; WIDTH: 37px></TD>

27

<TD><INPUT id=valor2 name=valor2 style=HEIGHT: 22px; WIDTH: 51px></TD>

28

</TR>

29

<TR>

30

<TD><INPUT id=prod3 name=prod3></TD>

31

<TD><INPUT id=unit3 name=unit3 style=HEIGHT: 22px; WIDTH: 37px></TD>

32

<TD><INPUT id=quant3 name=quant3 style=HEIGHT: 22px; WIDTH: 37px></TD>

33

<TD><INPUT id=valor3 name=valor3 style=HEIGHT: 22px; WIDTH: 51px></TD>

34

</TR>

35

</TABLE>

36

<P><INPUT id=enviar name=enviar type=submit value=Calcular Total></P>

37

<SELECT id=estado name=estado>

38

<OPTION selected value=>Estado -></OPTION>

39

<OPTION value=RS>RS</OPTION>

40

<OPTION value=SC>SC</OPTION>

41

<OPTION value=PR>PR</OPTION>

42

<OPTION value=SP>SP</OPTION>

43

<OPTION value=RJ>RJ</OPTION>

44

</SELECT>

45

</P>

46

</FORM>

47

</BODY>

48

</HTML>

Na Figura 4.29, podemos ver este formulrio no Internet Explorer.

241

Criando Sites Dinmicos com ASP 3.0

Figura 4.29: Formulrio para preenchimento do pedido.


Agora vamos criar a pgina ASP (exemplo2-asp) que faz o clculo de cada item individualmente, depois calcula o total dos trs itens e, finalmente, aplica o imposto e o frete de acordo
com o estado selecionado pelo cliente. Aps fazer os clculos a pgina ASP retorna os valores
fornecidos pelo usurio mais os clculos realizados.
Na Listagem 4.32 temos o cdigo para a pgina exemplo-2.asp. Sempre lembrando que
procuramos desenvolver o cdigo pensando na facilidade do entendimento. Diversas solues
diferentes poderiam ser adotadas, com a obteno do mesmo resultado.
Listagem 4.32 A pgina ASP para clculo do total do pedido.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

<BODY>

<%

Response.Write <B>VALORES TOTAIS PARA O SEU PEDIDO:</B><BR>

242

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

Crio uma varivel para o subtotal de cada produto.

If Request.Form(unit1)<> Then

10
11
12

subtot1=CSng(Request.Form(unit1))*Csng(Request.Form(quant1))
Else
subtot1=0

13

End If

14

If Request.Form(unit2)<> Then

15
16
17

subtot2=CSng(Request.Form(unit2))*Csng(Request.Form(quant2))
Else
subtot2=0

18

End If

19

If Request.Form(unit3)<> Then

20
21
22

subtot3=CSng(Request.Form(unit3))*Csng(Request.Form(quant3))
Else
subtot3=0

23

End If

24

total_inicial=subtot1+subtot2+subtot3

25

Agora acrescento o imposto e o frete com base no estado.

26

Select Case Request.Form(estado)

27

Case RS

28

total_imposto=total_inicial+total_inicial*0.12

29

total_geral=total_imposto+3.50

30

valor_frete=3.50

31

Case SC

32

total_imposto=total_inicial+total_inicial*0.13

33

total_geral=total_imposto+4.20

34

valor_frete=4.20

35

Case PR

36

total_imposto=total_inicial+total_inicial*0.11

37

total_geral=total_imposto+4.50

38

valor_frete=4.50

39

Case SP

243

Criando Sites Dinmicos com ASP 3.0

40

total_imposto=total_inicial+total_inicial*0.17

41

total_geral=total_imposto+5.50

42

valor_frete=5.50

43

Case RJ

44

total_imposto=total_inicial+total_inicial*0.14

45

total_geral=total_imposto+5.50

46

valor_frete=5.50

47

End Select

48

A partir de agora comeo a devolver a pgina

49

com os valores digitados pelo usurio, mais

50

os valores calculados.

51

%>

52

<FORM action=exemplo-2.asp method=post id=form1 name=form1>

53

<TABLE align=left bgColor=gray border=1 cellPadding=1 cellSpacing=1 width=75%>

54

<TR>

55

<TD>Descrio</TD>

56

<TD>Pr. Unit.</TD>

57

<TD>Quant.</TD>

58

<TD>Subtotal</TD>

59

</TR>

60

<TR>

61
62

<TD><INPUT id=prod1 name=prod1 value= <%=Request.Form(prod1)%> ></TD>


<TD><INPUT id=unit1 name=unit1 value= <%=Request.Form(unit1)%>
style=HEIGHT: 22px; WIDTH: 37px></TD>

63

<TD><INPUT id=quant1 name=quant1 value=<%=Request.Form(quant1)%>


style=HEIGHT: 22px; WIDTH: 37px></TD>

64

<TD align=right ><B><%=subtot1%></B></TD>

65

</TR>

66

<TR>

67

<TD><INPUT id=prod2 name=prod2 value= <%=Request.Form(prod2)%> ></TD>

68

<TD><INPUT id=unit2 name=unit2 value= <%=Request.Form(unit2)%>


style=HEIGHT: 22px; WIDTH: 37px></TD>

244

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

69

<TD><INPUT id=quant2 name=quant2 value=<%=Request.Form(quant2)%>


style=HEIGHT: 22px; WIDTH: 37px></TD>

70
71
72

<TD align=right ><B><%=subtot2%></B></TD>


</TR>
<TR>

73

<TD><INPUT id=prod3 name=prod3 value= <%=Request.Form(prod3)%> ></TD>

74

<TD><INPUT id=unit3 name=unit3 value= <%=Request.Form(unit3)%>


style=HEIGHT: 22px; WIDTH: 37px></TD>

75

<TD><INPUT id=quant3 name=quant3 value=<%=Request.Form(quant3)%>


style=HEIGHT: 22px; WIDTH: 37px></TD>

76
77

<TD align=right ><B><%=subtot3%></B></TD>


</TR>

78

<%

79

Agora monto uma linha para o total de produtos.

80

Uma linha para o valor do frete.

81

Uma linha para o valor do imposto.

82

Uma linha para o total geral.

83

%>

84

<TR>

85

<TD>TOTAL PROD.->></TD>

86

<TD></TD>

87
88

<TD></TD>
<TD align=right><% =FormatNumber(subtot1+subtot2+subtot3,2)%></TD>

89

</TR>

90

<TR>

91

<TD>IMPOSTO ->></TD>

92

<TD></TD>

93
94

<TD></TD>
<TD align=right><% =FormatNumber(total_imposto-total_inicial,2)%></TD>

95

</TR>

96

<TR>

97

<TD>FRETE ->></TD>

98

<TD></TD>

99

<TD></TD>

245

Criando Sites Dinmicos com ASP 3.0

100

<TD align=right><% =FormatNumber(valor_frete,2)%></TD>

101 </TR>
102 <TR>
103

<TD>TOTAL GERAL ->></TD>

104

<TD></TD>

105
106

<TD></TD>
<TD align=right><% =FormatNumber(total_geral,2)%></TD>

107 </TR>
108 </TABLE>
109 <A HREF=exemplo-2.htm>Clique aqui para voltar a pgina de Pedidos.</A>
110 </BODY>
111 </HTML>

Algumas observaes sobre a Listagem 4.31:


Linhas de cdigo como a do seguinte exemplo:
74

<TD><INPUT id=unit3 name=unit3 value= <%=Request.Form(unit3)%>


style=HEIGHT: 22px; WIDTH: 37px></TD>

devem ser digitadas em uma nica linha. A linha aparece dividida por questes de espao
para exibio; quando for digit-la, digite-a como uma linha nica.
O exemplo foi desenvolvido de maneira que o cdigo fosse de fcil compreenso, alm
disso foram inseridas diversas linhas de comentrio para facilitar o acompanhamento
do exemplo proposto. Cabe lembrar que para criarmos uma linha de comentrio
devemos iniciar a mesma com o sinal de apstrofe.
Observe que utilizamos diversos elementos da linguagem VBScript, tais como a
estrutura Select Case...End Select, para calcular o imposto e o frete, com base no Estado
selecionado pelo cliente. Utilizamos tambm a funo Csng para converter os valores
de Preo Unitrio e Quantidade em valores numricos, de tal forma que fosse possvel
realizar clculos com estes valores. Utilizamos a funo FormatNumber para formatar
os valores calculados, de tal forma a exibir os valores com duas casas decimais, conforme
mostrado no fragmento de cdigo a seguir:
<% =FormatNumber(valor_frete,2)%>

Agora vamos a um exemplo de utilizao da nossa aplicao. Na figura 4.30, temos um exemplo
onde o formulrio de pedidos foi aberto no Internet Explorer e o usurio preencheu o pedido
com trs produtos. O estado selecionado foi SP.

246

Captulo 4 A Tecnologia ASP e o Modelo de Objetos do ASP 3.0

Figura 4.30: Preenchendo os dados do pedido.


Ao clicar no boto Calcular Total ser chamada a pgina exemplo-2.asp, a qual faz os clculos
e exibe os resultados, conforme indicado na Figura 4.31.

Figura 4.31: Resultados calculados para o pedido.

247

Criando Sites Dinmicos com ASP 3.0

Com isso comprovamos que a nossa pgina, para clculo do Total do Pedido, est funcionando
corretamente.

Concluso
Neste captulo aprendemos aspectos fundamentais do ASP 3.0.
Primeiro, aprendemos exatamente o que uma pgina ASP, onde a mesma processada e
qual o resultado que retorna para o navegador do cliente. Depois tivemos uma viso geral
sobre o Modelo de Objetos do ASP 3.0.
Em seguida fizemos um estudo completo sobre os objetos Request e Response. Estudamos
todas as colees, mtodos e propriedades destes objetos. Para cada elemento apresentado
foram colocados exemplos de cdigo, facilitando o entendimento.
Na parte final do captulo apresentamos dois exemplos mais elaborados, onde utilizamos
diversos conceitos apresentados at o momento, tais como o conhecimento dos objetos Request
e Response e da linguagem VBScript.
Mas, para que nossos exemplos assumam um aspecto mais profissional, precisamos aprender
a acessar bancos de dados a partir de pginas ASP. Este o assunto do Captulo 5. Ento,
vamos l, sem mais demoras.

248

Captulo 5 Conectando Pginas ASP com Bancos de Dados

Captulo 5
Conectando Pginas ASP
com Bancos de Dados

249

Criando Sites Dinmicos com ASP 3.0

Estamos vivendo na Era da Informao. Os aplicativos, quer sejam os tradicionais quer sejam
aplicativos para a Web, so todos ligados informaes de bancos de dados. Quando voc faz
o cadastro em um site de Comrcio Eletrnico, os dados fornecidos so armazenados em um
banco de dados. Da prxima vez que voc visitar o site, estas informaes podero ser
recuperadas a partir deste banco de dados. Quando ligamos para a companhia telefnica
para reclamar, o atendente pede que seja informado o nosso cdigo de cliente. atravs deste
cdigo que as informaes sobre o cliente so recuperadas, a partir do banco de dados da
empresa. Existem incontveis exemplos de aplicaes que usam bancos de dados, no
importando se este est residente em um Mainframe ou em um servidor de Rede que roda um
servidor de banco de Dados, como o Microsoft SQL Server 2000. Devemos salientar a
importncia e a necessidade da utilizao de banco de dados para o armazenamento de um
volume cada vez maior de informaes, sendo que estas informaes e sua correta utilizao
so de fundamental importncia para a empresa.
Durante muito tempo, os bancos de dados residiam em computadores de grande porte, os
conhecidos Mainframe. Depois veio uma onda de descentralizao, na qual a grande estrela
eram as Redes Locais de microcomputadores, com bancos de dados em servidores de Rede.
Esta foi a poca da criao das aplicaes em duas camadas, no tradicional modelo ClienteServidor. Com o avano do modelo Web e da Internet, surgiu a necessidade do desenvolvimento
de aplicaes Web com conexo a banco de dados. Hoje esta necessidade est mais do que
justificada: no existe aplicao Web que no faa conexo com bancos de dados. Desde um
simples formulrio para consulta ao CEP at aplicaes mais complexas de cotao eletrnica
de preos, todas necessitam de acesso a bancos de dados.
Neste captulo aprenderemos a utilizar a tecnologia ASP 3.0 para conectar nossas pginas com
banco de dados. Iniciaremos por uma reviso de dois conceitos muito importantes:
Modelo Relacional de dados.
Linguagem SQL Structured Query Language.
Uma vez revistos estes conceitos partiremos para a conexo de pginas ASP com bancos de
dados utilizando os objetos do ASP. Uma vez estabelecida a conexo aprenderemos a utilizar
objetos do ASP que recuperam informaes do banco de dados. Diversos exemplos prticos
sero apresentadospara facilitar o entendimento dos conceitos apresentados. Tambm veremos
como inserir informaes em um Banco de dados, a partir de um formulrio HTML.
Para facilitar o acompanhamento dos exemplos apresentados, estaremos utilizando um banco
de dados do Microsoft Access.
Este captulo fornece a base necessria para conectar pginas ASP com bancos de dados,
alm da reviso dos conceitos bsicos relativos a bancos de dados e linguagem SQL. No
prximo captulo estaremos abordando diversos aspectos avanados em relao a utilizao
de bancos de dados com pginas ASP.

250

Captulo 5 Conectando Pginas ASP com Bancos de Dados

Uma Reviso dos Conceitos Bsicos de Banco de Dados


Neste item iremos revisar alguns conceitos bsicos sobre bancos de dados. Estes conceitos
so importantes para o projeto, a criao e a correta utilizao dos bancos de dados.
Em muitas situaes teremos que conectar nossas pginas ASP com bancos de dados j
existentes, neste caso precisamos conhecer os conceitos aqui apresentados, para podermos
otimizar sua utilizao.
Em outras situaes teremos que criar o banco de dados a ser utilizado pela aplicao
Web. Neste caso, os conceitos apresentados neste item auxiliam na criao de um banco
de dados melhor estruturado e otimizado, tanto em termos de espao de armazenamento,
quanto da qualidade e disponibilidade das informaes nele contidas. Revisaremos os
seguintes conceitos:
Entidades e Atributos.
Chave Primria.
Relacionamentos entre Entidades (Tabelas).
Integridade Referencial.
Normalizao de Tabelas.

Entidades e Atributos
Toda informao de um banco de dados armazenada em Tabelas, que tambm so chamadas
de Entidades. Por exemplo, poderamos ter uma tabela Clientes, onde seriam armazenadas
informaes sobre os diversos clientes.
Sobre cada um dos clientes poderamos armazenar informaes tais como: Nome, Rua, Bairro,
Telefone, CEP, Data de Nascimento, etc. Essas diversas caractersticas de cada cliente so os
atributos do cliente, muitas vezes chamados de Campos da entidade Cliente. O conjunto de
todos os atributos de um cliente e os valores dos mesmos forma o Registro do cliente. Com
isso teremos a tabela constituda por um conjunto de registros (uma linha completa com
informaes sobre o cliente) e cada registro formado por um conjunto de atributos (Nome,
Endereo, etc.).
Resumindo:
Entidade ou Tabela Conjunto de Registros.
Campos ou Atributos Caractersticas individuais da Entidade.
Considere o exemplo da Figura 5.1, onde temos uma tabela Cliente com os seus diversos
campos (atributos):

251

Criando Sites Dinmicos com ASP 3.0

Figura 5.1: A entidade (tabela) Clientes e seus diversos atributos (campos).


No exemplo da Figura 5.1, temos uma entidade Clientes e seus diversos atributos Cdigo
do Cliente, Nome da Empresa, Nome do Contato, Cargo do Contato, Endereo, etc. Em cada
linha temos um conjunto de atributos e seus valores. Cada linha forma um registro. Cada
coluna um atributo da tabela Clientes.
Um dos grandes desafios em se projetar um banco de dados com sucesso a correta determinao
das entidades que existiro, bem como dos atributos de cada uma delas.

Chave Primria
O conceito de Chave Primria fundamental para o correto entendimento do funcionamento
de um banco de dados. Vamos procurar entender o que significa um campo ser a chave
primria de uma tabela.
Ao definirmos um campo como sendo uma chave primria, estamos informando ao banco de
dados que no podem existir dois registros com o mesmo valor de chave primria, ou seja, os
valores neste campo precisam ser nicos. Por exemplo, se defino o campo Nmero da
Identidade da tabela Clientes como sendo uma chave primria, estou dizendo ao banco de
dados que no podem existir dois clientes com o mesmo valor neste campo. Na prtica, estou
garantindo que no podem ser cadastrados dois clientes com o mesmo Nmero de Identidade.
Em outras palavras poderamos dizer que o campo chave primria identifica de maneira
nica cada registro de uma tabela, isto , de posse do valor da chave primria somente
localizaremos um registro com determinado valor neste campo.

252

Captulo 5 Conectando Pginas ASP com Bancos de Dados

Este um conceito muito importante, pois, conforme veremos mais adiante, os conceitos de
Integridade Referencial e Normalizao esto diretamente ligados ao conceito de chave primria.
Na Figura 5.2 vemos um exemplo da tabela Clientes onde o campo Cdigo do Cliente definido
como uma chave primria. Observe que no existem dois clientes com o mesmo cdigo.

Figura 5.2: O campo Cdigo do Cliente uma chave primria.


Um detalhe importante que a chave primria pode ser formada pela combinao de mais de
um campo. Podem existir casos em que um nico campo no capaz de atuar como chave
primria, pelo fato do mesmo apresentar valores repetidos. Nestes casos podemos definir
uma combinao de dois ou mais campos para ser a nossa chave primria. Lembre-se que
uma tabela pode ter somente uma chave primria, seja ela simples ou composta.

Relacionamentos Entre Tabelas


Na prtica, em um banco de dados existem diversas tabelas, como por exemplo: Clientes,
Produtos, Pedidos, Detalhes do Pedido, etc. Embora as informaes estejam separadas em
cada uma das tabelas, na prtica devem existir relacionamentos entre elas.
Por exemplo: um pedido feito para um cliente e neste pedido podem existir diversos itens,
os quais so armazenados na tabela Detalhes do Pedido. Alm disso cada pedido tem um
nmero nico, e um mesmo cliente pode fazer diversos pedidos.

253

Criando Sites Dinmicos com ASP 3.0

Em um banco de dados precisamos de uma maneira para representar estes relacionamentos,


da vida real, em termos das tabelas e atributos. Isto possvel com a utilizao de relacionamentos entre tabelas, os quais podem ser de trs tipos:
Um para Um
Um para Vrios
Vrios para Vrios

Relacionamento do Tipo Um Para Um


Esta relao existe quando os campos que se relacionam so ambos chaves primrias em suas
respectivas tabelas. Cada um dos campos no apresenta valores repetidos. Na prtica existem
poucas situaes onde utilizaremos um relacionamento deste tipo.
Um exemplo poderia ser o seguinte: imagine uma escola com um cadastro de alunos na
tabela Alunos. Apenas uma pequena parte deles participa da Banda da escola. Por questes
de projeto do banco de dados, podemos optar por criar uma segunda tabela Alunos da Banda,
a qual pode se relacionar com a tabela Alunos atravs de um relacionamento Um para Um.
Cada aluno somente cadastrado uma vez na tabela Alunos e uma nica vez na tabela Alunos
da Banda. Poderamos utilizar o campo Matrcula do Aluno como o campo que relaciona as
duas tabelas.
Na tabela Alunos da Banda poderamos colocar apenas o Nmero da Matrcula do aluno,
alm das informaes a respeito do instrumento que ele toca, tempo de banda, etc. Quando
for necessrio buscar as informaes tais como nome, endereo, etc., as mesmas podem ser
recuperadas atravs do relacionamento existente entre as duas tabelas, evitando, com isso,
que a mesma informao (Nome, Endereo, etc.) tenha que ser duplicada nas duas tabelas, o
que diminui a probabilidade de erros de digitao.
Na Figura 5.3 vemos o exemplo de um relacionamento do tipo Um para Um entre as tabelas
Alunos e Alunos da Banda.

Figura 5.3: Um relacionamento do tipo Um para Um.

254

Captulo 5 Conectando Pginas ASP com Bancos de Dados

Relacionamento do Tipo Um Para Vrios


Este, com certeza, o tipo de relacionamento mais comum entre duas tabelas. Uma das
tabelas (o lado Um do relacionamento) possui um campo que a chave primria e a outra
tabela (o lado Vrios) se relaciona atravs de um campo cujos valores relacionados podem se
repetir vrias vezes.
Considere o exemplo entre a tabela Clientes e Pedidos. Cada Cliente somente cadastrado
uma nica vez (por isso o campo Cdigo do Cliente uma chave primria, indicando que no
podem existir dois clientes com o mesmo cdigo); portanto a tabela Clientes ser o lado Um
do relacionamento. Porm cada cliente pode fazer diversos pedidos, por isso que o Cdigo do
Cliente poder aparecer vrias vezes na tabela Pedidos, tantas vezes quantos forem os pedidos
que o cliente tiver feito. Por isso que temos um relacionamento do tipo Um para Vrios entre
a tabela Clientes e Pedidos, atravs do campo Cdigo do Cliente, indicando que um mesmo
cliente pode realizar diversos pedidos.
Na Figura 5.4 vemos um exemplo de um relacionamento Um para Vrios entre as tabelas
Clientes e Pedidos, atravs do campo Cdigo do Cliente.

Figura 5.4: Um relacionamento do tipo Um para Vrios.


No lado Um do relacionamento o campo definido como uma chave primria (campo
CdigoDoCliente na tabela Clientes) e no lado Vrios no (campo CdigoDoCliente na tabela
Pedidos), indicando que no lado Vrios o Cdigo do Cliente pode se repetir vrias vezes, uma
vez que um mesmo cliente pode fazer diversos pedidos.

Relacionamento do Tipo Vrios para Vrios


Este tipo de relacionamento ocorre em uma situao onde, em ambos os lados do relacionamento, os valores poderiam se repetir. Vamos considerar o caso entre Produtos e Pedidos. Posso
ter vrios Pedidos nos quais aparece um determinado produto, alm disso vrios Produtos
podem aparecer no mesmo Pedido. Esta uma situao em que temos um relacionamento do
tipo Vrios para Vrios: Vrios produtos podem aparecer em Vrios pedidos.

255

Criando Sites Dinmicos com ASP 3.0

Na prtica no temos como implementar um relacionamento deste tipo, devido a uma srie
de problemas que este procedimento implicaria. Por exemplo, na tabela Pedidos teramos
que repetir o Nmero do Pedido, Nome do Cliente, Nome do Funcionrio, Data do Pedido,
etc. para cada item do Pedido.
Para evitar este tipo de problema bastante comum quebrarmos um relacionamento do tipo
Vrios para Vrios em dois relacionamento do tipo Um para Vrios. Isso feito atravs da criao
de uma nova tabela, a qual fica com o lado Vrios dos relacionamentos. No nosso exemplo
poderamos criar a tabela Detalhes do Pedido, onde ficam armazenadas as informaes sobre os
diversos itens de cada pedido. Ento, ao invs de termos um relacionamento do tipo Vrios para
Vrios, teremos dois relacionamentos do tipo Um para Vrios, conforme indicado na Figura 5.5.

Figura 5.5: Quebrando um relacionamento Vrios para Vrios.


Esta situao em que um relacionamento Vrios para Vrios quebrado em dois relacionamentos do tipo Um para Vrios bastante comum. Diversas vezes utilizamos esta tcnica
para eliminar uma srie de problemas no banco de dados, tais como informao repetida e
inconsistncia de dados.
Agora que j conhecemos os tipos de relacionamentos existentes, no prximo item veremos o
conceito de Integridade Referencial como uma maneira de garantir a consistncia dos dados.

Integridade Referencial
A Integridade Referencial utilizada para garantir a integridade dos dados entre as tabelas
relacionadas, evitando inconsistncias dos dados, bem como repeties desnecessrias.
Por exemplo, existe um relacionamento do tipo Um para Vrios entre a tabela Clientes e a
tabela Pedidos (um cliente pode fazer vrios pedidos). Com a Integridade Referencial, o banco
de dados no permite que seja cadastrado um pedido para um cliente ainda no cadastrado.
Tambm podemos garantir o seguinte:

256

Captulo 5 Conectando Pginas ASP com Bancos de Dados

Quando o cdigo de um cliente for alterado na tabela Clientes, o banco de dados atualiza,
automaticamente, todos os Cdigos do Cliente na tabela Pedidos, de tal maneira que
no fiquem registros rfos, isto , registros de Pedidos com um cdigo de cliente que
no existe mais na tabela Clientes. Esta ao conhecida como Propagar atualizao
dos campos relacionados.
Quando um cliente for excludo da tabela Clientes, podemos pedir para que o banco
de dados exclua, na tabela Pedidos, todos os pedidos do cliente que est sendo excludo.
Essa opo conhecida como Propagar excluso dos registros relacionados e pode
ser habilitada ou no, dependendo da especificao do banco de dados. Caso seja
necessrio manter todo o histrico de compras do cliente, por exemplo, esta opo no
deve ser habilitada. Com isso, quando o cliente for eliminado da tabela Clientes, os
seus pedidos continuaro gravados na tabela Pedidos.
Essas opes so definidas no momento da criao das tabelas e dos relacionamentos entre as
tabelas do banco de dados.
A opo de Propagar atualizao dos campos relacionados utilizada na maioria das situaes,
j a opo de Propagar excluso dos registros relacionados deve ser estudada, caso a caso.

Normalizao de Tabelas
O conceito de Normalizao foi criado no incio da dcada de 70.
O objetivo da Normalizao evitar os problemas provocados por falhas no projeto do banco de
dados, bem como eliminar a mistura de assuntos e as correspondentes redundncias de dados.
Uma regra de ouro que devemos observar durante a elaborao do projeto de banco de dados
a de No misturar assuntos em uma mesma tabela.
Por exemplo na tabela Clientes devemos colocar somente campos relacionados com o assunto
Clientes. No devemos misturar campos relacionados com outros assuntos, tais como Pedidos,
Produtos, etc. Essa mistura de assuntos em uma mesma tabela acaba por gerar repetio
desnecessria dos dados bem como inconsistncia dos mesmos.
O processo de Normalizao aplica uma srie de regras sobre as entidades de um banco de
dados, para verificar se as mesmas esto corretamente projetadas. Embora existam cinco Formas
Normais (ou regras de Normalizao), na prtica usamos um conjunto de trs Formas Normais.
Com freqncia, aps a aplicao das regras de Normalizao, algumas tabelas acabam se dividindo
em duas ou mais, o que no final gera um nmero maior de tabelas do que o originalmente existente.
Este processo causa a simplificao dos atributos de uma tabela, colaborando para a estabilidade
do modelo, reduzindo-se consideravelmente as necessidades de manuteno.

257

Criando Sites Dinmicos com ASP 3.0

Vamos estudar e entender o processo de Normalizao na prtica, atravs de exemplos.

Primeira Forma Normal


Uma tabela est na Primeira Forma Normal quando seus atributos no contm Grupos de Repetio.
Por isso dizemos que uma tabela que possui Grupos de Repetio no est na Primeira Forma
Normal. Considere a tabela indicada na Figura 5.6.

Figura 5.6: Uma tabela que no est na Primeira Forma Normal.


Podemos notar que uma tabela com esta estrutura apresentaria diversos problemas. Por
exemplo, se um casal tiver mais de um filho, teramos que digitar o nome do pai e o nome da
me diversas vezes, tantas quantas forem os filhos. Isso forma um Grupo de Repetio. Alm
do mais, pode ser que por erro de digitao o nome dos pais no seja digitado exatamente
igual todas as vezes, o que pode acarretar problemas na hora de fazer pesquisas ou emitir
relatrios. Este problema ocorre porque misturamos assuntos em uma mesma tabela.
Colocamos as informaes dos pais e dos filhos em uma mesma tabela.
A resoluo para este problema simples: criamos uma tabela separada para a informao
dos pais e relacionamos a tabela Pais com a tabela Filhos atravs de um relacionamento do
tipo Um para Vrios, ou seja, Um casal pode ter Vrios filhos.
Esta soluo indicada na Figura 5.7.
As duas tabelas resultantes desse processo de Normalizao, Pais e Filhos, esto na Primeira
Forma Normal; a tabela original, a qual misturava informaes de Pais e Filhos, no estava na
Primeira Forma Normal.

258

Captulo 5 Conectando Pginas ASP com Bancos de Dados

Figura 5.7: As tabelas Pais e Filhos esto na Primeira Forma Normal.

Segunda Forma Normal


Ocorre quando a chave primria composta por mais de um campo. Neste caso, devemos
observar se todos os campos que no fazem parte da chave primria dependem de todos os
campos que a compem. Se algum campo depender somente de parte da chave composta,
ento este campo deve pertencer a outra tabela.
Observe o exemplo indicado na tabela da Figura 5.8.

Figura 5.8: Uma tabela que no est na Segunda Forma Normal.


A chave primria composta formada pela combinao dos campos NmeroDaMatrcula e
CdigoDoCurso. O campo Avaliao depende tanto do CdigoDoCurso quanto do
NmeroDaMatrcula, porm o campo DescrioDoCurso, depende apenas do CdigoDoCurso.
Com isso temos um campo que no faz parte da chave primria e depende apenas de um dos
campos que a compem, por isso dizemos que esta tabela no est na Segunda Forma Normal.
A resoluo para este problema tambm simples: dividimos a tabela, que no est na Segunda
Forma Normal, em duas outras tabelas, conforme indicado pela Figura 5.9, sendo que as duas
tabelas resultantes esto na Segunda Forma Normal.

259

Criando Sites Dinmicos com ASP 3.0

Figura 5.9: Duas tabelas na Segunda Forma Normal.

NOTA
A distino entre a Segunda e a Terceira Formas Normais, que veremos no prximo item,
muitas vezes confusa. A Segunda Forma Normal, na maioria das vezes, est ligada a ocorrncia
de chaves primrias compostas.

Terceira Forma Normal


Na definio dos campos de uma entidade podem ocorrer casos em que um campo no seja
dependente diretamente da chave primria, ou de parte dela, mas sim dependente de um
outro atributo constante na tabela e que no a chave.
Quando isto ocorre, dizemos que a tabela no est na Terceira Forma Normal, conforme
indicado pela tabela da Figura 5.10.

Figura 5.10: Uma tabela que no est na Terceira Forma Normal.


Observe que o campo DescrioDoCurso depende apenas do campo CdigoDoCurso, o qual no
faz parte da chave primria. Por isso dizemos que esta tabela no est na Terceira Forma Normal.
A soluo para este caso tambm simples. Novamente basta dividir a tabela em duas outras,
conforme indicado pela Figura 5.11. As duas tabelas resultantes esto na Terceira Forma Normal.

260

Captulo 5 Conectando Pginas ASP com Bancos de Dados

Figura 5.11: Duas tabelas na Terceira Forma Normal.

IMPORTANTE
Com isso podemos concluir que, como resultado do processo de Normalizao, iremos obter
um nmero maior de tabelas, porm sem problemas de redundncia e inconsistncia dos
dados, ou com estes problemas minimizados.

Passos Para Projetar um Banco de Dados


Neste item iremos apresentar os passos bsicos para projetar um banco de dados. Aplicaremos
os conhecimentos sobre Entidades, Atributos, Relacionamentos, Chave Primria e Normalizao.
Um banco de dados bem projetado fornece um acesso conveniente s informaes desejadas.
Com uma boa estrutura, gasta-se menos tempo na construo do banco de dados e, ao mesmo
tempo, assegura-se resultados mais rpidos e precisos.

Etapas na Estruturao de um Banco de Dados


Determinar qual o objetivo do banco de dados. Isto ajuda na determinao de quais os
dados devem ser armazenados.
Determinar as tabelas necessrias. Aps definirmos o objetivo do banco de dados, as
informaes devem ser definidas e separadas em assuntos diferentes, tais como Clientes,
Empregados, Pedidos, pois cada um ir compor uma tabela no banco de dados.
Determinar os campos necessrios em cada tabela. Definir quais informaes devem
ser mantidas em cada tabela. Por exemplo, a tabela Clientes poderia ter um campo
para o Cdigo do Cliente, outro para o Nome do Cliente e assim por diante.
Determinar, em cada tabela, qual ou quais campos sero utilizados como chave primria.
Esta uma etapa importante para a definio dos relacionamentos que vem a seguir.
Determinar os relacionamentos. Decidir como os dados de uma tabela se relacionam
com os dados de outras tabelas. Por exemplo, clientes podem fazer vrios pedidos.
fornecedores podem fornecer vrios produtos, etc.

261

Criando Sites Dinmicos com ASP 3.0

Refinar a estrutura do banco de dados. Antes de inserir muitos dados, ou at mesmo


antes de inserir qualquer dado, verificar se a estrutura contm erros, isto , verificar se
os resultados obtidos so os desejados. Isto, freqentemente, pode ser obtido atravs do
processo de Normalizao. Caso necessrio, deve-se alterar a estrutura do banco de dados.

Dicas Para Determinao dos Campos em uma Tabela


Relacionar diretamente cada campo ao assunto da tabela. Se um campo descreve o
assunto de uma tabela diferente, este campo deve pertencer a outra tabela. O mesmo
acontece quando uma informao se repete em diversas tabelas. Este um indcio de
que existem campos desnecessrios em algumas tabelas.
No incluir dados derivados ou calculados. No recomendado armazenar o resultado
de clculos nas tabelas. O correto que o clculo seja executado quando necessitarmos
do resultado.
Incluir todas as informaes necessrias. Como fcil esquecer informaes
importantes, deve-se ter em mente todas as informaes coletadas desde o incio do
processo e verificar se com elas possvel obter todos os resultados desejados.
Armazenar todas as informaes separadamente. Existe uma tendncia em armazenar
informaes em um nico campo, por exemplo o nome do curso e o tempo de durao
em um mesmo campo. Como as duas informaes foram combinadas em um nico
campo, ficar difcil conseguir um relatrio classificado pelo tempo de durao dos
cursos, por exemplo.

Como Escolher o Campo que Ser a Chave Primria?


Um bom Sistema Gerenciador de Banco de Dados (SGBD) aquele que encontra e nos fornece,
rapidamente, todas as informaes necessrias que nele estejam armazenadas, mesmo que
em diferentes tabelas. Para que isto seja possvel necessrio incluir um campo ou conjunto
de campos que identifiquem de modo nico cada registro de uma tabela. Esta informao
chamada Chave Primria, conforme descrito anteriormente. Deve-se ter certeza que este campo
(ou conjunto de campos) seja sempre diferente para cada registro, por no ser permitido
valores duplicados em um campo de chave primria.
Ao escolher campos de chave primria, considere os seguintes detalhes:
No permitido duplicidade de valores ou nulos (informaes desconhecidas). Caso
no exista um identificador nico para uma determinada tabela, pode-se usar um campo
que numere os registros seqencialmente.
Pode-se utilizar o valor deste campo para encontrar registros.

262

Captulo 5 Conectando Pginas ASP com Bancos de Dados

O tamanho da chave primria afeta a velocidade das operaes, portanto, para um


melhor desempenho, devemos utilizar o menor tamanho que acomode os valores
necessrios para armazenar no campo.

Noes Bsicas da Linguagem


SQL Structured Query Language
Em diversas situaes estaremos utilizando a linguagem SQL em nossas pginas ASP. Para
recuperar dados, inserir novas informaes ou, at mesmo, para atualizar informaes em
um banco de dados, estaremos utilizando a linguagem SQL. Por isso que importante
conhecermos os aspectos bsicos desta linguagem, conforme veremos neste item.

Introduo
Na Figura 5.12 temos um exemplo de uma instruo SQL. Embora possa parecer complexa, em
um primeiro momento, veremos que a linguagem SQL bastante simples e de fcil aprendizado.

Figura 5.12: Um exemplo de instruo SQL.


Uma instruo SQL descreve o conjunto de dados que voc deseja recuperar (campos, de
quais tabelas, critrios, classificao, expresses calculadas, etc.).
Todas as instrues SQL so conduzidas com um nico comando que contm uma descrio
completa da informao exigida. Ao escrever uma instruo SQL, voc no deve se preocupar
em como os dados so recuperados, mas somente com o contedo do conjunto de dados.
Esse o principal benefcio do mtodo SQL.

263

Criando Sites Dinmicos com ASP 3.0

Lembre-se que o SQL um padro genrico para expresses de consulta em banco de dados.
Embora a maior parte das verses do SQL compartilhe elementos bsicos, elas no so
idnticas. O Access SQL usa algumas palavras-chave que voc no encontra em outras verses
do SQL. Tambm existem pequenas diferenas entre o Microsoft Access e o Microsoft SQL
Server, conforme iremos salientar durante este captulo.
Veremos atravs de exemplos a utilizao das principais palavras-chave do SQL para a
construo de expresses SQL para pesquisa em banco de dados.

A Instruo SELECT
Esta com certeza, a instruo SQL mais importante; no existe pesquisa que no utilize esta
instruo. Agora vamos conhec-la em detalhes.
A instruo Select utilizada para especificar quais os campos de quais tabelas faro parte da
consulta, quais critrios de pesquisa sero utilizados, qual a ordem de classificao, etc.
A sintaxe simplificada da instruo conforme indicado abaixo:
SELECT
campo1, campo2, campo3
FROM nome_da_tabela
[WHERE condio ]
[GROUP BY nome_do_campo ]
[HAVING ... ]
[ORDER BY... ]

Na Tabela 5.1 temos uma descrio destes elementos.


Tabela 5.1 Os principais elementos da instruo Select.
Elemento

Descrio

campo1, campo2 ... campon

Nome dos campos a serem retornados a partir


de uma ou mais tabelas.

nome_da_tabela

Nome da tabela a partir da qual os dados devem


ser recuperados.

WHERE

Permite que sejam especificados


critrios de pesquisa.

GROUP BY

Podemos agrupar os resultados em


torno de um ou mais campos de dados.

264

Captulo 5 Conectando Pginas ASP com Bancos de Dados

Elemento

Descrio
Por exemplo, em um relatrio de vendas anuais,
posso ter os resultados agrupados por ms, com
a soma das vendas do ms logo aps a listagem
de vendas do ms.

HAVING

Especifica critrios para serem utilizados


juntamente com Group By.

ORDER BY

Podemos ordenar os resultados obtidos com


base em um ou mais campos de dados. Por
exemplo, podemos ordenar uma listagem de
vendas em ordem alfabtica do nome do cliente
ou do nome do vendedor.

Vamos analisar alguns exemplos prticos de utilizao da linguagem SQL.

Exemplo 1
Criar uma instruo SQL que retorne o campo NmeroDoPedido, o campo DataDoPedido, o
campo Frete e o campo PasDeDestino da tabela Pedidos.
SELECT Pedidos.NmeroDoPedido, Pedidos.DataDoPedido, Pedidos.PasDeDestino,
Pedidos.Frete FROM Pedidos;

Toda instruo SQL deve terminar com um ponto e vrgula (;), conforme indicado no Exemplo 1.
Observe que os nomes dos campos esto separados por vrgula, alm disso estamos utilizando o
nome completo, isto : Nome_da_tabela.Nome_do_campo. Tambm poderamos utilizar o
comando, sem o nome da tabela antes do nome do campo, conforme indicado no seguinte comando:
SELECT NmeroDoPedido, DataDoPedido, PasDeDestino, Frete FROM Pedidos;

IMPORTANTE
Somente obrigatria a utilizao do nome da tabela antes do nome do campo quando o
mesmo campo existir em duas ou mais tabelas que fazem parte da instruo SQL. Por exemplo,
imagine que estejamos escrevendo uma instruo SQL para criar uma listagem com o cdigo
e o nome do cliente, bem como todos os pedidos efetuados pelo cliente. Acontece que o Cdigo
do Cliente, no nosso exemplo, existe nas duas tabelas: Clientes e Pedidos. Neste caso devemos
especificar o nome da tabela, antes do nome do campo.

265

Criando Sites Dinmicos com ASP 3.0

Exemplo 2
Alterar a instruo SQL anterior para que os registros sejam classificados em ordem crescente
pelo valor do Frete.
SELECT NmeroDoPedido, DataDoPedido, PasDeDestino, Frete FROM Pedidos
ORDER BY Frete;

Observe a utilizao da clusula ORDER BY Frete para classificar os registros em ordem


crescente. A classificao em ordem crescente a padro . Quando formos classificar em ordem
decrescente, precisamos especificar a palavra DESC, conforme indicado no seguinte comando:
SELECT NmeroDoPedido, DataDoPedido, PasDeDestino, Frete FROM Pedidos
ORDER BY Frete DESC;

Exemplo 3
Agora vamos comear a inserir condies. Muitas vezes as condies so chamadas de filtro;
uma vez estabelecida uma condio, somente os registros que atendem a condio especificada
sero retornados. Desta forma a condio atua como se fosse um filtro. Neste exemplo vamos
alterar a instruo SQL anterior para que sejam exibidos somente os pedidos cujo PasDeDestino
seja Brasil.
SELECT NmeroDoPedido, DataDoPedido, PasDeDestino, Frete FROM Pedidos
WHERE PasDeDestino=Brasil
ORDER BY Frete;

Observe a utilizao da clusula WHERE para filtrar somente os pedidos cujo PasDeDestino seja
Brasil. Como o campo PasDeDestino um campo do tipo texto, o valor do critrio (Brasil) tem
que vir entre aspas. Se fosse um campo do tipo data, o valor do critrio teria que vir delimitado
pelo sinal #, por exemplo #01/01/1995#. Vamos trabalhar um pouco mais com a clusula WHERE.

Exemplo 4
Altere a instruo SQL anterior para que sejam exibidos somente os pedidos para o Brasil ou
Alemanha como PasDeDestino.
SELECT NmeroDoPedido, DataDoPedido, PasDeDestino, Frete FROM Pedidos
WHERE (((Pedidos.PasDeDestino)=Brasil Or (Pedidos.PasDeDestino)=Alemanha))
ORDER BY Frete;

Observe a utilizao da clusula OR ligando os dois critrios. Lembre que a clusula OR


retorna um registro se o PasDeDestino atender a um dos dois critrios, ou seja, se for Brasil
ou se for Alemanha, o registro ser selecionado, isto exatamente o que desejamos: todos os
pedidos para o Brasil ou para a Alemanha.

266

Captulo 5 Conectando Pginas ASP com Bancos de Dados

Exemplo 5
Altere a instruo SQL anterior, retirando o critrio para PasDeDestino. Adicione um critrio
para NmeroDoPedido maior do que 10500, retire a classificao do campo Frete a classifique
pelo campo NmeroDoPedido.
SELECT NmeroDoPedido, DataDoPedido, PasDeDestino, Frete FROM Pedidos
WHERE NmeroDoPedido>10500
ORDER BY NmeroDoPedido;

Observe a clusula WHERE utilizando o operador de comparao maior do que (>) e a


classificao atravs da clusula ORDER BY no campo NmeroDoPedido.
Podemos ver, atravs dos exemplos, que a linguagem SQL no to difcil como pode parecer
primeira vista. Observe que a sintaxe da linguagem bastante intuitiva e orientada a extrao
de dados atravs das consultas.
Vamos continuar analisando alguns exemplos de aplicao da linguagem SQL com a utilizao
de recursos mais avanados.

Exemplo 6
Alterar a instruo SQL anterior, e adicionar um critrio de tal maneira que somente sejam
exibidos os pedidos para o ano de 1995. Tirar o critrio do campo NmeroDoPedido.
SELECT NmeroDoPedido, DataDoPedido, PasDeDestino, Frete FROM Pedidos
WHERE ((Year([DataDoPedido])=1995))
ORDER BY NmeroDoPedido;

Observe a utilizao da funo Year (Ano) para extrairmos apenas o ano do campo DataDoPedido a
fim de especificarmos como critrio o Ano=1995. Tambm a clusula ORDER BY foi mantida,
classificando a listagem em ordem crescente pelo nmero do pedido. A utilizao de funes junto
com os comando SQL nos fornece inmeras possibilidades de refinamento em nossas consultas.

Exemplo 7
Alterar a instruo SQL anterior, para que sejam exibidos somente os pedidos no perodo de 01/
01/1995 at 31/07/1995 e que tenham como PasDeDestino Brasil, Argentina, Alemanha ou Canad.
SELECT NmeroDoPedido, DataDoPedido, PasDeDestino, Frete FROM Pedidos
WHERE (((DataDoPedido) Between #1/1/95# And #8/31/95#)
AND
((PasDeDestino) In (Brasil,Argentina,Alemanha,Canad)))
ORDER BY Pedidos.NmeroDoPedido;

267

Criando Sites Dinmicos com ASP 3.0

Observe a utilizao de vrios critrios em diferentes campos. Colocamos critrios nos campos
DataDoPedido e PasDeDestino. Os critrios de dois ou mais campos so ligados atravs do
operador AND, indicando que um registro deve atender ambos os critrios para ser selecionado.
Tambm temos a utilizao dos operadores Between (Entre) para selecionar as datas dentre
um determinado intervalo e do operador In (Em) para selecionar o campo PasDeDestino que
seja igual a um dos valores apresentados na lista. Observe tambm que os valores de data
vem delimitados pelos marcadores #, conforme descrito anteriormente. A utilizao dos
parnteses visa facilitar o entendimento da instruo e facilitar a avaliao da expresso.

IMPORTANTE
Algumas destas funcionalidades podem necessitar de pequenas alteraes para funcionar em
nossas pginas ASP, conforme veremos mais adiante neste captulo.

Exemplo 8
Criar uma instruo SQL que retorne os campos NmeroDoPedido, DataDoPedido,
DataDeEntrega, Frete e PasDeDestino da tabela Pedidos. Criar uma coluna adicional que calcula
o nmero de dias entre a DataDeEntrega e a DataDoPedido. Chamar esta coluna de Dias_Ped_Entr.
SELECT NmeroDoPedido, DataDoPedido, DataDeEntrega, PasDeDestino, Frete,
[DataDeEntrega]-[DataDoPedido] AS Dias_Ped_Entr FROM Pedidos
WHERE (((DataDoPedido) Between #1/1/95# And #8/31/95#)
AND
((PasDeDestino) In (Brasil,Argentina,Alemanha,Canad)))
ORDER BY Pedidos.NmeroDoPedido;

Veja que a coluna calculada [DataDeEntrega]-[DataDoPedido] est junto com a listagem dos
campos no incio da instruo SELECT. Alm disso foi utilizada a palavra AS para atribuir
um nome (apelido) para esta coluna calculada. Este nome o que ser utilizado para fazer
referncia coluna, no nosso cdigo ASP.
Voc tambm pode classificar a listagem em ordem crescente ou decrescente de um campo
calculado. Por exemplo, se voc quisesse classificar a listagem do item anterior, em ordem
crescente, do nmero de dias entre a DataDeEntrega e a DataDoPedido, bastaria utilizar a
seguinte instruo SQL:
SELECT NmeroDoPedido, DataDoPedido, DataDeEntrega, PasDeDestino, Frete,
[DataDeEntrega]-[DataDoPedido] AS Dias_Ped_Entr
FROM Pedidos
WHERE (((DataDoPedido) Between #1/1/95# And #8/31/95#)
AND
((PasDeDestino) In (Brasil,Argentina,Alemanha,Canad)))
ORDER BY [DataDeEntrega]-[DataDoPedido];

268

Captulo 5 Conectando Pginas ASP com Bancos de Dados

Exemplo 9
Alterar a instruo SQL anterior, eliminando os critrios para a DataDoPedido e para o
PasDeDestino. Colocar um novo critrio para PasDeDestino, onde sejam exibidos apenas os
pedidos cujo PasDeDestino tem a primeira letra na faixa de A at M. Utilize o operador Like.
SELECT NmeroDoPedido, DataDoPedido, DataDeEntrega, PasDeDestino, Frete,
[DataDeEntrega]-[DataDoPedido] AS Dias_Ped_Entr
FROM Pedidos
WHERE ((PasDeDestino) Like [A-M]%))
ORDER BY PasDeDestino;

Observe a utilizao do operador Like (Como) como critrio de pesquisa para esta consulta.
Nunca demais salientar que a utilizao das instrues SQL juntamente com as funes de
operadores como o Like, nos fornece um amplo conjunto de possibilidades. O caractere %
utilizado como um caractere curinga. Por exemplo, se especificarmos o seguinte critrio:
WHERE NomeDoCliente Like Joo%

sero retornados todos os registros para Clientes cujo nome inicia com Joo. O caractere
curinga % significa, em termos simples, qualquer coisa, ou seja, o critrio especifica que o
nome inicie com Joo, no importando (qualquer coisa) o que vier depois.

IMPORTANTE
Aqui cabe um aviso importante para os usurios do Microsoft Access. No Microsoft Access, o
caractere curinga o *, j na construo de pginas ASP, utilizamos como caractere curinga o
%, o qual tambm utilizado no Microsoft SQL Server.

At agora estivemos trabalhando com instrues que selecionam registros de uma nica tabela.
Porm bastante comum criarmos instrues SQL baseadas em duas ou mais tabelas. Quando
criamos instrues SQL que buscam dados em duas ou mais tabelas, dizemos que est sendo
feito um Join entre as duas tabelas. Normalmente este Join (ou ligao) feito atravs de um
campo comum s duas tabelas. Por exemplo, NmeroDoPedido na tabela Pedidos e
NmeroDoPedido na tabela Detalhes do Pedido. Outro exemplo, CdigoDoCliente na tabela
Pedidos e CdigoDoCliente na tabela Clientes. Pode acontecer de termos consultas que
trabalham com trs ou mais tabelas, neste caso teremos diversos Joins.
Agora passaremos e explorar na prtica, atravs de exemplos, a construo de instrues
SQL que trabalham com duas ou mais tabelas.

269

Criando Sites Dinmicos com ASP 3.0

Exemplo 10
Criar uma instruo SQL que selecione os seguintes campos:
NmeroDoPedido da tabela Pedidos.
DataDoPedido da tabela Pedidos.
PasDeDestino da tabela Pedidos.
Frete da tabela Pedidos.
CdigoDoProduto, PreoUnitrio e quantidade da tabela DetalhesdoPedido.
Alm disso, as tabelas Pedidos e DetalhesdoPedido esto relacionadas atravs do campo
NmeroDoPedido, atravs de um relacionamento do tipo Um para Vrios. Classificar a listagem
em ordem crescente do NmeroDoPedido.
Para resolver este exemplo podemos utilizar a seguinte instruo SQL:
SELECT Pedidos.NmeroDoPedido, Pedidos.DataDoPedido, Pedidos.PasDeDestino,
Pedidos.Frete, DetalhesdoPedido.CdigoDoProduto, DetalhesdoPedido.PreoUnitrio,
DetalhesdoPedido.Quantidade
FROM Pedidos
INNER JOIN
DetalhesdoPedido
ON Pedidos.NmeroDoPedido=DetalhesdoPedido.NmeroDoPedido
ORDER BY Pedidos.NmeroDoPedido;

Primeiro devemos observar que, pelo fato de estarmos tratando com dados de duas tabelas,
estamos utilizando a nomenclatura completa, isto , Nome_da_tabela.Nome_do_campo.
Observe a utilizao da clusula INNER JOIN, ligando as tabelas Pedidos e DetalhesdoPedido,
atravs do campo NmeroDoPedido, conforme especificado na clusula ON, onde temos o seguinte:
ON Pedidos.NmeroDoPedido=DetalhesdoPedido.NmeroDoPedido

Observe que esta listagem ir trazer vrios registros para cada pedido, tantos quantos forem
os itens de cada pedido.
E se, ao invs do CdigoDoProduto, ns quisermos que seja exibida a descrio do produto?
Em primeiro lugar, esta informao encontra-se na tabela Produtos, logo teremos que adicionar
a tabela nossa consulta, a qual ir se ligar tabela DetalhesDoPedido atravs do campo
CdigoDoProduto. Logo, teremos mais um Join.
Aps adicionar a tabela Produtos e substituir o campo CdigoDoProduto pelo campo
NomeDoProduto, a nossa instruo SQL deve ficar conforme indicado no seguinte comando:
SELECT Pedidos.NmeroDoPedido, Pedidos.DataDoPedido, Pedidos.PasDeDestino, Pedidos.
Frete, Produtos.NomeDoProduto, DetalhesdoPedido.PreoUnitrio,
DetalhesdoPedido.Quantidade

270

Captulo 5 Conectando Pginas ASP com Bancos de Dados

FROM Produtos
INNER JOIN (Pedidos INNER JOIN DetalhesdoPedido ON Pedidos.NmeroDoPedido=Detalhesdo
Pedido.NmeroDoPedido) ON Produtos.CdigoDoProduto=DetalhesdoPedido.CdigoDoProduto
ORDER BY Pedidos.NmeroDoPedido;

Observe que neste caso temos um INNER JOIN dentro do outro. Dentro do parnteses feita
a ligao entre as tabelas Pedidos e DetalhesdoPedido, atravs do campo NmeroDoPedido, e
externamente feita a ligao entre as tabelas Produtos e DetalhesdoPedido, atravs do campo
NmeroDoPedido.
Podemos utilizar diversos nveis de INNER JOIN, embora esta no seja uma prtica
recomendada, pois se aumentarmos muito os nveis de INNER JOIN, podemos ter pesquisas
mais lentas, em conseqncia do aumento da complexidade das mesmas. At trs ou quatro
nveis considerado normal, acima disso preciso repensar a maneira de construir a consulta.

Exemplo 11
Alterar a instruo SQL do item anterior para que somente sejam exibidos os pedidos para os
produtos cujo NomeDoProduto inicie com uma letra na faixa de A at J. Tirar a classificao
do campo NmeroDoPedido e classificar em ordem crescente do campo NomeDoProduto.
SELECT Pedidos.NmeroDoPedido, Pedidos.DataDoPedido, Pedidos.PasDeDestino,
Pedidos.Frete, Produtos.NomeDoProduto, DetalhesdoPedido.PreoUnitrio,
DetalhesdoPedido.Quantidade
FROM Pedidos
INNER JOIN (Produtos INNER JOIN DetalhesdoPedido ON
Produtos.CdigoDoProduto=DetalhesdoPedido.CdigoDoProduto)
ON Pedidos.NmeroDoPedido=DetalhesdoPedido.NmeroDoPedido
WHERE (((Produtos.NomeDoProduto) Like [A-J]*))
ORDER BY Produtos.NomeDoProduto;

Observe, alm dos dois INNER JOIN, a utilizao da clusula WHERE com o operador Like
para especificar o critrio desejado.
At este momento estivemos construindo instrues SQL que executam consultas no banco
de dados. Especificamos quais campos sero exibidos, critrios de filtragem para estes campos
e uma ordem de classificao. A partir de agora aprenderemos a utilizar instrues SQL para
a construo de outros tipos de instrues SQL, as quais realizam alteraes e incluses em
tabelas de banco de dados.

271

Criando Sites Dinmicos com ASP 3.0

A Instruo UPDATE
A instruo UPDATE utilizada para alterar informaes em um banco de dados. Podemos
criar um formulrio onde o usurio pode alterar os seus dados cadastrais. Primeiro os dados
so recuperados a partir do banco de dados, em seguida as alteraes so enviadas de volta
para o banco de dados, atravs de uma instruo UPDATE. Vamos estudar esta instruo
atravs de exemplos, assim como fizemos com a instruo SELECT.

Exemplo 1
Criar uma instruo SQL que aumenta o PreoUnitrio em 20 % na tabela DetalhesdoPedido,
devido a um ajuste na moeda e uma desvalorizao em relao ao Dlar.
UPDATE DetalhesdoPedido
SET PreoUnitrio = PreoUnitrio*1.2;

Observe a simplicidade da instruo SQL. Utilizamos uma instruo UPDATE, seguida do


nome da tabela onde ser feita a atualizao. Em seguida uma instruo SET com a expresso
de atualizao para aumentar em 20 % o PreoUnitrio.
Vamos alterar a instruo anterior, para incluir um critrio na consulta de atualizao.

Exemplo 2
Alterar a instruo SQL do item anterior para que somente sejam aumentados os registros
cujo PreoUnitrio for maior ou igual a R$ 20,00.
UPDATE DetalhesdoPedido
SET PreoUnitrio = PreoUnitrio*1.2
WHERE PreoUnitrio>=20;

Apenas foi adicionada uma clusula WHERE, para atualizar apenas os registros cujo
PreoUnitrio seja maior ou igual a R$ 20,00.

Exemplo 3
Alterar a instruo SQL do exemplo anterior para que somente sejam aumentados os registros cujo
PreoUnitrio for maior ou igual a R$ 20,00 e cujo NmeroDoPedido seja menor do que 10500.
UPDATE DetalhesdoPedido
SET PreoUnitrio = PreoUnitrio*1.2
WHERE (((PreoUnitrio)>=20)
AND
((NmeroDoPedido)<10500));

272

Captulo 5 Conectando Pginas ASP com Bancos de Dados

Observe que utilizamos critrios em dois campos (PreoUnitrio e NmeroDoPedido) e que


estes critrios esto ligados por um operador AND, o que significa que um registro, somente
ser atualizado se ele atender aos dois critrios ao mesmo tempo (PreoUnitrio maior ou
igual a 20 e NmeroDoPedido menor do que 10500). Se o registro atender a apenas uma das
condies, o mesmo no ter o seu PreoUnitrio atualizado.
Vamos refinar um pouco mais a nossa consulta de atualizao. Vamos fazer com que somente
sejam atualizados os pedidos para o ano da DataDoPedido igual a 1995, e ainda iremos manter
os critrios adicionados at agora.

Exemplo 4
Alterar a instruo SQL do exemplo anterior para incluir um critrio para que o ano da
DataDoPedido seja 1995. Voc ter que incluir a tabela Pedidos, uma vez que o campo
DataDoPedido, encontra-se nesta tabela.
UPDATE Pedidos INNER JOIN DetalhesdoPedido
ON Pedidos.NmeroDoPedido = DetalhesdoPedido.NmeroDoPedido
SET DetalhesdoPedido.PreoUnitrio = PreoUnitrio*1.2
WHERE (((DetalhesdoPedido.PreoUnitrio)>=20)
AND
((DetalhesdoPedido.NmeroDoPedido)<10500)
AND
(Year([DataDoPedido])=1995));

Temos diversos detalhes interessantes a observar nesta instruo SQL. Primeiro um INNER
JOIN relacionando as tabelas Pedidos e DetalhesdoPedido, atravs do campo NmeroDoPedido.
Isso mostra que perfeitamente possvel utilizar um INNER JOIN dentro de uma consulta de
atualizao. Segundo, temos a utilizao da funo Year para extrair apenas o ano do campo
DataDoPedido e compar-lo com o critrio 1995.
Novamente, a utilizao de operadores e funes nos fornece uma grande flexibilidade em
termos de construo de nossas consultas.

A Instruo INSERT
A instruo INSERT utilizada para gravar registros em uma tabela de um banco de dados. Por
exemplo, quando o usurio preenche os dados de um formulrio de cadastro e os envia para
uma pgina ASP, podemos utilizar a instruo INSERT para os inserir em um banco de dados.
Vamos analisar alguns exemplos.

273

Criando Sites Dinmicos com ASP 3.0

Exemplo 1
Este exemplo cria um novo registro na tabela Funcionrios:
INSERT INTO Funcionrios (Nome, Sobrenome, Cargo) VALUES (Paulo, Braga,
Estagirio);

Esta instruo insere um registro na tabela Funcionrios com os seguintes dados:


Nome: Paulo
Sobrenome: Braga
Cargo: Estagirio

Exemplo 2
Este exemplo seleciona todos os estagirios de uma tabela Estagirios que tenham sido
contratados h mais de 30 dias e adiciona os registros selecionados tabela Funcionrios.
INSERT INTO Funcionrios
SELECT Estagirios.* FROM Estagirios
WHERE DataDaContratao < Hoje() - 30;

Observe que utilizamos a funo Hoje( ) para capturar a data do sistema e subtramos 30,
para obter apenas os funcionrios contratados a mais do que 30 dias.

A Instruo DELETE
A instruo DELETE utilizada para excluir registros de um banco de dados. Vamos supor
que voc tenha desenvolvido uma aplicao Web para agenda eletrnica, onde o usurio
pode cadastrar contatos, endereos, telefones e compromissos. Podemos criar uma pgina
ASP que permite ao usurio eliminar dados que no sejam mais necessrios na agenda. Neste
caso podemos fazer uso da instruo DELETE. Vamos a um exemplo prtico.

Exemplo 1
Criar uma instruo SQL que elimine todos os pedidos da tabela Pedidos cujo PasDeDestino
seja a Alemanha.
DELETE Pedidos.PasDeDestino
FROM Pedidos
WHERE (((Pedidos.PasDeDestino)=Alemanha));

A instruo to simples, que praticamente dispensa comentrios. A nica recomendao


importante que no devemos utilizar uma instruo DELETE, sem a utilizao de uma

274

Captulo 5 Conectando Pginas ASP com Bancos de Dados

clusula WHERE. Utilizar um DELETE sem uma clusula WHERE significa que estaremos
eliminando todos os registros da tabela.
Agora que j revisamos os aspectos bsicos relacionados a bancos de dados e linguagem SQL,
chegou o momento de aprendermos a conectar nossas pginas ASP com bancos de dados.

Uma Viso Geral de ADO e OLE DB


A Microsoft vem h muito tempo desenvolvendo tecnologias que permitam acesso s mais
variadas fontes de dados, quer sejam dados estruturados em bancos de dados tradicionais,
como o Microsoft SQL Server, dados nos formatos mais tradicionais, como os armazenados
em Mainframes, at dados no estruturados, como mensagens de correio eletrnico e arquivos
com contedo multimdia, como sons e imagem. A expresso por trs deste esforo conhecida
como Acesso Universal aos Dados ou UDA do ingls Universal Data Access.
Porm, na tentativa de disponibilizar o Acesso Universal aos Dados, muitas tecnologias foram
criadas, causando uma certa confuso e at desconforto para quem trabalha com desenvolvimento
de aplicaes. Isso porque, a cada nova tecnologia anunciada, um novo ciclo de aprendizado se
inicia, sem contar que muitas vezes a comunicao entre as diferentes tecnologias no exatamente
a esperada. Neste mundo de tecnologias j nos deparamos com siglas como:
DAO Data Access Objects.
RDS Remote Data Access.
ADO Activex Data Object.
ODBC Open Database Conectivity.
OLE DB.
normal que o desenvolvedor fique um pouco confuso com esta sopa de letrinhas. Mais
importante do que decorar o significado de cada sigla entender a tecnologia que fornece
acesso aos dados e saber utiliz-las corretamente. Hoje, a tecnologia mais utilizada, e
recomendada pela Microsoft, a dobradinha ADO/OLE DB. A utilizao de ODBC bastante
forte e deve se manter por um bom perodo. Por isso, analisaremos estas duas opes neste
captulo, e muitas vezes estaremos utilizando as duas ao mesmo tempo; mas isto ser mais
adiante, agora vamos procurar entender um pouco melhor estas tecnologias.

Um Pouco Sobre ODBC Open Database Conectivity


ODBC um padro da indstria de informtica para acesso a bancos de dados estruturados.
Um banco de dados estruturado utiliza o tradicional modelo Relacional, onde temos tabelas

275

Criando Sites Dinmicos com ASP 3.0

e relacionamentos entre tabelas. So exemplos de bancos de dados estruturados: o Microsoft


SQL Server, Oracle, Microsoft Access, Sybase, DB2 da IBM, etc.
ODBC uma interface que permite que os aplicativos acessem qualquer base de dados para
a qual existe um driver ODBC. Utilizando ODBC, podemos criar pginas ASP que acessem
dados para os quais existam drives ODBC, de uma maneira simples e rpida.
Com a utilizao de ODBC, podemos criar aplicaes que se tornam independentes do sistema
de banco de dados que est sendo utilizado. Por exemplo, desenvolvemos uma aplicao para
acessar uma fonte de dados ODBC. A fonte de dados ODBC est ligada a um banco de dados do
Microsoft Access. Em determinado momento resolvemos migrar do Microsoft Access para o
Microsoft SQL Server. Sem problemas. Basta alterar nossa fonte de dados ODBC para que a
mesma passe a referenciar o banco de dados no Microsoft SQL Server e pronto! A nossa aplicao
passa a utilizar a nova fonte de dados de maneira transparente, atravs do driver ODBC.
Na Figura 5.13, temos uma viso geral do acesso aos dados utilizando ODBC.
Aplicao Web

Gerenciador ODBC

Driver ODBC
SQL Server

Driver ODBC
Microsoft Access

Driver ODBC
Oracle

Figura 5.13: ODBC para acesso a dados.


Para que uma fonte ODBC possa ser utilizada a mesma precisa ser previamente criada,
utilizando-se o Gerenciador ODBC, o qual acessvel atravs das Ferramentas administrativas
do menu Programas. Agora aprenderemos a criar fontes de dados ODBC. Ao desenvolver o
aplicativo, o desenvolvedor far referncia a fonte ODBC criada. A ttulo de exemplo, iremos
criar duas fontes, uma para um banco de dados Microsoft Access 97 e outra para um banco
de dados Microsoft SQL Server 2000 Beta 2.

Criando uma Fonte ODBC Para um Banco de Dados do Microsoft Access 97


Vamos criar uma fonte para um banco de dados do Microsoft Access 97. Utilizaremos uma
base de exemplo que j vem com o Microsoft Access 97 nwind.mdb. No nosso exemplo esta
fonte estar localizada em C:\Meus documentos.

276

Captulo 5 Conectando Pginas ASP com Bancos de Dados

IMPORTANTE
Dependendo da verso do ODBC instalado em seu computador, as telas apresentadas podem
ser um pouco diferentes das aqui apresentadas.

Para criar uma fonte ODBC chamada nwind:


1. Abra o Gerenciador de fontes ODBC (Iniciar/Programas/Ferramentas administrativas/
Fontes da dados (ODBC).
2. Surge a janela indicada na Figura 5.14.

Figura 5.14: O Gerenciador de fontes ODBC.


3. Uma fonte de dados chamada de DSN Data Source Name, a qual pode ser de trs tipos:
User DSN
System DSN
File DSN
No nosso caso estaremos trabalhando, sempre, com System DSN.

277

Criando Sites Dinmicos com ASP 3.0

NOTA
Para maiores informaes sobre os diferentes tipos de DSN consulte o site http://
msdn.microsoft.com.
4. D um clique na guia System DSN.
5. Surge a janela indicada na Figura 5.15.

Figura 5.15: Criando uma fonte do tipo System DSN.


6. D um clique no boto Add, para criar uma nova fonte ODBC.
7. Surge uma janela perguntando qual o tipo de banco de dados que voc deseja acessar.
Selecione Drive do Microsoft Access (*.mdb), conforme indicado na Figura 5.16.

278

Captulo 5 Conectando Pginas ASP com Bancos de Dados

Figura 5.16: Selecionando o banco de dados a ser usado.


8. D um clique no boto Concluir. aberta a janela Configurar ODBC para Microsoft
Access, conforme indicado na Figura 5.17.

Figura 5.17: Definies para a fonte ODBC para o Microsoft Access.


9. Nesta janela devemos fornecer diversas informaes, tais como o nome para a fonte
ODBC, a localizao do arquivo .mdb, etc.
10. No campo Nome da fonte de dados, digite nwind.

279

Criando Sites Dinmicos com ASP 3.0

11. No campo Descrio digite Fonte de dados Access.


12. A janela Configurar ODBC para Microsoft Access deve estar conforme indicado na
Figura 5.18.

Figura 5.18: Definindo a fonte ODBC.


14. D um clique no boto Selecionar. Utilizamos este boto para selecionar o arquivo
.mdb que ser relacionado fonte ODBC que est sendo criada.
15. Surge a janela Selecionar banco de dados.
16. Navegue at a pasta onde est o arquivo .mdb. No nosso exemplo vamos navegar at a
pasta Meus documentos do drive C:, e dentro da pasta Meus documentos vou selecionar
nwind.mdb, conforme indicado na Figura 5.19.
17. D um clique no boto OK e voc estar de volta janela Configurar ODBC para
Microsoft Access.
18. D um clique no boto OK para fechar esta janela.
19. Voc estar de volta janela do Gerenciador de fontes ODBC, com a fonte ODBC nwind
j criada, conforme indicado pela Figura 5.20.

280

Captulo 5 Conectando Pginas ASP com Bancos de Dados

Figura 5.19: Selecionando o arquivo C:\Meus documentos\nwind.mdb.

Figura 5.20: Fonte ODBC nwind j criada.

NOTA
Estaremos utilizando esta fonte ODBC em diversos exemplos deste livro.

281

Criando Sites Dinmicos com ASP 3.0

Criando uma Fonte ODBC Para um Banco de Dados do Microsoft SQL Server 2000
Vamos criar uma fonte para um banco de dados do Microsoft SQL Server 2000. Utilizaremos
o banco de dados de exemplo que j vem com o Microsoft SQL Server 2000 pubs. No nosso
exemplo, o nome do servidor SQL SERVIDOR. Caso voc esteja trabalhando em um servidor
com um nome diferente, utilize o nome do servidor no qual voc est trabalhando.

IMPORTANTE
Dependendo da verso do ODBC instalado em seu computador, as telas apresentadas podem
ser um pouco diferentes das aqui apresentadas.

Para criar uma fonte ODBC chamada sqlpubs:


1. Abra o Gerenciador de fontes ODBC (Iniciar/Programas/Ferramentas administrativas/
Fontes da dados (ODBC).
2. D um clique na guia System DSN.
3. D um clique no boto Add para criar uma nova fonte ODBC.
4. Surge uma janela perguntando qual o tipo de banco de dados que voc deseja acessar.
Selecione SQL Server, conforme indicado na Figura 5.21.

Figura 5.21: Definindo uma fonte para o SQL Server.

282

Captulo 5 Conectando Pginas ASP com Bancos de Dados

5. D um clique no boto Concluir. aberta a janela Create a New Data Source to SQL
Server, conforme indicado na Figura 5.22.

Figura 5.22: Definies para a fonte ODBC para o SQL Server.


6. Nesta janela devemos fornecer diversas informaes, tais como o nome para a fonte
ODBC, o nome do servidor, etc.
7. No campo Name digite sqlpubs.
8. No campo Description digite Fonte de dados SQL Server.
9. Na lista Server, selecione o nome do Servidor SQL a ser utilizado.
10. A janela Create a New Data Source to SQL Server deve estar conforme indicado na
Figura 5.23.
11. D um clique no boto Avanar para ir para a prxima etapa.
12. Aceite as opes selecionadas e d um clique no boto Avanar, indo para a terceira etapa.
13. Surge a janela indicada na Figura 5.24.
14. Em um servidor SQL Server podem existir diversos bancos de dados. Neste caso
precisamos definir a qual banco de dados a nossa fonte ODBC ir conectar-se.
15. Marque a opo Change the default database to.
16. Na lista abaixo desta opo selecione pubs, conforme indicado na Figura 5.25.

283

Criando Sites Dinmicos com ASP 3.0

Figura 5.23: Definies para a fonte ODBC.

Figura 5.24: Definindo a qual banco de dados a fonte ODBC ir conectar-se.

284

Captulo 5 Conectando Pginas ASP com Bancos de Dados

Figura 5.25: Fazendo conexo com o Banco de dados pubs.


17. D um clique no boto Avanar para ir para a ltima etapa.
18. Nesta etapa podemos definir diversas opes, tais como:
O idioma para as mensagens do SQL Server.
Se devemos ou no utilizar criptografia dos dados para aumentar a segurana.
Se devemos utilizar as configuraes regionais tais como hora, data e formato para
nmeros em geral e para valores monetrios.
19. Selecione as opes conforme indicado na Figura 5.26.

Figura 5.26: Finalizando a configurao da fonte ODBC.

285

Criando Sites Dinmicos com ASP 3.0

20. D um clique no boto Concluir para finalizar a criao da fonte ODBC.


21. Surge a janela ODBC Microsoft SQL Server Setup, a qual informa as diversas opes
selecionadas, conforme indicado na Figura 5.27.

Figura 5.27: Resumo das opes selecionadas para a fonte ODBC.


22. Nesta janela podemos clicar no boto Test Data Source..., para verificar se a conexo
com o banco de dados est OK.
23. D um clique neste boto.
24. Deve surgir uma janela indicando que o teste foi realizado com sucesso, conforme
indicado na Figura 5.28.
25. D um clique em OK para fechar a janela de teste.
26. D um clique em OK para fechar a janela de resumo.
27. Voc estar de volta janela do Gerenciador de fontes ODBC, com a fonte ODBC sqlpubs
j criada, conforme indicado pela Figura 5.29.
28. D um clique em OK para fechar o Gerenciador de fontes ODBC.

NOTA
Estaremos utilizando esta fonte ODBC em diversos exemplos deste livro.

286

Captulo 5 Conectando Pginas ASP com Bancos de Dados

Figura 5.28: Teste indicando que a conexo est OK.

Figura 5.29: Fonte ODBC sqlpubs j criada.

287

Criando Sites Dinmicos com ASP 3.0

Agora que j sabemos um pouco sobre ODBC vamos falar sobre OLE DB.

Um Pouco Sobre OLE DB e ADO


OLE DB uma nova tecnologia, baseada na tecnologia COM da Microsoft, para acesso a bases
de dados. Uma das grandes novidades trazidas pela tecnologia OLE DB a possibilidade de
acesso a bases no estruturadas, como por exemplo arquivos de mensagens de correio
eletrnico, arquivos de texto, e bancos de dados de documentos como o Lotus Notes ou o
Microsoft Exchange. Alm disso, a tecnologia OLE DB foi construda tendo a performance
como uma de suas diretivas.
Diferente do ODBC, no existe um driver OLE DB para cada fonte de dado. Na tecnologia
OLE DB, o conector para uma fonte de dados chamado de OLE DB Provider. Por exemplo,
existe um OLE DB Provider para Microsoft Access, um para Microsoft SQL Server, um OLE
DB Provider para mensagens de correio do Microsoft Exchange, um para bancos de dados
Oracle e assim por diante.
OLE DB a tecnologia preferencial, segundo a Microsoft, para acesso a dados estruturados ou
no. Em diversos documentos e manuais oficiais da Microsoft, existem referncias a utilizao
de OLE DB como a tecnologia a ser utilizada para acesso a qualquer fonte de dados.
Muitos usurios pensam que OLE DB veio para substituir completamente o padro ODBC. Na
verdade, isto pode at acontecer daqui a algum tempo. Porm, na prtica, existe um OLE DB
Provider para ODBC. Com isso, utilizando OLE DB podemos ter acesso a qualquer fonte de
dados ODBC. O ODBC funciona como se fosse um subconjunto de OLE DB, uma vez que OLE
DB fornece acesso a todas as fontes de dados ODBC (utilizando o OLE DP Provider para ODBC),
mais as fontes de dados no estruturadas para as quais existem OLE DB Provider disponveis.
Na Figura 5.30, temos uma viso geral do acesso a fontes de dados, utilizando OLE DB.
Veja que possvel o acesso a qualquer fonte de dados ODBC. Tambm possvel o acesso
sem a utilizao de ODBC, utilizando-se o OLE DB Provider adequado para cada situao.
Quanto estamos utilizando OLE DB temos a figura da fonte de dados e do consumidor de
dados. Um OLE DB Provider a fonte de dados, j o aplicativo o consumidor de dados. No
prximo item criaremos pginas ASP que acessam dados de um arquivo do Microsoft Access.
Com isso, nossas pginas ASP atuaro como consumidores de dados.
Porm, OLE DB, na verdade, uma API (Application Programming Interface) baseada na
tecnologia COM da Microsoft. Utilizar diretamente uma API algo que requer conhecimentos
avanados de programao, tais como o domnio das linguagens C e C++. Embora seja factvel
utilizar diretamente OLE DB, muito pouco produtivo, alm de exigir profissionais com
conhecimentos avanados de programao.

288

Captulo 5 Conectando Pginas ASP com Bancos de Dados

OLE DB

OLE DB Providers
Jet
Provider

Jet
Provider

Exchange
Server
Provider

Drivers ODBC

Microsoft
Access

Microsoft
SQL
Server

Gerenciador ODBC

Driver ODBC
SQL Server

Driver ODBC
Microsoft Access

Driver ODBC
Oracle

Microsoft
SQL
Server

Microsoft
Access

ORACLE

Microsoft
Exchange
Server

Fontes de dados: Estruturadas e No estruturadas.

Figura 5.30: Acessando fontes de dados com OLE DB.


Para solucionar o problema de utilizao direta de OLE DB foi criada uma camada adicional
de programao, a qual conhecida como ADO ActiveX Data Objects. Com a utilizao de
ADO temos acesso a uma srie de objetos e seus mtodos. A utilizao dos objetos ADO
bem mais simples do que a utilizao direta da API OLE DB. Com a utilizao de ADO, a
produtividade do desenvolvedor aumenta bastante, pois seus objetos so de fcil aprendizagem
e utilizao, principalmente para quem j programa em Visual Basic. Quando utilizamos um
objeto ADO, o prprio objeto sabe como converter a chamada feita em ADO, para comandos
que a API OLE DB entende e capaz de executar.
Neste livro, sempre que formos fazer acesso a bases de dados, estaremos utilizando objetos
ADO. Por exemplo, quando estabelecemos uma conexo com um banco de dados, estaremos
utilizando o objeto Connection; para extrair informaes de uma tabela estaremos utilizando
um objeto chamado Recordset e assim por diante.
Na Figura 5.31, representamos o acesso a dados atravs de ADO, o qual se comunica com a
API OLE DB.

IMPORTANTE
Com isso, terminamos nosso estudo sobre os aspectos tericos necessrios ao entendimento da
conexo de pginas ASP com bancos de dados. A partir do prximo item estaremos aprendendo,
na prtica, a escrever pginas ASP que fazem conexo com banco de dados. Grande parte do
nosso trabalho ser estudar os objetos, mtodos, propriedades e eventos da tecnologia ADO.
Nunca demais salientar que ADO a forma de acesso a dados indicada pela Microsoft. No

289

Criando Sites Dinmicos com ASP 3.0

site msdn.microsoft.com existem diversos documentos que ensinam como migrar de outras
tecnologias mais antigas (como DAO, por exemplo), para a tecnologia ADO/OLE DB. Alm
disso, a Microsoft vem anunciando que as tecnologias mais antigas (como DAO e RDO) sero
descontinuadas, isto , sero substitudas por ADO.

ADO

OLE DB

OLE DB Providers
Jet
Provider

Jet
Provider

Exchange
Server
Provider

Drivers ODBC

Microsoft
Access

Microsoft
SQL
Server

Microsoft
Exchange
Server

Gerenciador ODBC

Driver ODBC
SQL Server

Driver ODBC
Microsoft Access

Driver ODBC
Oracle

Microsoft
SQL
Server

Microsoft
Access

ORACLE

Fontes de dados: Estruturadas e No estruturadas.

Figura 5.31: Acessando fontes de dados com ADO/OLE DB.


Outro ponto importante a salientar que ADO no somente para uso em aplicaes Web.
Podemos utilizar ADO para qualquer aplicao, como as tradicionais aplicaes Cliente/
Servidor de duas camadas desenvolvidas em Visual Basic ou qualquer outra linguagem com
suporte a ADO/OLE DB.

Uma Viso Geral do Modelo de Objetos ADO


Neste item ser apresentada uma viso geral do Modelo de Objetos do ADO. Nos demais itens
deste captulo e do prximo captulo iremos aprender a utilizar diversos objetos deste modelo,
medida que forem apresentados exemplos prticos. Na Figura 5.32 temos uma viso geral
dos principais objetos do Modelo de Objetos ADO.

290

Captulo 5 Conectando Pginas ASP com Bancos de Dados

Connection
Errors

Error

Properties

Property

Parameters

Parameter

Properties

Property

Command

Recordset
Fields

Field

Properties

Property

Fields

Field

Record

Stream

Figura 5.32: O Modelo de Objetos ADO.


Abaixo uma descrio resumida dos principais objetos:
Connection: Este objeto utilizado para estabelecer uma conexo com uma fonte de
dados, seja atravs de um Driver ODBC ou de um OLE DB Provider. O primeiro passo
para acessar uma fonte de dados estabelecer uma conexo com esta fonte. Uma vez
estabelecida esta conexo, podemos utilizar outros objetos para extrair, alterar, inserir
dados ou qualquer outra operao que seja permitida pela fonte de dados. Quando
estabelecemos a conexo, tambm podemos passar informaes de autenticao, tais
como o nome do usurio e senha, de tal forma que seja dado acesso aos dados de
acordo com as permisses de cada usurio. Por exemplo, podem existir usurios que
devem ter permisso somente para leitura dos dados; j outros usurios podem
necessitar de permisso para leitura e alterao.
Um detalhe importante a ser salientado que a criao de uma conexo com um banco de
dados, atravs da utilizao do objeto Connection, no obrigatria. Podemos utilizar
diretamente os objetos Command, Recordset e Record, pois cada vez que utilizarmos um
destes objetos, uma conexo ser automaticamente criada. Porm, pode ser mais prtica a
criao explcita de uma conexo, principalmente em situaes em que muitos comandos
so executados contra a fonte de dados. Neste caso a criao de uma conexo, com a utilizao
do objeto Connection, pode melhorar o desempenho da aplicao Web.

291

Criando Sites Dinmicos com ASP 3.0

Command: Este objeto pode ser utilizado para executar um comando (uma instruo
SQL por exemplo) em uma fonte de dados. Podemos utilizar este objeto para efetuar
uma consulta em um banco de dados e retornar o resultado em um objeto Recordset.
Tambm podemos utilizar este objeto para alterar a estrutura de um banco de dados,
desde que tenhamos permisso para isso.
Recordset: Este objeto representa um conjunto de registros obtidos a partir de um
banco de dados. Este conjunto de registros pode, por exemplo, ter sido retornado devido
a uma operao do objeto Command. Todo objeto Recordset formado por linhas e
colunas, como se fosse uma tabela de um banco de dados.
Record: Este objeto representa uma nica linha (ou seja, um nico registro) de um
objeto Recordset.
Stream: Este objeto utilizado para manipular dados no estruturados, normalmente
organizados em formas de rvores hierrquicas. Pode ser utilizado para acessar
informaes de um sistema de arquivos ou um sistema de correio eletrnico.
Cada um destes objetos apresenta uma srie de mtodos, propriedades, eventos e colees.
Iniciaremos o estudo de cada objeto com uma apresentao rpida de cada um destes
elementos. medida que formos utilizando estes mtodos, propriedades, eventos e colees,
apresentaremos maiores detalhes sobre cada um deles.

IMPORTANTE
Na maioria das situaes utilizamos os objetos Connection e Recordset juntos em uma mesma
pgina. No prximo item iremos estudar o objeto Connection, porm j fazendo uso do objeto
Recordset nos exemplos prticos. No item a seguir ser apresentado apenas o bsico sobre o
objeto Recordset. Na parte final do captulo e nos prximos captulos estudaremos maiores
detalhes sobre o objeto Recordset.

O Objeto Connection
Conforme descrevemos anteriormente, o primeiro passo para conectar uma pgina ASP com
uma fonte de dados, estabelecer uma conexo com a fonte de dados. Para estabelecermos
esta conexo utilizamos o objeto Connection.
Ao estabelecermos uma conexo estamos informando para a nossa pgina ASP uma srie de
detalhes que a mesma necessita para poder acessar os dados. Utilizando o objeto Connection
podemos definir qual o OLE DB Provider a ser utilizado, qual a fonte de dados e demais
informaes, tais como nome de usurio e senha, caso sejam necessrios.
Na Tabela 5.2 temos uma breve descrio dos principais mtodos do objeto Connection.

292

Captulo 5 Conectando Pginas ASP com Bancos de Dados

Tabela 5.2 Os principais mtodos do objeto Connection.


Mtodo

Descrio

BeginTrans

Inicia uma nova transao. Falaremos mais sobre Transaes


no Captulo 12.

Cancel

Cancela a execuo assncrona dos comandos Execute e


Open.

Close

Fecha uma conexo que esteja aberta e quaisquer objetos


que sejam dependentes desta conexo.

CommitTrans

Salva as alteraes que foram feitas e encerra a transao


corrente.

Execute

Executa um consulta, um comando ou uma instruo SQL


e retorna um objeto do tipo Recordset. Pode, por exemplo,
ser utilizado para obter uma listagem de vendas de
um banco de dados, ou qualquer outra listagem podendo
ser obtida a partir de uma instruo SQL.

Open

Abre uma conexo com uma fonte de dados. Feito isso,


comandos podem ser executados atravs desta conexo.

OpenSchema

Utilizado para obter informao sobre a estrutura de uma


fonte de dados, tais como as definies de tabelas e
relacionamentos de um banco de dados relacional.

RoolbackTrans

Cancela quaisquer alteraes que tenham sido feitas pela


transao e finaliza a transao.

Na Tabela 5.3 temos uma breve descrio das principais propriedades do objeto Connection.
Tabela 5.3 As principais propriedades do objeto Connection.
Propriedade

Descrio

Attributes

Indica uma ou mais caractersticas de um objeto


Connection. Retorna um valor Long.

CommandTimeout

Indica o tempo mximo de execuo de um comando.


Caso o comando demore mais do que o tempo definido
nesta propriedade, ser gerado um erro. O valor padro
30 segundos.

293

Criando Sites Dinmicos com ASP 3.0

Propriedade

Descrio

ConnectionString

Contm todas as informaes utilizadas para


estabelecer a conexo com a fonte de dados.

ConnectionTimeout

Indica o tempo mximo para tentativa de estabelecer


uma conexo. Caso a conexo no seja estabelecida
em um tempo menor ou igual ao definido em
ConnectionTimeout, a conexo ser encerrada e um
erro gerado. Por padro este valor definido em 15
segundos.

CursorLocation

Define ou retorna a localizao do cursor, se no


servidor ou no cliente. Iremos falar um pouco mais
sobre cursores no prximo captulo.

DefaultDatabase

Indica qual o banco de dados padro para um objeto


Connection. Por exemplo, quando estamos conectando
com um servidor SQL precisamos definir qual a base
de dados que ser acessada. Fazemos isso definindo
qual o banco de dados padro, atravs da utilizao
da propriedade DefaultDatabase.

Errors

Contm todos os objetos Error criados em resposta a


falhas envolvendo o provedor de dados. Falaremos
mais sobre o objeto Error no Captulo 11.

IsolationLevel

Define o nvel de isolamento das transaes para um


objeto Connection. Voltaremos a este assunto no
Captulo 12.

Mode

Indica as permisses disponveis para modificao de


dados atravs de uma conexo.

Properties

Contm todos os objetos Property de um determinado


objeto Connection.

Provider

Retorna o nome do Provedor para uma determinada


conexo.

State

Indica se a conexo est aberta ou fechada.

Version

Retorna a verso da tecnologia ADO. Por exemplo,


2.0 ou 2.5.

294

Captulo 5 Conectando Pginas ASP com Bancos de Dados

Na Tabela 5.4 temos uma breve descrio dos principais eventos do objeto Connection.
Tabela 5.4 Os principais eventos do objeto Connection.
Evento

Descrio

BeginTransComplete

Ocorre aps o trmino de uma operao


BeginTrans.

CommitTransComplete

Ocorre aps o trmino de uma operao


CommitTrans.

ConnectComplete

Ocorre aps o incio de uma conexo.

Disconnect

Ocorre aps o trmino de uma conexo.

ExecuteComplete

Ocorre aps o trmino da execuo de um comando.

InfoMessage

Ocorre sempre que a operao ConnectionEvent


ocorre com sucesso e uma informao adicional
retornada pelo provedor de dados.

RollBackTransComplete

Ocorre aps a execuo da operao RollbackTrans.

WillConnect

Ocorre antes do incio de uma conexo.

WillExecute

Ocorre antes que um comando pendente seja


executado em uma determinada conexo.

O Primeiro Exemplo
Neste item vamos utilizar o conhecimento que j temos para criar uma pgina ASP que conecta
o banco de dados Nwind e mostra uma listagem de clientes com as seguintes informaes:
Cdigo do Cliente (CodigoDoCliente)
Cargo (Cargo)
Endereo (Endereco)
Telefone (Fone)

NOTA
O nome entre parnteses o nome do campo na tabela clientes do banco de dados Nwind.
Caso voc esteja utilizando outro banco de dados ou outra tabela, utilize os nomes de campo
adequados. O banco de dados Nwind um banco de exemplo que instalado juntamente com
o Microsoft Access.

295

Criando Sites Dinmicos com ASP 3.0

Na Figura 5.33 podemos ver a estrutura da tabela Clientes que est sendo utilizada no nosso
exemplo.

Figura 5.33: A tabela Clientes do banco de dados Nwind.


Pode acontecer que a estrutura do Nwind esteja em ingls. Os nomes dos campos aparecem
com CustomerID, City, Address e assim por diante. Utilize os nomes conforme os mesmos se
apresentam na sua cpia do banco de dados Nwind.mdb.
Na Listagem 5.1 apresentamos uma pgina ASP que faz a conexo com o banco de dados Nwind
e exibe uma listagem de clientes. Logo aps explicaremos cada um dos comandos utilizados.
Listagem 5.1 Uma pgina ASP que conecta com o banco de dados Nwind clientes.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

<TITLE>Listagem de Clientes</TITLE>

</HEAD>

<BODY>

<H1>

<FONT color=navy>Clientes da Empresa ABC Ltda.</FONT>

</H1>

10

<%

11

O Primeiro passo criar a conexo com o banco de dados

12

Para isto crio um objeto do tipo Connection

296

Captulo 5 Conectando Pginas ASP com Bancos de Dados

13
14

Cria um objeto do tipo ADODB.Connection


Set conn = Server.CreateObject(ADODB.Connection)

15

Agora abro uma conexo com a fonte ODBC nwind

16

criada anteriormente.

17

conn.Open nwind

18

O prximo passo criar uma instruo SQL

19

a qual utilizada para criar a listagem de clientes.

20

inst_sql=SELECT Clientes.CodigoCliente, Clientes.Cargo, Clientes.Endereco,


Clientes.Fone FROM Clientes

21

Esta instruo SQL retorna os campos CodigoCliente, Cargo,

22

Endereco e Fone, da tabela Clientes.

23

Agora criamos um objeto RecordSet.

24

Este objeto ir executar a instruo SQL e

25

receber o resultado da consulta.

26

Set Clientes = Server.CreateObject(ADODB.Recordset)

27

Agora executamos a instruo SQL

28

retornando os registros da tabela Clientes.

29

Clientes.Open inst_sql, conn, 3, 3

30

Os dois ltimos parmetros sero discutidos

31

no prximo captulo.

32

Neste ponto j tenho todos os registros retornados

33

pela instruo SQL. Estes registros esto armazenados

34

no objeto Clientes, que um objeto do tipo Recordset.

35

Agora passo a montar a pgina que ser retornada para o

36

navegador do cliente. Vamos montar uma tabela com o

37

resultado da consulta.

38

%>

297

Criando Sites Dinmicos com ASP 3.0

39

<P>

40

<HR>

41

<TABLE bgColor=gray border=1 borderColor=navy cellPadding=1 cellSpacing=1


width=100%>

42

<TR>

43

<TD align=middle bgColor=gray>Cdigo</TD>

44

<TD align=middle bgColor=gray>Cargo</TD>

45

<TD align=middle bgColor=gray>Endereo</TD>

46

<TD align=middle bgColor=gray>Fone</TD>

47

</TR>

48

<%

49

Inicio um Loop para percorrer todos os registros

50

do RecordSet Clientes, exibindo um registro em

51

cada linha da tabela.

52

Do Until Clientes.eof %>

53

<TR>

54

<TD align=middle bgColor=gray><%=Clientes.Fields(CodigoCliente)%></TD>

55

<TD align=middle bgColor=gray><%=Clientes.Fields(Cargo)%></TD>

56

<TD align=middle bgColor=gray><%=Clientes.Fields(Endereco)%></TD>

57

<TD align=middle bgColor=gray><%=Clientes.Fields(Fone)%></TD>

58

</TR>

59

<%

60

Clientes.MoveNext

61

Loop %>

62

</TABLE>

63

</P>

64

<HR>

65

</BODY>

66

</HTML>

298

Captulo 5 Conectando Pginas ASP com Bancos de Dados

Ao carregar esta pgina no Internet Explorer, o usurio recebe uma listagem conforme indicado
na Figura 5.34.

Figura 5.34: A listagem de clientes do banco de dados Nwind.


Antes de comentarmos esta listagem gostaria de salientar a natureza dinmica das pginas
criadas com ASP. Neste exemplo, qualquer alterao que seja feita na tabela Clientes, ser
exibida na listagem de clientes, na prxima vez que o usurio carregar a pgina Clientes.asp.
Isto acontece porque a listagem montada, a partir do banco de dados, cada vez que a pgina
carregada. Com isso ao carregar a pgina, todos os dados existentes na tabela Clientes sero
exibidos. Por isso que dizemos que a pgina criada dinamicamente, ou seja, cada vez que a
pgina solicitada, o cdigo ASP estabelece a conexo com o banco de dados, solicita a
listagem de clientes e apresenta a listagem no formato de uma tabela, conforme definimos.
Agora vamos s explicaes a respeito do cdigo da Listagem 5.1. Embora existam diversos
comentrios na prpria listagem, cabe aqui alguns esclarecimentos. Vamos detalhar diversos
trechos de cdigo desta listagem, pois estaremos utilizando estas tcnicas ao longo do livro.

299

Criando Sites Dinmicos com ASP 3.0

Trecho 1: Considere o seguinte trecho de cdigo:


14

Set conn = Server.CreateObject(ADODB.Connection)

Esta linha cria um objeto Connection chamado conn. Poderamos utilizar qualquer nome
vlido para este objeto. Um ponto importante a salientar a utilizao da instruo Set.
Sempre que formos criar um objeto (Connection, Recordset, etc.), devemos usar a instruo
Set. Se no utilizarmos esta instruo na criao de objetos, obteremos um erro na hora de
carregar a pgina.
Tambm importante observarmos o seguinte:
Server.CreateObject(ADODB.Connection)

Este cdigo cria um objeto no servidor, que do tipo ADODB.Connection, ou seja, uma conexo
ADO para banco de dados.
Aps a execuo deste comando, um objeto Connection foi criado, porm o mesmo ainda no
faz referncia a nenhum banco de dados especfico.
Trecho 2: Considere o seguinte trecho de cdigo:
15

Agora abro uma conexo com a fonte ODBC nwind

16

criada anteriormente.

17

conn.Open nwind

Na linha 17 estou associando a conexo conn com uma fonte ODBC nwind. Lembrando que
esta fonte ODBC foi criada previamente. Caso voc esteja utilizando uma fonte ODBC diferente,
utilize o nome adequado. Esta associao feita atravs do mtodo Open, do objeto Connection.
A partir deste momento, a minha conexo conn est associada ao banco de dados Nwind,
conforme definido pela fonte ODBC nwind.
Uma vez estabelecida a conexo hora de recuperar dados, isto , registros, a partir do banco
de dados. Isto feito pelo seguinte trecho de cdigo:
Trecho 3: Considere o seguinte trecho de cdigo.
20

inst_sql=SELECT Clientes.CodigoCliente, Clientes.Cargo,


Clientes.Endereco, Clientes.Fone FROM Clientes

21

Esta instruo SQL retorna os campos CodigoCliente, Cargo,

22

Endereco e Fone, da tabela Clientes.

23

Agora criamos um objeto RecordSet.

24

Este objeto ir executar a instruo SQL e

25

receber o resultado da consulta.

300

Captulo 5 Conectando Pginas ASP com Bancos de Dados

26

Set Clientes = Server.CreateObject(ADODB.Recordset)

27

Agora executamos a instruo SQL

28

retornando os registros da tabela Clientes.

29

Clientes.Open inst_sql, conn, 3, 3

30

Os dois ltimos parmetros sero discutidos

31

no prximo captulo.

Na linha 20, criamos uma varivel chamada inst_sql, a qual contm a instruo SQL que ser
executada no banco de dados Nwind. Observe que uma instruo SQL bastante simples, a
qual, basicamente, seleciona os campos CodigoCliente, Cargo, Endereco e Fone da tabela
Clientes do banco de dados Nwind.
Uma vez definida a instruo SQL, partimos para a criao de um objeto RecordSet. A criao
do objeto RecordSet, chamado Clientes, feita na linha 26. Poderamos ter escolhido qualquer
nome para este objeto. Observe a utilizao da instruo Set. Como estamos criando um
objeto (do tipo RecordSet), devemos utilizar a instruo Set.
Agora devemos executar a instruo SQL para que o objeto Recordset contenha os registros
retornados pela instruo. Isto feito pelo seguinte cdigo:
29

Clientes.Open inst_sql, conn, 3, 3

Neste caso utilizamos o mtodo Open do objeto RecordSet Clientes. O primeiro parmetro
a instruo SQL a ser utilizada inst_sql. O segundo parmetro o nome da conexo a ser
utilizada conn. O terceiro e quatro parmetros definem comportamentos para o objeto
RecordSet, tais como se possvel mover-se para frente e para trs, avanando e voltando
pelos registros, se os registros retornados so apenas para leitura ou para leitura e alteraes
e assim por diante. Estudaremos estas opes no prximo captulo.
Bem, neste momento j temos um objeto RecordSet chamado Clientes, o qual possui uma
srie de registros obtidos a partir da tabela Clientes do banco de dados Nwind. Cada registro
possui quatro campos, conforme foi definido pela nossa instruo SQL que somente retorna
os campos CodigoCliente, Cargo, Endereco e Fone.
Trecho 4: Considere o seguinte trecho de cdigo.
41

<TABLE bgColor=gray border=1 borderColor=navy cellPadding=1


cellSpacing=1
width=100%>

42

<TR>

43

<TD align=middle bgColor=gray>Cdigo</TD>

301

Criando Sites Dinmicos com ASP 3.0

44

<TD align=middle bgColor=gray>Cargo</TD>

45

<TD align=middle bgColor=gray>Endereo</TD>

46

<TD align=middle bgColor=gray>Fone</TD>

47

</TR>

52

Do Until Clientes.eof %>

53

<TR>

54

<TD align=middle bgColor=gray><%=Clientes.Fields


(CodigoCliente)%></TD>

55

<TD align=middle bgColor=gray><%=Clientes.Fields(Cargo)%></TD>

56
TD>

<TD align=middle bgColor=gray><%=Clientes.Fields(Endereco)%></

57

<TD align=middle bgColor=gray><%=Clientes.Fields(Fone)%></TD>

58

</TR>

59

<%

60

Clientes.MoveNext

61

Loop %>

62

</TABLE>

Uma vez que o RecordSet Clientes foi criado com sucesso, hora de criarmos uma tabela que
exibe os dados do objeto RecordSet. Comeamos criando a primeira linha da tabela, a qual ir
conter o ttulo das colunas. Isto feito pelo seguinte cdigo:
41

<TABLE bgColor=gray border=1 borderColor=navy cellPadding=1 cellSpacing=1


width=100%>

42

<TR>

43

<TD align=middle bgColor=gray>Cdigo</TD>

44

<TD align=middle bgColor=gray>Cargo</TD>

45

<TD align=middle bgColor=gray>Endereo</TD>

46
47

<TD align=middle bgColor=gray>Fone</TD>


</TR>

Observe que para criar o cabealho da tabela, utilizamos cdigo HTML puro. Veja que estamos
criando uma tabela com quatro colunas. Vamos exibir um registro por linha, como cada registro
possui quatro campos, precisamos de uma tabela com quatro colunas. Esta tabela ter tantas
linhas quantos forem os registros do objeto Clientes.
A construo do corpo da tabela feita com o seguinte trecho de cdigo:
52
53
54

Do Until Clientes.eof %>


<TR>
<TD align=middle bgColor=gray><%=Clientes.Fields(CodigoCliente)%></TD>

302

Captulo 5 Conectando Pginas ASP com Bancos de Dados

55

<TD align=middle bgColor=gray><%=Clientes.Fields(Cargo)%></TD>

56

<TD align=middle bgColor=gray><%=Clientes.Fields(Endereco)%></TD>

57
58

<TD align=middle bgColor=gray><%=Clientes.Fields(Fone)%></TD>


</TR>

59

<%

60

Clientes.MoveNext

61

Loop %>

62

</TABLE>

Na linha 52, iniciamos um lao Do Until Condio... Loop. Como condio utilizamos a propriedade
Eof do objeto Clientes. O lao continua sendo executado at que a condio Clientes.eof se torne
Verdadeira. Esta condio somente ir tornar-se Verdadeira quando o indicador de registro j
estiver alm do ltimo registro. Com isso, o lao somente ser encerrado depois que tivermos
percorrido todos os registros do objeto Clientes, que exatamente o que queremos.
Para cada registro criada uma nova linha na tabela. Isto feito pelo seguinte trecho de cdigo:
53

<TR>

54

<TD align=middle bgColor=gray><%=Clientes.Fields(CodigoCliente)%></TD>

55

<TD align=middle bgColor=gray><%=Clientes.Fields(Cargo)%></TD>

56

<TD align=middle bgColor=gray><%=Clientes.Fields(Endereco)%></TD>

57
58

<TD align=middle bgColor=gray><%=Clientes.Fields(Fone)%></TD>


</TR>

Observe o seguinte fragmento de cdigo:


<%=Clientes.Fields(CodigoCliente)%>

Este fragmento retorna o valor do campo CodigoCliente do registro atual do Recordset Clientes.
Com isso vamos preenchendo cada coluna com os respectivos valores. A primeira coluna com o
campo CodigoCliente, a segunda com o campo Cargo, e assim por diante. Neste caso, utilizamos a
coleo Fields do RecordSet Clientes, a qual nos d acesso aos campos individuais de cada registro.
As linhas seguintes so de grande importncia:
59

<%

60

Clientes.MoveNext

61

Loop %>

62

</TABLE>

Se no colocssemos a linha 60, esta pgina ASP entraria em Loop infinito e somente o primeiro
registro seria exibido repetidamente, at congelar a pgina. Quando criamos um objeto RecordSet,
por padro, o indicador de registro posicionado no primeiro registro. Utilizamos o mtodo
MoveNext para mover o indicador para o prximo registro. Com isso, a cada passagem do lao Do

303

Criando Sites Dinmicos com ASP 3.0

Until, o indicador posicionado no prximo registro, at o momento em que todos os registros


foram percorridos. Se no houvesse esta linha, o indicador ficaria sempre no primeiro registro e
o lao nunca seria encerrado, pois a condio Clientes.eof seria sempre verdadeira, impedindo o
encerramento do lao. A linha 62 simplesmente a tag HTML de fechamento da tabela.

Modificando um Pouco o Nosso Exemplo


Vamos fazer uma pequena modificao no exemplo anterior, com o objetivo de salientar a
importncia de conhecermos a linguagem SQL. Conforme podemos observar pela Figura 5.34,
a listagem foi exibida na mesma ordem em que encontrava-se na tabela Clientes, isto ,
ordenada pelo campo CodigoCliente. Mas, vamos supor que fosse necessria uma listagem
ordenada pelo campo Cargo. Como faramos isso?
Muito simples, basta modificar a instruo SQL para incluir a ordenao. Isto feito,
modificando-se a linha 20 da Listagem 5.1. A nova instruo SQL, j ordenando pelo campo
Cargo ficaria assim:
20

inst_sql=SELECT Clientes.CodigoCliente, Clientes.Cargo, Clientes.Endereco,


Clientes.Fone FROM Clientes ORDER BY Clientes.Cargo

Feita esta alterao, ao acessarmos esta pgina no Internet Explorer, obteremos o resultado
indicado na Figura 5.35.

Figura 5.35: A listagem de clientes do banco de dados Nwind, ordenada pelo campo Cargo.

304

Captulo 5 Conectando Pginas ASP com Bancos de Dados

Observe que uma simples modificao na instruo SQL j produz os resultados desejados.
Tambm poderamos sugerir outra alterao. Vamos supor que foi solicitado que retirssemos
o campo Fone e inclussemos o campo Fax. Esta mudana tambm extremamente simples.
Bastaria alterar as seguintes linhas:
A instruo SQL na linha 20 ficaria assim:
20

inst_sql=SELECT Clientes.CodigoCliente, Clientes.Cargo,


Clientes.Endereco, Clientes.Fax FROM Clientes ORDER BY Clientes.Cargo

O cabealho da quarta coluna, na linha 46 ficaria assim:


46

<TD align=middle bgColor=gray>Fax</TD>

Na linha 57 basta trocar o nome do campo de Fone para Fax, conforme indicado:
57

<TD align=middle bgColor=gray><%=Clientes.Fields(Fax)%></TD>

Com estas trs alteraes, obteremos os resultados indicados na Figura 5.36.

Figura 5.36: A listagem de clientes do banco de dados Nwind, com o campo Fax.
Com a utilizao de SQL e ASP fica fcil fazer alteraes em nossas pginas.
A partir do prximo item estudaremos mais detalhes sobre o objeto Connection. Ainda neste
captulo, aprenderemos a criar um formulrio onde o usurio pode digitar um critrio e
pesquisar registros que atendam ao critrio digitado. Conforme descrito, continuaremos

305

Criando Sites Dinmicos com ASP 3.0

fazendo uso de objetos RecordSet, embora somente iremos estudar os mesmos, em detalhes,
no prximo captulo.

Um Pouco Mais Sobre o Objeto Connection


Neste item iremos testar algumas propriedades e mtodos do objeto Connection. importante
conhecermos estes mtodos e propriedades, pois o objeto Connection de fundamental
importncia para a conexo de pginas ASP com bancos de dados.
Considere o exemplo da Listagem 5.2.
Listagem 5.2 As propriedades do objeto Connection propconn.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

<TITLE>Propriedades do Objeto Connection!!</TITLE>

</HEAD>

<BODY>

<H3>

<FONT color=navy>Tabela com as propriedades do objeto Connection !!!

</FONT>

10

</H3>

11

<%

12

Cria um objeto do tipo ADODB.Connection

13

Set obj_conn=Server.CreateObject(ADODB.Connection)

14

Agora abro uma conexo com a fonte ODBC nwind

15

criada anteriormente.

16

obj_conn.Open nwind

17

O prximo passo criar uma instruo SQL

18

inst_sql=SELECT Clientes.CodigoCliente, Clientes.Cargo, Clientes.Endereco,


Clientes.Fax FROM Clientes ORDER BY Clientes.Cargo

306

Captulo 5 Conectando Pginas ASP com Bancos de Dados

19

Esta instruo SQL retorna os campos CodigoCliente, Cargo,

20

Endereco e Fax, da tabela Clientes.

21

Agora passamos a exibir as propriedades da

22

conexo obj_conn, em uma tabela de duas colunas.

23

Agora passo a montar a pgina que ser retornada para o

24

navegador do cliente. Vamos montar uma tabela com as

25

propriedades da conexo obj_conn

26

%>

27

<P>

28

<HR>

29

<TABLE bgColor=gray border=1 borderColor=navy cellPadding=1 cellSpacing=1


width=100%>

30

<TR>

31

<TD align=middle bgColor=gray>Propriedade</TD>

32

<TD align=middle bgColor=gray>Valor</TD>

33

</TR>

34

<TR>

35
36

<TD align=middle bgColor=gray>Attributes</TD>


<TD align=middle bgColor=gray><%=obj_conn.Attributes %></TD>

37

</TR>

38

<TR>

39
40

<TD align=middle bgColor=gray>CommandTimeout</TD>


<TD align=middle bgColor=gray><%=obj_conn.CommandTimeout %></TD>

41

</TR>

42

<TR>

43
44

<TD align=middle bgColor=gray>ConnectionString</TD>


<TD align=middle bgColor=gray><%=obj_conn.ConnectionString %></TD>

45

</TR>

46

<TR>

47

<TD align=middle bgColor=gray>ConnectinTimeout</TD>

48

<TD align=middle bgColor=gray><%=obj_conn.ConnectionTimeout %></TD>

49

</TR>

307

Criando Sites Dinmicos com ASP 3.0

50
51
52

<TR>
<TD align=middle bgColor=gray>CursorLocation</TD>
<TD align=middle bgColor=gray><%=obj_conn.CursorLocation %></TD>

53

</TR>

54

<TR>

55
56

<TD align=middle bgColor=gray>DefaultDatabase</TD>


<TD align=middle bgColor=gray><%=obj_conn.DefaultDatabase %></TD>

57

</TR>

58

<TR>

59
60

<TD align=middle bgColor=gray>IsolationLevel</TD>


<TD align=middle bgColor=gray><%=obj_conn.IsolationLevel %></TD>

61

</TR>

62

<TR>

63

<TD align=middle bgColor=gray>Provider</TD>

64

<TD align=middle bgColor=gray><%=obj_conn.Provider %></TD>

65

</TR>

66

<TR>

67
68

<TD align=middle bgColor=gray>State</TD>


<TD align=middle bgColor=gray><%=obj_conn.State %></TD>

69

</TR>

70

<TR>

71
72

<TD align=middle bgColor=gray>Version</TD>


<TD align=middle bgColor=gray><%=obj_conn.Version %></TD>

73

</TR>

74

</TABLE>

75

<% obj_conn.Close %>

76

</P>

77

<HR>

78

</BODY>

79

</HTML>

Ao acessarmos esta pgina, utilizando o Internet Explorer, obtemos o resultado indicado na


Figura 5.37.

308

Captulo 5 Conectando Pginas ASP com Bancos de Dados

Figura 5.37: As principais propriedades do objeto Connection.


Agora vamos detalhar alguns aspectos do cdigo da Listagem 5.2:
Estamos utilizando a mesma conexo utilizada no exemplo anterior, a qual utiliza a
fonte ODBC nwind.
Outro aspecto a ser salientado a forma como utilizamos as propriedades do objeto
Connection:
<%=obj_conn.CommandTimeout %>

Este trecho de cdigo ASP retorna o valor da propriedade CommandTimeout do objeto


obj_conn, o qual por sua vez um objeto Connection. A sintaxe para acessar as propriedades
a mesma para qualquer objeto, conforme indicado abaixo:
Nome_do_objeto.Nome_da_propriedade

Algumas propriedades so somente para leitura, isto , somente podemos verificar o


valor da propriedade. Como exemplo de propriedades que so apenas para leitura,
podemos citar as propriedades State e Version.
Outras propriedades so para leitura e escrita, isto , alm de acessarmos o valor atual
da propriedade, podemos alter-lo. A ttulo de exemplo, vamos supor que quisssemos

309

Criando Sites Dinmicos com ASP 3.0

alterar a propriedade ConnectionTimeout para 200 segundos, ao invs de manter o


padro que 15 segundos. Para isto, bastaria que utilizssemos o seguinte comando:
obj_conn.ConnectionTimeout = 200

NOTA
Cuidado! A propriedade ConnectionTimeout deve ser definida antes da conexo ser aberta com
a utilizao do mtodo Open, caso contrrio ser gerado um erro e a pgina no ser carregada.
Observe a propriedade ConnectionString, cujo valor para o nosso exemplo o seguinte:
Provider=MSDASQL.1;Data Source=nwind;Extended Properties=DSN=nwind;
DBQ=C:\MEUS DOCUMENTOS\NWIND.MDB;DriverId=281;
FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;

Estes valores so obtidos a partir da fonte ODBC nwind.

IMPORTANTE
Uma dvida que muitos usurios tm sobre a obrigatoriedade ou no de utilizarmos ODBC. A
utilizao de uma fonte ODBC no obrigatria, podemos montar uma conexo OLE DB diretamente
para qualquer fonte de dados. Basta, para isso, montar a String de conexo correta e pass-la
como um parmetro para o mtodo Open da conexo, que ir referenciar, diretamente, a fonte de
dados, sem a necessidade de uma fonte ODBC estar configurada.

Agora vamos fazer alguns comentrios sobre os valores padro de algumas propriedades.
A propriedade CursorLocation pode apresentar os valores indicados na Tabela 5.5.
Tabela 5.5 Valores da propriedade CursorLocation.
Valor

Descrio

No utiliza os servios de cursor. Falaremos mais sobre


cursores no prximo captulo.

Este o valor padro, conforme pode ser comprovado na


Figura 5.37. Com este valor so utilizados os servios de
cursor do provedor de dados, isto , no lado do Servidor.

Utiliza cursor no Cliente.

310

Captulo 5 Conectando Pginas ASP com Bancos de Dados

A propriedade State pode apresentar os valores indicados na Tabela 5.6.


Tabela 5.6 Valores da propriedade State.
Valor

Descrio

Indica que a conexo est fechada.

Indica que a conexo est aberta.

Indica que a conexo est sendo efetuada.

Indica que est sendo executado um comando atravs da


conexo.

Indica um resultado sendo retornado, como por exemplo,


os registros de um Recordset.

Por ltimo gostaria de salientar a utilizao do mtodo Close, para fechar a conexo,
conforme indicado no seguinte trecho de cdigo:
75

<% obj_conn.Close %>

Agora vamos explorar mais um exemplo de utilizao da conexo de pginas ASP com banco
de dados.

Criando um Formulrio Para Pesquisa


Vamos aprender mais alguns detalhes, atravs da utilizao de um exemplo bastante comum
no dia-a-dia.
Problema: Criar um formulrio, onde o usurio possa digitar o nmero do produto e clicar em
um boto Pesquisar. Ao clicar neste boto chamada uma pgina ASP (definida no atributo
action da tag FORM), que conecta com o banco de dados Nwind.mdb, atravs da fonte ODBC
nwind e exibe as informaes da tabela Produtos, para o produto cujo cdigo foi digitado no
formulrio de pesquisa. A pgina ASP deve ter um formulrio para o usurio digitar outro
cdigo e clicar em um boto Pesquisar para buscar as informaes de outro produto. Neste
caso, ao clicar no boto Pesquisar da pgina ASP, a prpria pgina ser chamada (atravs da
definio do atributo action da tag FORM). A pgina ASP far a pesquisa para o novo cdigo
digitado e exibir o produto correspondente.
Soluo: Para solucionar este problema, temos duas etapas:
A criao da pgina HTML com o formulrio de pesquisa.
A criao da pgina ASP para responder a requisio do formulrio de pesquisa.

311

Criando Sites Dinmicos com ASP 3.0

Criando a Pgina HTML com o Formulrio de Pesquisa


A criao desta pgina extremamente simples, utilizando os conhecimentos que foram
apresentados at o momento.
Na Listagem 5.3 temos o cdigo para criao do formulrio de pesquisa.
Listagem 5.3 O formulrio de pesquisa para o usurio digitar o cdigo do produto
produto.htm.
1

<HTML>

<HEAD>

<TITLE>Pesquisa de Produtos !!!</TITLE>

</HEAD>

<BODY>

<P><FONT color=navy>

<B>PESQUISA DE PRODUTOS.</B>

</FONT>

</P>

10

<FORM action=produto.asp method=post>

11

<P><FONT color=#000080><B>Digite o Cdigo (de 1 a 77):

12

<INPUT id=codigo maxLength=2 name=codigo size=5>

13

</B>

14

</FONT></P>

15

<P><B><FONT color=#000080>

16

<INPUT id=pesquisar name=pesquisar type=submit value=Clique aqui para pesquisar


o produto !! >

17

</FONT>

18

</B>

19

</P>

20

</FORM>

21

</BODY>

22

</HTML>

312

Captulo 5 Conectando Pginas ASP com Bancos de Dados

Ao visualizarmos este formulrio no Internet Explorer, obtemos o resultado indicado na


Figura 5.38.

Figura 5.38: O formulrio para pesquisa do produto.

NOTA
Estamos pedindo para que seja digitado um nmero entre 1 e 77 pois estes so os dados
existentes para produtos no banco de dados Nwind.mdb. Porm, vamos fazer um teste: iremos
digitar um cdigo 95 e mandar pesquisar. A nossa pgina ASP detectar que no existe nenhum
produto com este cdigo e avisar que nenhum produto foi encontrado para o cdigo digitado.

Criando a Pgina ASP Para Pesquisar no Banco de Dados


A criao desta pgina apresenta alguns elementos novos, ainda no apresentados at o momento.
Na Listagem 5.4 temos o cdigo para criao da pgina ASP. Aps a Listagem apresentaremos
os esclarecimentos necessrios.
Listagem 5.4 A pgina ASP para pesquisar no banco de dados produto.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

<TITLE>Pesquisa de Produto !!</TITLE>

</HEAD>

313

Criando Sites Dinmicos com ASP 3.0

<BODY>

<H2>

<FONT color=navy>Resultado para a Pesquisa.</FONT>

</H2>

10

<P><FONT color=navy>

11

<B>PESQUISA DE PRODUTOS.</B>

12

</FONT>

13

</P>

14

<FORM action=produto.asp method=post id=form1 name=form1>

15

<P><FONT color=#000080><B>Digite o Cdigo (de 1 a 77):

16

<INPUT id=codigo maxLength=2 name=codigo size=5>

17

</B>

18

</FONT></P>

19

<P><B><FONT color=#000080>

20

<INPUT id=pesquisar name=pesquisar type=submit value=Clique aqui para pesquisar


o produto !! >

21

</FONT>

22

</B>

23

</P>

24

</FORM>

25

<%

26

O primeiro passo criar a conexo com o banco de dados

27

Para isto crio um objeto do tipo Connection

28

Cria um objeto do tipo ADODB.Connection

29

Set conn=Server.CreateObject(ADODB.Connection)

30

Agora abro uma conexo com a fonte ODBC nwind

31

criada anteriormente.

32

conn.Open nwind

33

O prximo passo criar uma instruo SQL

34

sqlbuscaproduto =SELECT * FROM Produtos where ProductID= &


Request.Form(codigo)

35

Esta instruo SQL retorna o produto cujo cdigo

314

Captulo 5 Conectando Pginas ASP com Bancos de Dados

36

igual ao cdigo digitado no formulrio de pesquisa.

37

Agora criamos um objeto RecordSet.

38

Este objeto ir executar a instruo SQL e

39

receber o resultado da consulta.

40

Set Produto = Server.CreateObject(ADODB.Recordset)

41

Agora executamos a instruo SQL

42

Produto.Open sqlbuscaproduto, conn, 3, 3

43

Os dois ltimos parmetros sero discutidos

44

no prximo captulo.

45

Agora retorno as informaes do produto encontrado.

46

Caso no tenha sido encontrado nenhum produto, informo.

47

%>

48

<HR>

49

<%

50

If Produto.RecordCount = 0 Then

51

Response.Write Nenhum produto foi encontrado para o cdigo:

52

Response.Write Request.Form(codigo) & <BR>

53

Response.Write Tente pesquisar um outro cdigo !

54

Response.Write <HR>

55

Else

56

Response.Write <B>DADOS DO PRODUTO:</B><BR>

57

Response.Write Cdigo: & produto.Fields(ProductID) & <BR>

58

Response.Write Nome: & produto.Fields(ProductName) & <BR>

59

Response.Write Cd. Fornec.: & produto.Fields(SupplierID) & <BR>

60

Response.Write Cd. Categ.: & produto.Fields(CategoryID) & <BR>

61

Response.Write Preo Unit.: & produto.Fields(UnitPrice) & <BR>

62

Response.Write Estoque: & produto.Fields(UnitsInStock) & <BR>

63

Response.Write <HR>

64

End If

65

%>

66

</BODY>

67

</HTML>

315

Criando Sites Dinmicos com ASP 3.0

Agora vamos testar o nosso exemplo. Na figura 5.39 temos o formulrio de pesquisa carregado,
onde o usurio digitou o cdigo 32.

Figura 5.39: Pesquisando o produto cujo cdigo 32.


Ao clicarmos no boto Clique aqui para pesquisar o produto !!, retornado o resultado
indicado na Figura 5.40.

Figura 5.40: O resultado da pesquisa para o produto com cdigo 32.

316

Captulo 5 Conectando Pginas ASP com Bancos de Dados

Observe que no prprio formulrio do resultado, colocamos a opo do usurio entrar com
um novo cdigo para fazer outra pesquisa, conforme havamos proposto na apresentao
deste problema.
Agora vamos fazer o seguinte teste: vamos digitar um cdigo para um produto que no existe
e clicar fazer a pesquisa. Por exemplo, digite o cdigo 89 e clique no boto de pesquisa. Voc
obter o resultado indicado na Figura 5.41.
Observe que, alm de informar que o produto no foi encontrado, informado qual o cdigo
que foi digitado.
Agora vamos fazer alguns comentrios sobre a Listagem 5.4.

Figura 5.41: Resultados para a pesquisa de um produto que no existe.


O primeiro ponto a comentar a construo da instruo SQL na linha 34.
34

sqlbuscaproduto =SELECT * FROM Produtos where ProductID= &


Request.Form(codigo)

Nesta construo estamos utilizando a clusula Where para especificar um critrio. Ao executar a
pgina ASP, o cdigo Request.Form(Cdigo) substitudo pelo valor digitado pelo usurio. Vamos
supor que o usurio digitou 32 para o cdigo. Neste caso a nossa instruo SQL ficaria assim:
SELECT * FROM Produtos where ProductID=32

que justamente, a instruo que retorna o produto cujo cdigo igual ao digitado no
formulrio de pesquisa. Esta uma tcnica bastante til, pois inmeras vezes precisamos
construir instrues semelhantes a esta em nossas aplicaes Web.

317

Criando Sites Dinmicos com ASP 3.0

Um detalhe que devemos levar em considerao quando o critrio a ser pesquisado do


tipo texto. Neste caso, devemos colocar o critrio entre apstrofes. Para fazer isso utilizamos
a funo Chr(39) (39 o cdigo ASCII para o apstrofe) antes e depois do critrio, pois se
digitarmos o cdigo diretamente na pgina ASP, ser gerado um erro em tempo de execuo.
No exemplo a seguir ilustrada esta tcnica, onde estamos especificando um critrio para o
campo Cidade, o qual do tipo texto:
sqlbuscaproduto =SELECT * FROM Clientes where Cidade= & Chr(39)
Request.Form(Cidade) & Chr(39).

Observe o Chr(39) antes e depois do critrio.


Tambm gostaria de comentar o seguinte trecho de cdigo:
50

If Produto.RecordCount = 0 Then

51

Response.Write Nenhum produto foi encontrado para o cdigo:

52

Response.Write Request.Form(codigo) & <BR>

53

Response.Write Tente pesquisar um outro cdigo !

54
55

Response.Write <HR>
Else

56

Response.Write <B>DADOS DO PRODUTO:</B><BR>

57

Response.Write Cdigo: & produto.Fields(ProductID) & <BR>

58

Response.Write Nome: & produto.Fields(ProductName) & <BR>

59

Response.Write Cd. Fornec.: & produto.Fields(SupplierID) & <BR>

60

Response.Write Cd. Categ.: & produto.Fields(CategoryID) & <BR>

61

Response.Write Preo Unit.: & produto.Fields(UnitPrice) & <BR>

62

Response.Write Estoque: & produto.Fields(UnitsInStock) & <BR>

63

Response.Write <HR>

64

End If

Neste caso utilizamos a propriedade RecordCount do objeto Recordset. Caso esta propriedade
seja igual a zero, significa que nenhum registro foi encontrado. Neste caso, informamos ao
usurio que nenhum produto foi encontrado.
Caso tenha sido encontrado algum produto, retornamos os dados sobre o Produto, o que
feito na parte Else do lao If..Then...Else.
No prximo captulo iremos tratar de algumas tcnicas mais avanadas de pesquisa.

Concluso
Neste captulo foram apresentados diversos conceitos fundamentais para a utilizao de banco
de dados com pginas ASP.

318

Captulo 5 Conectando Pginas ASP com Bancos de Dados

Comeamos com uma reviso do Modelo Relacional de banco de dados, onde vimos conceitos
como Entidades, Atributos, Chave Primria, relacionamentos e Normalizao. Em seguida
fizemos uma rpida reviso da linguagem SQL que, conforme descrito anteriormente, de
fundamental importncia em se tratando de banco de dados.
Na seqncia, vimos as tecnologias para acesso a fontes de dados; conceitos como ODBC, OLE
DB e ADO e a maneira como os mesmos se relacionam. Tambm aprendemos a criar uma fonte
ODBC para um banco de dados do Microsoft Access e do Microsoft SQL Server 2000.
Depois estudamos o Modelo de Objetos do ADO, onde vimos em detalhes o objeto Connection.
Nos exemplos de aplicao vimos como conectar uma pgina ASP para exibir uma listagem a
partir de uma tabela de um banco de dados do Microsoft Access. Tambm aprendemos alguns
detalhes sobre o objeto Recordset, que ser melhor detalhado no prximo captulo.
Para finalizar o captulo foi apresentado um exemplo no qual o usurio digita um critrio e
efetuada uma pesquisa em uma tabela do banco de dados, com base no critrio digitado
pelo usurio.

319

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

Captulo 6
Bancos de Dados com ASP
Conceitos Avanados Parte I

321

Criando Sites Dinmicos com ASP 3.0

Introduo
Neste captulo veremos uma srie de conceitos avanados sobre a conexo de pginas ASP
com bancos de dados.
Aprenderemos mais detalhes sobre conexes com fontes de dados, inclusive como conectar,
sem a utilizao de ODBC, somente atravs da utilizao do objeto Connection e de sua
propriedade ConnectionString.
Estudaremos, detalhadamente, o objeto Recordset, aprendendo a utilizar suas propriedades,
mtodos e colees. Teremos um item sobre a utilizao de Cursores e sobre Lock em banco de
dados. Estes so conceitos de grande importncia que so, muitas vezes, ignorados. A correta
utilizao de cursores fundamental para a construo de aplicaes Web, utilizando ASP.
Tambm aprenderemos a interagir com fontes de dados, no somente atravs de consultas.
Aprenderemos a inserir, alterar e excluir dados que no sejam mais necessrios. Neste item
continuaremos utilizando, intensamente, as propriedades, mtodos e colees do objeto Recordset.
Sero apresentados alguns exemplos prticos de utilizao, como o clssico exemplo de
construo de uma Caixa de combinao de maneira dinmica. Por exemplo, em um
determinado formulrio, necessito de uma Caixa de combinao que liste todos os Bairros da
cidade de Porto Alegre. Podemos construir esta lista, dinamicamente, a partir de um banco de
dados, onde tenhamos esta informao armazenada em uma tabela.
Veremos exemplos prticos de operaes de insero, alterao e excluso de registros,
utilizando pginas ASP. Tambm aprenderemos a filtrar os registros retornados por um objeto
RecordSet.
Veremos como construir instrues SQL que utilizam funes para gerar campos calculados,
os quais no existem nas tabelas dos banco de dados. Por exemplo, utilizaremos a funo
Year para criar um campo que retorna apenas o ano de um campo data. Depois utilizaremos
este campo para filtrar os resultados obtidos.
Com os assuntos tratados neste captulo, teremos estudado diversos aspectos do Modelo de
Objetos ADO. Mas de maneira alguma teremos esgotado o assunto, uma vez que o mesmo
bastante extenso. Nos demais captulos do livro continuaremos a aprender um pouco mais
sobre ADO, alm de outros assuntos, como gerenciamento de sesses e aplicaes, utilizao
de componentes ASP do servidor, segurana e tratamento de erros dentre outros.

322

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

Estabelecendo Conexes sem a Utilizao de ODBC


Vamos repetir uma figura que foi apresentad no Captulo 5, a qual ilustra a conexo de pginas
ASP com fontes de dados, atravs da utilizao de OLE DB, conforme indicado na Figura 6.1.
OLE DB

OLE DB Providers
Jet
Provider

Jet
Provider

Exchange
Server
Provider

Drivers ODBC

Microsoft
Access

Microsoft
SQL
Server

Microsoft
Exchange
Server

Gerenciador ODBC

Driver ODBC
SQL Server

Driver ODBC
Microsoft Access

Driver ODBC
Oracle

Microsoft
SQL
Server

Microsoft
Access

ORACLE

Fontes de dados: Estruturadas e No estruturadas.

Figura 6.1: Acessando fontes de dados com OLE DB.


Conforme ilustrado nesta figura, possvel o acesso a fontes de dados sem a utilizao de
ODBC. Este um ponto de confuso entre muitos programadores iniciantes em ASP. Em
diversas conversas com colegas que estavam iniciando o estudo de ASP, surgiu esta dvida:
possvel conectar com uma fonte de dados, como por exemplo um banco de dados do
Microsoft Access, sem a utilizao de um driver ODBC?
A resposta sim; perfeitamente possvel. Para isto basta criar um objeto Connection e
configurar corretamente a sua propriedade ConnectionString.
A propriedade ConnectionString deve conter as informaes necessrias para estabelecer a
conexo com uma fonte de dados. Atravs desta propriedade, devemos fornecer informaes
tais como:
Provedor
Nome do usurio
Senha do usurio
Nome do arquivo

323

Criando Sites Dinmicos com ASP 3.0

Nome do servidor (como no caso de um servidor SQL Server)


Nome do banco de dados no servidor
So informaes necessrias para que a pgina ASP possa estabelecer a conexo com a fonte
de dados, utilizando o OLE DB Provider correto. Pode at ser que seja utilizado o OLE DB
Provider para ODBC, mas isto no obrigatrio.
Agora aprenderemos um pouco mais sobre a propriedade ConnectionString. Tambm veremos
alguns exemplos de utilizao desta propriedade.

A Propriedade ConnectionString
Esta propriedade deve ser configurada de maneira diferente, de acordo com a fonte de dados
que estiver sendo utilizada. Por exemplo, a configurao para acessar um banco de dados do
Microsoft Access diferente da configurao para acessar um banco de dados do Microsoft
SQL Server ou do Oracle. Vamos estudar como configurar esta propriedade para acessar
algumas das principais fontes de dados: Microsoft Access, Microsoft SQL Server e Oracle.
A propriedade ConnectionString possui uma srie de comandos no formato:
argumento = valor

onde argumento pode ser a informao sobre o provedor, o nome do usurio, etc. Apenas a
ttulo de exemplo, listamos a seguir a propriedade ConnectionString do exemplo da Listagem
5.2, do captulo anterior:
Provider=MSDASQL.1;Data Source=nwind;Extended Properties=DSN=nwind;DBQ=C:\MEUS
DOCUMENTOS\NWIND.MDB;DriverId=281;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;

Agora vamos decifrar e aprender a utilizar esta propriedade.

Configurando Conexes com Bancos de Dados do Microsoft Access


Para configurar a propriedade ConnectionString para estabelecer uma conexo com um banco
de dados do Microsoft Access, podemos configurar os parmetros indicados na Tabela 6.1.
Tabela 6.1 Definindo a propriedade ConnectionString para uma fonte do Microsoft Access.
Propriedade

Descrio

Provider

Deve ser especificado o OLE DB Provider para o Microsoft


Access. Para esta propriedade utilizamos o seguinte valor:
Microsoft.Jet.OLEDB.4.0.

324

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

Propriedade

Descrio

Data Source

Informamos o caminho para o arquivo .mdb. Por exemplo,


C:\Arquivos de programas\office\nwind.mdb.

User ID

Especifica o nome do usurio com a qual a conexo ser


estabelecida. Caso esta propriedade no seja informada, a
mesma ser definida como admin, o qual o usurio padro.

Password

Informa a senha para o usurio que far a conexo. Caso no esta


propriedade no seja informada, a mesma ser definida como .

IMPORTANTE
Por padro, o OLE DB Provider para Microsoft Access (tambm chamado de Jet OLE DB Provider),
abre o banco de dados com permisso de leitura e escrita, isto , os dados tambm podem ser
modificados. Para alterar o modo de abertura, para, por exemplo, somente escrita, devemos utilizar
a propriedade Mode, do objeto Connection.

Abaixo temos um exemplo de uma conexo com um banco de dados, utilizando a propriedade
ConnectionString:
1 Set conn=Server.CreateObject(ADODB.Connection)
conn.Open PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=c:\meus documentos\
nwind.mdb

Primeiro criamos um objeto do tipo Connection. Depois utilizamos o mtodo Open, para
abrir esta conexo. Observe que aps o mtodo Open passada uma String de conexo com
o parmetro para o mtodo Open. Este parmetro a propriedade ConnectionString.
Poderamos obter o mesmo resultado de uma maneira diferente: primeiro vamos definir a
propriedade ConnectionString, depois simplesmente chamamos o mtodo Open. Ao chamar
o mtodo Open, o mesmo verifica se a propriedade ConnectionString j est definida e utiliza
a mesma. Nosso exemplo ficaria assim:
1

Set conn=Server.CreateObject(ADODB.Connection)

conn.ConnectionString = PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=c:\meus


documentos\nwind.mdb

conn.Open

Neste caso, na linha 2 foi definida a propriedade ConnectionString e na linha 3 utilizamos o


mtodo Open.

325

Criando Sites Dinmicos com ASP 3.0

OBSERVAO
Utilizamos os nmeros de linha apenas para referncia. Quando criamos nossas pginas ASP
no devemos utilizar nmeros de linhas.

NOTA
A linha 2 aparece quebrada em duas linhas por questes de espao para exibio, mas a
mesma deve ser digitada em uma nica linha.

No exemplo a seguir, temos um caso onde foi fornecido o nome do usurio e a senha para
conexo:
1

Set conn=Server.CreateObject(ADODB.Connection)

conn.ConnectionString = PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=c:\meus


documentos\nwind.mdb; User ID=jsilva;Password=senha12

conn.Open

Para maiores detalhes sobre segurana de bancos de dados do Microsoft Access, consulte a
documentao do prprio Access.

Configurando Conexes com Bancos de Dados do Microsoft SQL Server


Para configurar a propriedade ConnectionString para estabelecer uma conexo com um banco
de dados do Microsoft SQL Server, podemos configurar os parmetros indicados na Tabela 6.2.
Tabela 6.2 Definindo a propriedade ConnectionString para uma fonte do Microsoft Access.
Propriedade

Descrio

Provider

Deve ser especificado o OLE DB Provider para


o Microsoft SQL Server. Para esta propriedade
utilizamos o seguinte valor: SQLOLEDB.

Data Source ou Server

Informamos o nome do servidor SQL.

Initial Catalog ou Database

Nome do banco de dados a ser utilizado. Em


um servidor SQL, podem existir vrios bancos
de dados.

User ID ou uid

Especifica o nome do usurio com o qual a


conexo ser estabelecida.

326

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

Propriedade

Descrio

Password ou pwd

Informa a senha para o usurio que far a


conexo. Caso esta propriedade no seja
informada, a mesma ser definida como .

Na Listagem 6.1, temos um exemplo de uma conexo com um banco de dados do Microsoft
SQL Server, utilizando a propriedade ConnectionString:
Listagem 6.1 Conectando com um banco de dados do Microsoft SQL Server 2000
nwind_sql.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

<TITLE>Conectando com o SQL Server 2000</TITLE>

</HEAD>

<BODY>

<H1>

<FONT color=navy>Pedidos da Empresa ABC Ltda.</FONT>

</H1>

10

<%

11

O primeiro passo criar a conexo com o banco de dados

12

Para isto crio um objeto do tipo Connection

13

Cria um objeto do tipo ADODB.Connection

14

Set conn=Server.CreateObject(ADODB.Connection)

15

Agora defino a propriedade ConnectionString do objeto Connection

16

criado anteriormente.

17

conn.ConnectionString = PROVIDER=SQLOLEDB;
Data Source=SERVIDOR\SERVIDOR;Initial Catalog=Northwind;
User ID=sa;Password=senha123"

18

conn.Open

19

O prximo passo criar uma instruo SQL

20
inst_sql=SELECT Orders.OrderID, Orders.OrderDate, Orders.ShipCity,
Orders.ShipCountry FROM Orders ORDER BY Orders.OrderDate

327

Criando Sites Dinmicos com ASP 3.0

21

Esta instruo SQL retorna os campos OrderID, OrderDate,


ShipCity e ShipCountry, da tabela Orders, do banco de dados NorthWind.

22

Agora criamos um objeto RecordSet.

23

Este objeto ir executar a instruo SQL e

24

receber o resultado da consulta.

25

Set Pedidos = Server.CreateObject(ADODB.Recordset)

26

Agora executamos a instruo SQL

27

Pedidos.Open inst_sql, conn, 3, 3

28

Neste ponto j tenho todos os registros retornados

29

pela instruo SQL. Estes registros esto armazenados

30

no objeto Pedidos, que um objeto do tipo Recordset.

31

Agora passo a montar a pgina que ser retornada para o

32

navegador do cliente. Vamos montar uma tabela com o

33

resultado da consulta.

34

%>

35

<P>

36

<HR>

37

<TABLE bgColor=gray border=1 borderColor=navy cellPadding=1 cellSpacing=1


width=100%>

38

<TR>

39

<TD align=middle bgColor=gray>Cdigo</TD>

40

<TD align=middle bgColor=gray>Data</TD>

41

<TD align=middle bgColor=gray>Cidade</TD>

42

<TD align=middle bgColor=gray>Pas</TD>

43

</TR>

44

<%

45

Inicio um Loop para percorrer todos os registros

46

do RecordSet Pedidos, exibindo um registro em

47

cada linha da tabela.

48

Do Until Pedidos.eof %>

328

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

49

<TR>

50

<TD align=middle bgColor=gray><%=Pedidos.Fields(OrderID)%></TD>

51

<TD align=middle bgColor=gray><%=Pedidos.Fields(OrderDate)%></TD>

52

<TD align=middle bgColor=gray><%=Pedidos.Fields(ShipCity)%></TD>

53

<TD align=middle bgColor=gray><%=Pedidos.Fields(ShipCountry)%></TD>

54

</TR>

55

<% Pedidos.MoveNext

56

Loop %>

57

</TABLE>

58

</P>

59

<HR>

60

</BODY>

61

</HTML>

Ao acessarmos este arquivo, obtemos o resultado indicado na Figura 6.2.

Figura 6.2: Dados carregados a partir do Microsoft SQL Server.

329

Criando Sites Dinmicos com ASP 3.0

Alguns detalhes importantes a serem comentados a respeito deste exemplo:


Primeiro, vamos considerar o seguinte fragmento de cdigo:
17

conn.ConnectionString = PROVIDER=SQLOLEDB;
Data Source=SERVIDOR\SERVIDOR;Initial Catalog=Northwind;
User ID=sa;Password=senha123"

18

conn.Open

Observe que, neste caso, primeiro definimos a propriedade ConnectionString, depois


utilizamos o mtodo Open, para abrir a conexo. O mtodo Open utiliza as informaes da
propriedade ConnectionString, j definida, para estabelecer a conexo com o banco de dados.
Segundo, vamos considerar a String de conexo:
PROVIDER=SQLOLEDB;
Data Source=SERVIDOR\SERVIDOR;
Initial Catalog=Northwind;
User ID=sa;Password=senha123"

Observe que estamos informando os parmetros descritos na tabela a seguir.


Tabela 6.3 Parmetros para a String de conexo com o servidor SQL Server.
Parmetro

Valor fornecido

Provider

SQLOLEDB

Data Source ou Server

SERVIDOR\SERVIDOR

Initial Catalog ou

Northwind

User ID ou uid

sa

Password ou pwd

senha123

Temos dois parmetros que merecem maiores comentrios.


O parmetro Data Source ou Server foi informado da seguinte maneira:
SERVIDOR\SERVIDOR

Este formato uma novidade do Microsoft SQL Server 2000. O valor antes da barra (\) o
nome do servidor e o valor depois da barra o nome da instncia do SQL Server a ser
utilizada (neste exemplo igual ao nome do servidor, mas poderia ser diferente). Com o
Microsoft SQL Server 2000, posso ter vrias instncias do servidor SQL, isto como se eu
tivesse vrios servidores SQL Server 2000 diferentes no mesmo equipamento, sendo que
cada um deles deve possuir um nome diferente. Assim poderamos ter o seguinte exemplo:

330

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

SERVIDOR\SERVIDOR
SERVIDOR\PRODUCAO
SERVIDOR\ESPECIAL

Neste caso temos trs instncias do servidor SQL Server 2000 no computador de nome
SERVIDOR. As trs instncias so:
SERVIDOR
PRODUCAO
ESPECIAL

Quando vou definir a String de conexo, preciso definir a qual instncia quero conectar a
pgina ASP.
Se voc estiver utilizando o Microsoft SQL Server 7.0, basta fornecer o nome do servidor.
Neste caso definiramos a propriedade ConnectionString da seguinte maneira:
PROVIDER=SQLOLEDB;
Data Source=SERVIDOR;
Initial Catalog=Northwind;
User ID=sa;Password=senha123

Observe que estamos conectando com o banco de dados Northwind. Dentro deste
banco de dados, a nossa instruo SQL acessa dados da tabela Orders, conforme
indicado pelo seguinte fragmento de cdigo:
20

inst_sql=SELECT Orders.OrderID, Orders.OrderDate, Orders.ShipCity,


Orders.ShipCountry FROM Orders ORDER BY Orders.OrderDate

Com esta instruo so retornados os campos OrderID, OrderDate, ShipCity e ShipCountry.


Alm disso a listagem obtida classificada pelo campo OrderDate, conforme pode ser
confirmado pelos resultados exibidos na Figura 6.2.

Configurando Conexes com Bancos de Dados ORACLE


Para configurar a propriedade ConnectionString para estabelecer uma conexo com um banco
de dados de um servidor ORACLE, podemos configurar os parmetros indicados na Tabela 6.4:
Tabela 6.4 Definindo a propriedade ConnectionString para uma fonte ORACLE.
Propriedade

Descrio

Provider

Deve ser especificado o OLE DB Provider para o ORACLE. Para


esta propriedade utilizamos o seguinte valor: MSDAORA.

Data Source

Informamos o nome do servidor ORACLE.

331

Criando Sites Dinmicos com ASP 3.0

Propriedade

Descrio

User ID

Especifica o nome do usurio com o qual a conexo ser


estabelecida.

Password

Informa a senha para o usurio que far a conexo.

Abaixo temos um exemplo de uma conexo com um banco de dados, utilizando a propriedade
ConnectionString:
1

Set conn=Server.CreateObject(ADODB.Connection)

conn.Open Provider=MSDAORA;Data Source=SERVIDOR;User ID=admin; Password=admin123

Primeiro criamos um objeto do tipo Connection. Depois utilizamos o mtodo Open, para
abrir esta conexo. Observe que aps o mtodo Open passada uma String de conexo como
parmetro para o mtodo Open. Este parmetro a propriedade ConnectionString.
Poderamos obter o mesmo resultado de uma maneira diferente: primeiro vamos definir a
propriedade ConnectionString, depois simplesmente chamamos o mtodo Open. Ao chamar
o mtodo Open, o mesmo verifica se a propriedade ConnectionString j est definida e a
utiliza. Nosso exemplo ficaria assim:
1

Set conn=Server.CreateObject(ADODB.Connection)

conn.ConnectionString = Provider=MSDAORA;Data Source=SERVIDOR;


User ID=admin; Password=admin123

conn.Open

Neste caso, na linha 2 foi definida a propriedade ConnectionString e na linha 3 utilizamos o


mtodo Open.

OBSERVAES
Utilizamos os nmeros de linha apenas para referncia. Quando criamos nossas pginas ASP
no devemos utilizar nmeros de linhas.

NOTA
A linha 2 aparece quebrada em duas linhas por questes de espao para exibio, mas a
mesma deve ser digitada em uma nica linha.

IMPORTANTE
Para maiores detalhes sobre o ORACLE, consulte a documentao do produto.

332

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

Microsoft Access, Microsoft SQL Server e ORACLE so os casos mais comuns de conexes de
pginas ASP com fontes de dados. Porm, conforme descrito no Captulo 5, atravs de OLE
DB podemos estabelecer conexes com qualquer fonte de dados para a qual esteja disponvel
um OLE DB Provider, inclusive fontes de dados no estruturadas no formato de bancos de
dados relacionais. Como exemplos de fontes que no possuem o tradicional formato dos
bancos de dados relacionais, poderamos citar os arquivos de mensagens de correio eletrnico
do Microsoft Exchange ou do Lotus Notes, um catlogo de indexao do Microsoft Index
Server ou, at mesmo, uma fonte de dados residente em um Mainframe.

Alguns Detalhes Finais Sobre o Objeto Connection


Agora veremos mais alguns detalhes importantes sobre o objeto Connection. Conforme
mostrado nos exemplos prticos, para conectar uma pgina ASP com uma fonte de dados,
estamos utilizando os seguintes passos:
Criamos um objeto do tipo Connection e conectamos este objeto com uma fonte de
dados, quer seja via ODBC (como nos exemplos do Captulo 5), quer seja via OLE DB
(como nos exemplos deste captulo).
Criamos um objeto do tipo RecordSet e executamos uma instruo SQL. Feito isto, o
objeto RecordSet conter os dados retornados pela fonte de dados.
Uma vez obtidos os dados, utilizamos cdigo ASP para exibir os resultados desejados. Esta
metodologia funciona sem maiores problemas, porm existem alguns aspectos importantes a
serem considerados, tais como o encerramento de uma conexo e o nvel de acesso aos dados
oferecido por determinada conexo.

O Mtodo Close
O mtodo Close utilizado para fechar/encerrar uma conexo e quaisquer outros objetos que
sejam dependentes da conexo. Por exemplo, se criamos um objeto RecordSet que obteve
dados a partir da conexo que est sendo encerrada, o objeto RecordSet tambm ser encerrado.
A sintaxe deste mtodo bastante simples. Vamos supor que tenhamos criado uma conexo
chamada Clientes; para encerr-la, poderamos utilizar o seguinte cdigo:
<% Clientes.Close %>

Ao fecharmos um objeto, estaremos liberando os recursos computacionais que o mesmo


utilizava, tais como conexes e uso do processador. Porm o objeto continua na memria,
com isso podemos utilizar o mtodo Open para abrir novamente a conexo e voltar a utiliz-

333

Criando Sites Dinmicos com ASP 3.0

la. No exemplo abaixo, fechamos o objeto Clientes e depois voltamos a abri-lo, utilizando o
mtodo Open.
<%

Clientes.Close
Clientes.Open

%>

Neste caso poderamos voltar a utilizar o objeto Clientes. Para remover um objeto, em definitivo,
da memria, devemos definir o seu valor como Nothing, conforme indicado no exemplo:
<% Set Clientes = Nothing %>

Feito isso, somente poderemos voltar a utilizar o objeto se o mesmo for novamente criado,
utilizando o seguinte cdigo:
Set Clientes = Server.CreateObject(ADODB.Connection)

Observe que, pelo fato de Clientes ser um objeto (do tipo Connection) e no simplesmente uma
varivel, devemos utilizar o operador Set. Se tentarmos criar ou remover um objeto, sem a
utilizao do operador Set, obteremos uma mensagem de erro e a pgina no ser exibida.

Pool de Conexes
Quando um usurio fecha uma conexo, atravs da utilizao do mtodo Close, conforme
descrito anteriormente, esta conexo mantida na memria e adicionada a um Pool de
conexes inativas. Da prxima vez que o mesmo usurio, ou qualquer outro, for abrir uma
nova conexo, o OLE DB primeiro verifica se, no Pool de conexes inativas, existe uma conexo
exatamente igual ao que o usurio est solicitando. Se for encontrada, a mesma ser utilizada,
caso contrrio uma nova conexo ser criada e enviada para o usurio que solicitou.
O OLE DB mantm um Pool de conexes porque o processo de criar uma conexo o que
mais exige recursos do servidor Web. Sempre que uma conexo puder ser reaproveitada, a
partir do Pool de conexes, estaremos economizando recursos do servidor.
As conexes inativas no permanecem indefinidamente no Pool de conexes. Aps um perodo
padro sem utilizao, as mesmas so removidas, para no onerar os recursos do servidor
Web, sem que estejam sendo utilizadas.
A utilizao de Pool de conexes de grande importncia, principalmente para servidores
Web muito acessados, em que novas conexes esto sendo criadas e fechadas a todo instante.
Neste caso o Pool de conexes representa um alvio na carga de recursos como memria RAM
e processador.

334

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

O Objeto RecordSet
Nos exemplos que foram apresentados at aqui, j utilizamos o RecordSet. Agora chegou o
momento de fazer um estudo mais aprofundado deste objeto.
O objeto RecordSet contm o resultado de uma instruo SQL executada em um banco de
dados. Contm um conjunto de Registros. como se fosse uma tabela, onde cada linha um
registro, e cada registro formado por um conjunto de campos (colunas da tabela). Por exemplo,
ao executarmos a seguinte instruo SQL:
Select * from Pedidos

Estaremos selecionando todos os registros da tabela Pedidos, os quais podero ser acessados
atravs de um objeto do tipo RecordSet.
Existem detalhes importantes que devemos conhecer a respeito do acesso aos dados. Devemos
considerar questes como:
O acesso deve ser somente para leitura dos dados ou devem ser permitidas alteraes
e inseres de novos dados?
Como tratar questes sobre o acesso simultneo aos dados? Por exemplo, como tratar a
situao em que dois usurios tentam alterar o mesmo registro, ao mesmo tempo?
Estas so questes importantes e devem ser consideradas sempre que formos disponibilizar
acesso aos dados da nossa empresa, para usurios da Internet. Tambm precisamos conhecer
o que so Cursores, quais os tipos disponveis e para que utilizamos. Vamos estudar estes
pontos neste tpico.
Para criar um objeto RecordSet, utilizamos a seguinte sintaxe:
Set Pedidos = Server.CreateObject(ADODB.Recordset)

Neste exemplo estamos criando um RecordSet chamado Pedidos. Uma vez criado o RecordSet,
o prximo passo utilizarmos o mtodo Open. Este mtodo possui a seguinte sintaxe:
recordset.Open Source, ActiveConnection, CursorType, LockType, Options

Considere o exemplo:
Pedidos.Open inst_sql, conn, 3, 3

Os parmetros a serem passados para o mtodo Open esto descritos na Tabela 6.5.

335

Criando Sites Dinmicos com ASP 3.0

Tabela 6.5 Parmetros do mtodo Open do objeto RecordSet.


Parmetro

Descrio

Source

Pode ser o nome de um objeto Command; uma instruo


SQL ou o nome de uma varivel que contm uma
instruo SQL; o nome de uma tabela ou de um Store
Procedure do banco de dados; ou at uma URL que
aponta para uma fonte de dados.

ActiveConnection O nome da conexo a ser utilizada ou a String de conexo


para uma fonte de dados ODBC ou OLE DB. opcional.
CursorType

um valor que determina o tipo de cursor que ser


utilizado pelo provedor de dados na abertura do
RecordSet. opcional. Falaremos mais sobre tipos de
cursores ainda neste item.

LockType

um valor que determina o tipo de Lock que ser utilizado


pelo provedor de dados na abertura do RecordSet. opcional.
Falaremos mais sobre tipos de Lock ainda neste item.

Options

Um valor do tipo Long, o qual define como o provedor de


dados deve avaliar o argumento Source, quando o mesmo
for algo diferente de um objeto Command, ou quando o
RecordSet deve ser recuperado a partir de um arquivo
salvo previamente.

Cursores
Um Cursor o mecanismo utilizado em ADO para gerenciar o conjunto de registros de um
objeto RecordSet. Somente podemos ter acesso a um registro chamado de Registro Corrente.
Quando utilizamos o mtodo Open, por padro, o primeiro registro o Registro Corrente.
Um Cursor tambm utilizado para determinar qual o Registro Corrente, bem como para
movimentar o indicador de registro entre os diversos registros do objeto RecordSet. O
mecanismo que identifica qual o Registro Corrente chamado de Record pointer. Quem
lida com a manipulao do Record pointer o Cursor. Por isso quando utilizamos os mtodos
MoveNext (mover para o prximo registro), MovePrevious (mover para o registro anterior) ou
qualquer outro mtodo de movimentao, estamos utilizando o Cursor.
O mecanismo do Cursor tambm gerencia situaes em que tentamos avanar alm do ltimo
registro ou voltar alm do primeiro registro, ou quando acessamos o valor de um campo de

336

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

um registro. De uma maneira simples, podemos afirmar que grande parte da funcionalidade
de um objeto RecordSet fornecida pelo mecanismo do Cursor.
Quando utilizamos o mtodo Open, podemos definir diferentes formas de comportamento
para o mecanismo do Cursor. So estas formas que determinam os tipos de Cursores
disponveis, conforme a Tabela 6. 6. O tipo do Cursor pode ser definido com um valor numrico
ou atravs de uma constante.
Tabela 6.6 Tipos de Cursores disponveis.
Valor/Constante

Tipo/Descrio

3
adOpenStatic

Define um Cursor do tipo Static. Um Cursor deste tipo


contm uma cpia esttica dos registros. O contedo
do RecordSet definido no momento da criao do
mesmo. Caso sejam feitas alteraes no banco de dados,
estas alteraes no sero visveis para o RecordSet que
utiliza um Cursor do tipo Static. Somente recriando o
RecordSet que poderemos ter acesso s alteraes
efetuadas. Podemos movimentar o ponteiro de registro
em ambas as direes, isto , podemos utilizar os
mtodos MoveNext, MovePrevious e assim por diante.

0
Cria um Cursor do tipo Forward Only. Este o valor
adOpenForwardOnly padro que ser utilizado caso no seja definido nenhum
outro tipo. Somente podemos utilizar o mtodo MoveNext.
Se tentarmos utilizar um outro mtodo de movimentao,
ser gerado um erro e a pgina no ser carregada. Tambm
um Cursor do tipo Static, com a diferena que somente
podemos nos movimentar para a frente.
2
adOpenDynamic

Cria um Cursor do tipo Dynamic. Um Cursor deste tipo


no possui um conjunto fixo de registros. Quaisquer
alteraes, adies e excluses feitas por outros usurios
sero visveis para o objeto RecordSet, sem que o
mesmo tenha que ser eliminado e recriado. Podemos nos
movimentar em ambas as direes dentro do RecordSet.

1
adOpenKeyset

Cria um Cursor do tipo Keyset. Um Cursor deste tipo


parecido com um Cursor Dynamic, com a exceo de
que o conjunto de registros fixo. O RecordSet
enxerga as alteraes feitas por outros usurios, porm
a adio de novos registros no visvel para um

337

Criando Sites Dinmicos com ASP 3.0

Valor/Constante

Tipo/Descrio
RecordSet deste tipo. Caso algum registro seja
eliminado por outros usurios, o respectivo registro
estar inacessvel. podemos nos movimentar em
ambas as direes dentro do RecordSet.

O tipo de Cursor a ser utilizado depende da aplicao que estamos desenvolvendo. Por
exemplo, se estamos desenvolvendo uma pgina ASP apenas para exibir um conjunto de
registros, podemos utilizar um cursor do tipo Static. Cursores mais simples, como o do
tipo Static, consomem menos recursos. Cursores mais sofisticados, como o do tipo
Dynamic, consomem mais recursos computacionais. Estes recursos podem ser consumidos
na estao do cliente ou no servidor Web, dependendo da localizao do Cursor. Veremos
como definir a localizao do Cursor atravs da utilizao da propriedade CursorLocation,
no prximo item.
Agora alguns exemplos de utilizao do mtodo Open.
Este exemplo cria um RecordSet chamado Clientes e define um cursor do tipo Static:
<%
inst_sql=Select * from Clientes
Set Clientes = Server.CreateObject(ADODB.Recordset)
Clientes.Open inst_sql, conn, 3, 3
%>

Ao invs de utilizarmos o valor 3, podemos utilizar a constante correspondente adOpenStatic,


conforme o exemplo:
<%
inst_sql=Select * from Clientes
Set Clientes = Server.CreateObject(ADODB.Recordset)
Clientes.Open inst_sql, conn, adOpenStatic, 3
%>

O prximo exemplo cria um RecordSet chamado Clientes e define um Cursor do tipo Keyset.
<%
inst_sql=Select * from Clientes
Set Clientes = Server.CreateObject(ADODB.Recordset)
Clientes.Open

inst_sql,

conn,

1,

%>

338

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

Ao invs de utilizarmos o valor 1, podemos utilizar a constante correspondente adOpenKeyset,


conforme o exemplo:
<%
inst_sql=Select * from Clientes
Set Clientes = Server.CreateObject(ADODB.Recordset)
Clientes.Open inst_sql, conn, adOpenKeyset, 3
%>

Localizao do Cursor
O Cursor pode estar localizado no servidor Web ou no cliente que est acessando os dados.
Algumas fontes de dados, como o Microsoft SQL Server, podem oferecer servios de Cursor
no servidor. O Microsoft Access no oferece servios de Cursor e, com isso, o mesmo fica
localizado no cliente. Quando acessamos fontes de dados, utilizando OLE DB, podemos utilizar
o servio de Cursor oferecido pelo prprio OLE DB. A opo padro, caso no seja definido
nada em contrrio, que o Cursor esteja no servidor.
Para definir a localizao do cursor, devemos utilizar a propriedade CursorLocation, do objeto
RecordSet. Definimos esta propriedade antes da utilizao do mtodo Open deste objeto. A
Tabela 6.7 descreve os valores possveis para esta propriedade.
Tabela 6.7 Valores para a propriedade CursorLocation.
Valor/Constante

Tipo/Descrio

3
adUseClient

Utiliza servios de Cursor no cliente.

1
adUseNone

No utiliza servios de Cursor. Somente mantido por


questes de compatibilidade com as verses anteriores.

2
adUseServer

Utiliza servios de Cursor do servidor ou do provedor


OLE DB.

No prximo exemplo, definimos o Cursor no cliente:


<%
inst_sql=Select * from Clientes
Set Clientes = Server.CreateObject(ADODB.Recordset)
Clientes.CursorLocation = 3
Clientes.Open inst_sql, conn, 3, 3
%>

339

Criando Sites Dinmicos com ASP 3.0

IMPORTANTE
A propriedade CursorLocation deve ser definida antes da utilizao do mtodo Open. Se
tentarmos definir a propriedade CursorLocation, com o RecordSet aberto, obteremos a seguinte
mensagem de erro:
Tipo de erro:
ADODB.Recordset (0x800A0E79)
Operation is not allowed when the object is open.
/Capitulo6/pubs_sql.asp, line 40

A mensagem indica que a operao (definir a localizao do Cursor) no permitida quando


o objeto est aberto.

Ao invs de utilizarmos o valor 3, podemos utilizar a constante correspondente, adUseClient,


conforme o exemplo:
<%
inst_sql=Select * from Clientes
Set Clientes = Server.CreateObject(ADODB.Recordset)
Clientes.CursorLocation = adUseClient
Clientes.Open inst_sql, conn, adOpenStatic, 3
%>

Quando criamos um RecordSet com o Cursor no servidor, responsabilidade do servidor gerenciar


a navegao e as atualizaes do RecordSet, sendo que sero consumidos recursos no servidor.
Ao utilizar o Cursor no cliente, todo o contedo do RecordSet copiado para a estao do
cliente e gerenciado por um Cursor local. Devemos considerar a questo da velocidade da
conexo do usurio com a Internet ou com a Intranet da empresa, pois se o RecordSet for
muito grande, isto , um grande nmero de registros, o tempo para copi-lo todo ser
considervel. Porm, uma vez copiado o RecordSet para a estao do cliente, a utilizao do
mesmo mais rpida, pois no preciso acessar o servidor para simples operaes, tais como
movimentar-se para o prximo registro.
Quando uma aplicao Web desenvolvida, a localizao dos Cursores deve ser discutida na
fase de projeto, sempre procurando propiciar o melhor desempenho possvel para a aplicao.
Em uma mesma aplicao posso ter pginas que utilizam o Cursor no servidor e outras que
utilizam o Cursor no cliente, depende apenas da natureza de cada pgina.
No prximo exemplo, definimos o Cursor no servidor:
<%
inst_sql=Select * from Clientes

340

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

Set Clientes = Server.CreateObject(ADODB.Recordset)


Clientes.CursorLocation = 2
Clientes.Open inst_sql, conn, 3, 3
%>

Ao invs de utilizarmos o valor 2, podemos utilizar a constante correspondente, adUseServer,


conforme o exemplo:
<%
inst_sql=Select * from Clientes
Set Clientes = Server.CreateObject(ADODB.Recordset)
Clientes.CursorLocation = adUseServer
Clientes.Open inst_sql, conn, adOpenStatic, 3
%>

Lembrando que no necessrio definir o Cursor no servidor, pois essa a definio padro,
ou seja, se no for definida, explicitamente, a propriedade CursorLocation assume o valor
adUseServer.

Lock de Registros
Os bancos de dados utilizam o Lock de registros como uma maneira de garantir a integridade
dos dados. Com a utilizao do Lock garantimos que um mesmo registro no esteja sendo
alterado, simultaneamente, por mais do que um usurio. Quando um usurio acessa um registro
para fazer alguma alterao, o mesmo bloqueado, de tal forma que outros usurios no possam
ter acesso a ele. O acesso ao registro somente ser liberado aps as alteraes terem sido salvas
no banco de dados. O tipo de Lock definido pela propriedade LockType do objeto RecordSet.
Existem diferentes maneiras de se fazer o Lock dos registros, conforme descrito na Tabela 6.8.
Tabela 6.8 Tipos de Lock.
Valor/Constante

Tipo/Descrio

1
adLockReadOnly

Cria um Lock do tipo Read Only. o tipo padro de


Lock. O RecordSet somente leitura, isto , os registros
no podem ser modificados, logo no precisam ser
bloqueados. Com isso tem um processamento mais
rpido, porm perde-se a capacidade de fazer alteraes
nos registros.

2
adLockPessimistic

Cria um Lock do tipo Pessimistic. O provedor OLE DB


tenta bloquear o registro no momento em que o mesmo
comea a ser editado. Isso feito para tentar garantir
que o registro ser editado com sucesso.

341

Criando Sites Dinmicos com ASP 3.0

Valor/Constante

Tipo/Descrio

3
adLockOptimistic

Cria um Lock do tipo Optimistic. O registro no


bloqueado enquanto as alteraes no forem salvas
no banco de dados atravs da utilizao do mtodo
Update do RecordSet.

4
Cria um Lock do tipo Batch Optimistic. Este tipo de
adLockBatchOptimistic Lock permite que vrios registros sejam modificados.
Os registros somente sero bloqueados quando for
chamado o mtodo UpdateBatch do objeto RecordSet.
-1
adLockUnspecified

No define o tipo de Lock. Quando utilizamos o mtodo


Clone, para criar uma cpia do RecordSet, o Clone
ser criado com o mesmo tipo de Lock do RecordSet
original.

A maneira e os tipos de Lock possveis de serem utilizados tambm dependem da fonte de


dados que est sendo utilizada. Quando no existe a necessidade de fazer alteraes nos
registros, devemos utilizar, sempre, um Lock do tipo Read Only (ou seja, como o RecordSet
apenas leitura, os registros no precisam ser bloqueados), pois isso evita que o Provider tenha
que fazer verificaes ao acessar cada registro, para verificar se o registro no est bloqueado
no momento. Assim teremos um processamento bem mais rpido.
Um registro bloqueado no pode nem sequer ser visualizado pelos usurios, evitando-se que
seja exibido um registro que est sendo alterado.
Para definir o tipo de Lock, utilizamos a propriedade LockType, conforme indicado no exemplo
a seguir, onde definimos o tipo de Lock como Optimistic:
<%
inst_sql=Select * from Clientes
Set Clientes = Server.CreateObject(ADODB.Recordset)
Clientes.LockType = 3
Clientes.Open inst_sql, conn, 3, 3
%>

IMPORTANTE
A propriedade LockType deve ser definida antes da utilizao do mtodo Open. Ao tentarmos
definir a propriedade CursorLocation, com o RecordSet aberto, obteremos a seguinte
mensagem de erro:

342

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

Tipo de erro:
ADODB.Recordset (0x800A0E79)
Operation is not allowed when the object is open.
/Capitulo6/pubs_sql.asp, line 40

A mensagem indica que a operao (definir a localizao do Cursor) no permitida quando


o objeto est aberto.

Ao invs de utilizarmos o valor 3, podemos utilizar a constante correspondente, adLockOptimistic, conforme o exemplo:
<%
inst_sql=Select * from Clientes
Set Clientes = Server.CreateObject(ADODB.Recordset)
Clientes.LockType = adLockOptimistic
Clientes.Open inst_sql, conn, adOpenStatic, 3
%>

Agora que j discutimos um pouco sobre Cursores, localizao do Cursor e Lock de registros,
podemos partir para o estudo de mais alguns detalhes do objeto RecordSet.

Propriedades do Objeto RecordSet


Atravs da utilizao de propriedades de um objeto podemos definir algumas de suas
caractersticas e tambm retornar as caractersticas do mesmo. Algumas propriedades so
somente para leitura, isto significa que apenas podemos verificar o valor da propriedade.
Outras so de leitura e escrita, isto , podemos definir seu valor. Para definir o valor de uma
propriedade, utilizamos a seguinte sintaxe:
<% RecordSet.nome_da_propriedade = valor %>

Na Tabela 6.9 esto listadas as principais propriedades do objeto RecordSet.


Tabela 6.9 Principais propriedades do objeto RecordSet.
Propriedade

Descrio

AbsolutePage

Retorna a pgina do Registro Corrente. Pgina um


conceito de armazenamento de banco de dados.

AbsolutePosition

Indica a posio do Registro Corrente, dentro do


RecordSet.

343

Criando Sites Dinmicos com ASP 3.0

Propriedade

Descrio

ActiveCommand

Retorna o objeto Command utilizado para criar o


RecordSet, caso tenha sido utilizado um objeto
Command. Esta propriedade somente leitura.

BOF

Esta propriedade torna-se verdadeira quando


estivermos no primeiro registro e utilizarmos o mtodo
MovePrevious, ou seja, indica uma tentativa de
voltarmos alm do primeiro registro. somente leitura.

Bookmark

Retorna um marcador (bookmark) que identifica de


maneira nica cada registro do RecordSet. Tambm
pode ser utilizado para tornar o registro identificado
pelo Bookmark como o Registro Corrente. Nem todas as
fontes de dados e seus respectivos OLE DB Providers
oferecem esta propriedade.

CacheSize

Indica o nmero de registros do RecordSet que devem


ser mantidos no Cache local de memria. Tambm pode
ser utilizada para definir este nmero de registros.

CursorLocation

Pode ser utilizada para definir ou retornar a posio do


Cursor.

CursorType

Indica o tipo de Cursor utilizado em um objeto


RecordSet. Tambm pode ser utilizada para definir o
tipo de Cursor. Deve ser utilizada antes do mtodo
Open, caso contrrio ir provocar um erro quando a
pgina for carregada.

EditMode

Retorna um valor que indica o status de edio do


registro atual. Este valor pode ser: 0 indica que no
existe edio em andamento; 1 indica que os dados
do registro atual foram modificados, porm ainda no
foram salvos; 2 indica que o mtodo AddNew foi
chamado e o registro que est sendo criado, ainda no
foi salvo no banco de dados; 4 indica que o registro
atual foi deletado. somente leitura.

EOF

Esta propriedade torna-se verdadeira quando


estivermos no ltimo registro e utilizarmos o mtodo
MoveNext, ou seja, indica uma tentativa de avanarmos
alm do ltimo registro. somente leitura.

344

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

Propriedade

Descrio

Filter

Pode ser utilizada para filtrar os registros de um


RecordSet de acordo com um critrio definido.
Falaremos sobre esta propriedade mais adiante.
Tambm sero mostrados alguns exemplos prticos.

LockType

Indica o tipo de Lock que est sendo utilizado. Tambm


pode ser utilizada para definir o tipo de Lock, antes que
o mtodo Open tenha sido utilizado.

MaxRecords

Define o nmero mximo de registros que uma consulta


deve retornar para o objeto RecordSet. O valor padro
zero, o que significa sem limite de registros.

PageCount

Indica quantas pginas de dados o objeto RecordSet


contm. somente leitura.

PageSize

Indica o nmero de registros por pgina.

RecordCount

Indica o nmero de registros do objeto RecordSet.


somente leitura.

Sort

Especifica um ou mais campos para ordenao do


RecordSet, alm do tipo de ordenao se ascendente
ou descendente. Para utilizarmos esta propriedade
devemos utilizar o Cursor no cliente.

Source

Indica as fontes dos dados de um objeto RecordSet.


Por exemplo, exibe a instruo SQL que deu origem
aos dados ou o nome da tabela ou consulta que
originou os dados do objeto RecordSet.

State

Indica o estado do objeto RecordSet. Indica se o mesmo


est aberto, fechado ou executando uma operao de
maneira assncrona. somente leitura.

Mtodos do Objeto RecordSet


O objeto RecordSet nos fornece diversos mtodos, os quais podem ser utilizados para nos
deslocar atravs dos registros, fazer uma cpia do RecordSet, etc. Para utilizarmos um mtodo
do objeto RecordSet, utilizamos a seguinte sintaxe:
<% RecordSet.nome_do_mtodo parmetro1, parmetro2, ..., parmetron

Na Tabela 6.10 esto listados os principais mtodos do objeto RecordSet.

345

%>

Criando Sites Dinmicos com ASP 3.0

Tabela 6.10 Principais mtodos do objeto RecordSet.


Mtodo

Descrio

AddNew

Utilizado para adicionar um novo registro em um


RecordSet que seja atualizvel.

Cancel

Cancela a execuo de uma operao Open assncrona.

CancelBatch

Cancela uma operao de atualizao em Batch.

CancelUpdate

Cancela qualquer alterao feita no Registro Corrente,


ou alteraes feitas em um novo registro antes da
chamada do mtodo Update.

Clone

Cria uma cpia do objeto RecordSet.

Close

Fecha o objeto RecordSet e todos os objetos dele


dependentes.

Delete

Elimina o registro corrente ou um grupo de registros


selecionados.

Find

Pesquisa no RecordSet por um registro que atende um


critrio especificado.

GetRows

Retorna registros de um RecordSet e os armazena em


um array.

GetString

Retorna todo o RecordSet como uma String.

Move

Movimenta o indicador de registro a partir de uma


posio especificada de um determinado nmero de
registros. Por exemplo, posso movimentar o indicador
dez registros a partir do registro 10, com isso o
indicador fica no registro 20.

MoveFirst

Movimenta o indicador para o primeiro registro.

MoveLast

Movimenta o indicador para o ltimo registro.

MoveNext

Movimenta o indicador para o prximo registro.

MovePrevious

Movimenta o indicador para o registro anterior.

Open

Abre o objeto RecordSet.

Requery

Atualiza o conjunto de registros do RecordSet,


executando novamente a consulta que deu origem ao
RecordSet.

346

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

Mtodo

Descrio

Resync

Atualiza os dados do RecordSet, buscando os dados a


partir do banco de dados.

Save

Salva o contedo do RecordSet em um arquivo.

Update

Salva quaisquer alteraes que tenham sido feitas para


o objeto RecordSet.

Agora vamos aprender a executar algumas operaes bastante comuns em aplicaes Web.
Aprenderemos a inserir, excluir e alterar um determinado registro.

Uma Pgina ASP Para Inserir


Informaes no Banco de Dados
Neste exemplo aprenderemos a construir uma pgina ASP que recebe os dados digitados em
um formulrio HTML e os armazena no registro de uma tabela. Tambm faremos a validao
para verificar se todos os campos obrigatrios foram preenchidos. Caso algum campo
obrigatrio no tenha sido preenchido, devolvemos o formulrio para o usurio informando
qual ou quais campos obrigatrios no foram preenchidos. Caso todos os campos tenham
sido preenchidos corretamente, os valores digitados sero gravados no banco de dados.
Podemos utilizar este exemplo para criar um formulrio de cadastro de usurios ou qualquer
outra aplicao que necessite armazenar os dados digitados em um formulrio.

NOTA
Eu, por exemplo, utilizo uma aplicao deste tipo para fazer a avaliao dos treinamentos que
ministro em todo o pas. Ao final do treinamento, os usurios, sem se identificar, preenchem
um formulrio com as opinies sobre o treinamento, o material e o desempenho do instrutor.
Estes dados so armazenados diretamente em um banco de dados do Microsoft Access, a
partir do qual fao uma srie de estatsticas.

Na Listagem 6.2 temos o cdigo HTML para a criao do formulrio de cadastro, no qual o
usurio poder digitar os dados.
Listagem 6.2 O formulrio para digitao dos dados cadastro.htm.
1

<HTML>

<HEAD>

347

Criando Sites Dinmicos com ASP 3.0

<TITLE>Cadastro de novos Clientes !!</TITLE>

</HEAD>

<BODY bgColor=#c0c0c0>

<P>

<FONT color=white size=6 style=BACKGROUND-COLOR: navy>

<B>Empresa ABC Ltda. - (0-xx-11-1111-2222)</B>

</FONT>

10

</P>

11

<P>

12

<FONT color=#ffffff size=5 style=BACKGROUND-COLOR: darkred>

13

<B><EM>CADASTRO DE NOVOS CLIENTES:</EM></B>

14

</FONT>

15

</P>

16

<P>

17

<FONT color=navy size=4>

18

<EM>Digite os dados solicitados e clique no boto Enviar.</EM>

19

</FONT>

20

</P>

21

<P>

22

<FORM ACTION=cadastro.asp METHOD=POST>

23 <TABLE bgColor=#ffffff border=1 cellPadding=1 cellSpacing=1 width=100%


style=HEIGHT: 161px; WIDTH: 340px>
24

<TR>

25

<TD>Nome:</TD>

26

<TD><INPUT id=nome maxLength=50 name=nome size=35>&nbsp;

27
28
29

<FONT color=red><B>(*)</B></FONT></TD>
</TR>
<TR>

30

<TD>Rua:</TD>

31

<TD><INPUT id=rua maxLength=30 name=rua size=35>

32
33

<FONT color=red><B>(*)</B></FONT></TD>
</TR>

348

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

34

<TR>

35

<TD>Bairro:</TD>

36

<TD><INPUT id=bairro maxLength=20 name=bairro>

37
38
39

<FONT color=red><B>(*)</B></FONT></TD>
</TR>
<TR>

40

<TD>Cidade:</TD>

41

<TD><INPUT id=cidade maxLength=25 name=cidade size=25>

42

<FONT color=red><B>(*)</B></FONT></TD>

43
44

</TR>
<TR>

45

<TD>CEP:</TD>

46

<TD><INPUT id=cep maxLength=10 name=cep size=10>&nbsp;

47

<FONT color=red><FONT color=#000000>nnnnn-nnn

48
49
50

</FONT><B>(*)</B></FONT></TD>
</TR>
<TR>

52

<TD>Fone:</TD>

53

<TD><INPUT id=fone maxLength=20 name=fone></TD>

54
55

</TR>
<TR>

56
57
58

<TD>Fax:</TD>
<TD><INPUT id=fax maxLength=20 name=fax></TD></TR>
<TR>

59

<TD>Carto:</TD>

60

<TD>

61

<INPUT id=cartaotipo name=cartaotipo type=radio value=Visa>Visa

62
Card

<INPUT id=cartaotipo name=cartaotipo type=radio value=Master_Card>Master

63

<INPUT id=cartaotipo name=cartaotipo type=radio value=Outros>Outros

64

<FONT color=red><B>(*)</B></FONT>

65

</TD>

66

</TR>

67

<TR>

68

<TD colSpan=2>

349

Criando Sites Dinmicos com ASP 3.0

69

<INPUT id=enviar name=enviar style=HEIGHT: 24px; WIDTH:109px


type=submit value=Enviar dados.>

70

<INPUT id=limpar name=limpar type=submit value=Limpar


formulrio.>

71

</TD>

72

</TR>

73

</TABLE>

74

</FORM>

75

</P><BR>

76

<FONT color=red><B>(*)

77

<FONT color=navy>Campos de preenchimento obrigatrio.</FONT></B></FONT>

78

</BODY>

79

</HTML>

Ao carregarmos o exemplo da Listagem 6.2, obteremos o resultado indicado na Figura 6.3.

Figura 6.3: O formulrio para digitao dos dados.

350

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

Agora precisamos construir a pgina cadastro.asp, a qual ir verificar se todos os campos de


preenchimento obrigatrio foram preenchidos. Se todos os campos obrigatrios foram
preenchidos, os dados sero gravados em um banco de dados, caso contrrio o formulrio
enviado para o usurio, solicitando que o mesmo preencha os campos que esto faltando.
Para armazenar os dados, utilizaremos um banco de dados do Microsoft Access clientes.mdb.
Este banco de dados est gravado em C:\Meus documentos. Neste banco de dados temos uma
tabela chamada Cadastro, com a estrutura indicada na Figura 6.4.

Figura 6.4: Tabela Cadastro do banco de dados Clientes.


Para acessar este banco de dados utilizaremos OLE DB, sem a necessidade da criao de uma
fonte ODBC. Faremos isto atravs da utilizao da propriedade ConnectionString, j descrita
neste captulo.
A pgina cadastro.asp far o seguinte:
Estabelece conexo com o banco de dados clientes.mdb e cria um RecordSet chamado
Cadastro, o qual est ligado tabela Cadastro do banco de dados.
Depois a pgina verifica se algum campo obrigatrio no foi preenchido.
Caso todos os campos obrigatrios tenham sido preenchidos, os dados so gravados
na tabela Cadastro do banco de dados clientes.mdb.
Caso algum campo obrigatrio no tenha sido preenchido, a pgina ASP informa quais
campos obrigatrios no foram preenchidos, e retorna o formulrio para o usurio,

351

Criando Sites Dinmicos com ASP 3.0

mantendo os campos que j haviam sido preenchidos, para que o usurio possa
preencher somente os campos que esto faltando.
Na Listagem 6.3 temos o cdigo para a pgina cadastro.asp.
Listagem 6.3 Pgina ASP para processamento dos dados cadastro.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

<BODY>

<%

O primeiro passo criar a conexo com o banco de dados

Para isto crio um objeto do tipo Connection

10

Cria um objeto do tipo ADODB.Connection

11

Set conn=Server.CreateObject(ADODB.Connection)

12

Agora abro uma conexo com o arquivo clientes.mdb

13

utilizando OLE DB.

14

conn.ConnectionString = PROVIDER=MICROSOFT.JET.OLEDB.4.0;

15

conn.Open

16

Agora criamos um objeto RecordSet.

17

Este objeto ir acessar a tabela Cadastro.

18

Set Cadastro = Server.CreateObject(ADODB.Recordset)

19

Cadastro.Open Cadastro, conn, 3, 3

20

Neste ponto tenho o objeto Cadastro ligado com a tabela

21

Cadastro do banco de dados clientes.mdb.

22

**************************************************

23

Inicia a verificao para saber se todos

24

os campos obrigatrios foram preenchidos.

DATA SOURCE=c:\meus documentos\clientes.mdb

**************************************************

352

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

25

Atribuo os campos obrigatrios variveis, para facilitar a verificao.

26

nome=Request.Form(nome)

27

rua =Request.Form(rua)

28

bairro=Request.Form(bairro)

29

cidade=Request.Form(cidade)

30

cep=Request.Form(cep)

31

cartao=Request.Form(cartaotipo)

32

Verifica se os campos obrigatrio foram preenchidos.

33

Qualquer dado obrigatrio que no tenha sido preenchido,

34

definir a varivel faltou_dado em Sim.

35

If (nome=)Then

36

mensagem_nome=Preencha o campo Nome:

37

faltou_dado=Sim

38

faltou_nome=Sim

39

End If

40

If (rua=)Then

41

mensagem_rua=Preencha o campo Rua:

42

faltou_dado=Sim

43

faltou_rua=Sim

44

End If

45

If (bairro=)Then

46

mensagem_bairro=Preencha o campo Bairro:

47

faltou_dado=Sim

48

faltou_bairro=Sim

49

End If

50

If (cidade=)Then

51

mensagem_cidade=Preencha o campo Cidade:

52

faltou_dado=Sim

53

faltou_cidade=Sim

54

End If

55

If (cep=)Then

56

mensagem_cep=Preencha o campo CEP:

57

faltou_dado=Sim

58

faltou_cep=Sim

353

Criando Sites Dinmicos com ASP 3.0

59

End If

60

If (cartao=)Then

61

mensagem_cartao=Preencha o campo Carto:

62

faltou_dado=Sim

63

faltou_cartao=Sim

64

End If

65

Caso todos os campos obrigatrios tenham sido

66

preenchidos, gravo os dados no banco de dados.

67

e informo que a operao foi realizada com sucesso.

68

If faltou_dado<>Sim Then

69

Cadastro.AddNew

70

Cadastro.Fields(Nome)= Request.Form(nome)

71

Cadastro.Fields(Rua)= Request.Form(rua)

72

Cadastro.Fields(Bairro)= Request.Form(bairro)

73

Cadastro.Fields(Cidade)= Request.Form(cidade)

74

Cadastro.Fields(Cep)= Request.Form(cep)

75

Cadastro.Fields(Fone)= Request.Form(fone)

76

Cadastro.Fields(Fax)= Request.Form(fax)

77

Cadastro.Fields(Cartao)= Request.Form(cartaotipo)

78

Cadastro.Update

79

Cadastro.Close

80

Set Cadastro = Nothing

81

Response.Write CLIENTE CADASTRADO COM SUCESSO<BR>

82

Response.Write <A href=cadastro.htm>Clique aqui para cadastrar outro


cliente</A>

83
84

Response.Write <HR>
End If

85

Caso algum dado obrigatrio no tenha sido digitado

86

Envia o formulrio de volta para o cliente,

87

preservando os valores que o mesmo j digitou.

88

Observe que utilizamos Response.Write para ir

89

recriando todo o formulrio.

90

Tambm observe que o formulrio enviado de volta

91

na pgina cadastro.asp e que o atributo action

92

da tag FORM definido como cadastro.asp, ou seja

354

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

93

a pgina cadastro.asp chama a si mesma aps o

94

usurio clicar no boto Enviar.

95

Esta uma tcnica bastante interessante.

96

Antes de enviar o formulrio, informamos quais

97

os campos obrigatrio que no foram preenchidos.

98

If faltou_nome=Sim Then

99

Response.Write <B>O campo Nome deve ser preenchido.</B> <BR>

100

End If

101

If faltou_rua=Sim Then

102
103

Response.Write <B>O campo Rua deve ser preenchido.</B> <BR>


End If

104 If faltou_cidade=Sim Then


105

Response.Write <B>O campo Cidade deve ser preenchido.</B> <BR>

106

End If

107

If faltou_bairro=Sim Then

108

Response.Write <B>O campo Bairro deve ser preenchido.</B> <BR>

109

End If

110

If faltou_cep=Sim Then

111

Response.Write <B>O campo CEP deve ser preenchido.</B> <BR>

112 End If
113

If faltou_cartao=Sim Then

114

Response.Write <B>O campo Carto deve ser preenchido.</B> <BR>

115

End If

116

%>

117 <%
118 Comeo a reenviar o formulrio para o usurio, utilizando Response.Write.
119 Caso esteja faltando algum dado, envio o formulrio
120 para o usurio preencher os campos que esto faltando.
121 Os valores j digitados, so preservados.
122 %>
123 <% If faltou_dado=Sim Then

355

Criando Sites Dinmicos com ASP 3.0

124 Response.Write <BODY bgColor=#c0c0c0>


125 Response.Write <P><FONT color=white size=6 style=BACKGROUND-COLOR:
navy><STRONG>Empresa ABC LTDA -
126 Response.Write (0-xx-11-1111-2222)<BR>

127 Response.Write </STRONG></FONT><FONT color=#000000><FONT size=5


><STRONG><EM>CADASTRO DE NOVOS
128 Response.Write CLIENTES:</EM></STRONG></FONT> <BR></FONT><FONTcolor=navy
size=4><EM>Digite os dados solicitados e clique no boto
129 Response.Write Enviar.</EM></FONT></P>
130 Response.Write <P>
131 Response.Write Caso queira alterar algum dado
132 Response.Write digite no formulrio abaixo.<BR>
133 Response.Write <FORM ACTION=cadastro.asp METHOD=post id=form1 name=form1>
134 Response.Write <TABLE bgColor=#ffffff border=1 cellPadding=1 cellSpacing=1
width=100% style=HEIGHT: 161px; WIDTH: 340px>
135 Response.Write <TR>
136 Response.Write <TD>Nome:</TD>
137 Response.Write <TD><INPUT id=nome maxLength=50 name=nome size=35 value= &
Chr(34) & Request.Form(nome) & Chr(34) & >&nbsp;<FONT
138 Response.Write color=red><B>(*)</B></FONT></TD></TR>
139 Response.Write <TR>
140 Response.Write <TD>Rua:</TD>
141 Response.Write <TD><INPUT id=rua maxLength=30 name=rua size=35 value= &
Chr(34) & Request.Form(rua) & Chr(34) & ><FONT Color=red><B>(*)</B></FONT></
TD></TR>
142 Response.Write <TR>
143 Response.Write <TD>Bairro:</TD>
144 Response.Write <TD><INPUT id=bairro maxLength=20 name=bairro value= & Chr(34)
& Request.Form(bairro) & Chr(34) &><FONT
145 Response.Write color=red><B>(*)</B></FONT></TD></TR>
146 Response.Write <TR>
147 Response.Write <TD>Cidade:</TD>
148 Response.Write <TD><INPUT id=cidade maxLength=25 name=cidade value= &
Chr(34) & Request.Form(cidade) & Chr(34)
149 Response.Write size=25><FONT color=red><B>(*)</B></FONT></TD></TR>

356

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

150 Response.Write <TR>


151 Response.Write <TD>CEP:</TD>
152 Response.Write <TD><INPUT id=cep maxLength=10 name=cep value= & Chr(34)& 153
Request.Form(cep)& Chr(34)
154 Response.Write size=10>&nbsp;<FONT color=red><FONT color=#000000>nnnnn-nnn
155 Response.Write </FONT><B>(*)</B></FONT></TD></TR>
156 Response.Write <TR>
157 Response.Write <TD>Fone:</TD>
158 Response.Write <TD><INPUT id=fone maxLength=20 name=fone value= & Chr(34) & 159
Request.Form(fone) & Chr(34) & ></TD></TR>
160 Response.Write <TR>
161 Response.Write <TD>Fax:</TD>
162 Response.Write <TD><INPUT id=fax maxLength=20 name=fax value= & Chr(34) &
Request.Form(fax) & Chr(34) & ></TD></TR>
163 Response.Write <TR>
164 Response.Write <TD>Carto:</TD>
165
166
167
168

If Request.Form(cartaotipo)=Visa Then
Response.Write <TD><INPUT id=cartaotipo name=cartaotipo type=radio
CHECKED>Visa
Else
Response.Write <TD><INPUT id=cartaotipo name=cartaotipo
type=radio>Visa

169

End If

170

If Request.Form(cartaotipo)=Master Card Then

171
172
173

Response.Write <INPUT id=cartaotipo name=cartaotipo type=radio


CHECKED>Master Card <INPUT id=cartaotipo
Else
Response.Write <INPUT id=cartaotipo name=cartaotipo type=radio>Master
Card <INPUT id=cartaotipo

174

End If

175

If Request.Form(cartaotipo)=Outros Then

176
177
178
179

Response.Write name=cartaotipo type=radio CHECKED>Outros


Else
Response.Write name=cartaotipo type=radio>Outros
End If

180 Response.Write <FONT color=red><B>(*)</B></FONT></TD></TR>


181 Response.Write <TR>

357

Criando Sites Dinmicos com ASP 3.0

182 Response.Write <TD colSpan=2><INPUT id=enviar name=enviar style=HEIGHT: 24px;


WIDTH: 109px type=submit value=Enviar_dados.>&nbsp;
183 Response.Write <INPUT id=limpar name=limpar type=submit
value=Limpar_formulrio.></TD></TR>
184 Response.Write </TABLE>
185 Response.Write </FORM>
186 Response.Write </P><FONT color=red><B>(*) <FONT color=navy>Campos de
preenchimento
187 Response.Write obrigatrio.</FONT></B></FONT>
188 End If
189 %>
190 </BODY>
191 </HTML>

NOTA
Algumas linhas aparecem divididas em duas ou mais linhas. Nunca demais lembrar que
estas linhas devem ser digitadas como uma linha nica. As mesmas esto exibidas em duas ou
mais linhas apenas por questo de espao.

Algumas observaes sobre a Listagem 6.3:


A primeira observao a ser feita a respeito do cdigo que insere um novo registro na
tabela Cadastro do Banco de dados clientes.mdb. O cdigo ASP que realiza esta tarefa
o seguinte:
68 If faltou_dado<>Sim Then
69

Cadastro.AddNew

70

Cadastro.Fields(Nome)= Request.Form(nome)

71

Cadastro.Fields(Rua)= Request.Form(rua)

72

Cadastro.Fields(Bairro)= Request.Form(bairro)

73

Cadastro.Fields(Cidade)= Request.Form(cidade)

74

Cadastro.Fields(Cep)= Request.Form(cep)

75

Cadastro.Fields(Fone)= Request.Form(fone)

76

Cadastro.Fields(Fax)= Request.Form(fax)

77

Cadastro.Fields(Cartao)= Request.Form(cartaotipo)

78

Cadastro.Update

79

Cadastro.Close

80

Set Cadastro = Nothing

81

Response.Write CLIENTE CADASTRADO COM SUCESSO<BR>

82

Response.Write <A href=cadastro.htm>Clique aqui para cadastrar outro


cliente</A>

83

Response.Write <HR>

84 End If

358

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

Neste cdigo, utilizamos o mtodo AddNew do objeto RecordSet Cadastro. Depois vamos
preenchendo cada novo campo do registro, com o respectivo valor preenchido pelo usurio
no formulrio. No final, utilizamos o mtodo Update para salvar o registro na tabela.
O mtodo Close utilizado para fechar o RecordSet Cadastro e, por fim, tiramos o objeto
Cadastro da memria. Isto feito atribuindo-se o valor Nothing para o objeto Cadastro.
importante lembrar que para atribuir valor para um objeto, devemos utilizar o operador Set,
caso contrrio obteremos uma mensagem de erro.
Tambm gostaria de observar a situao em que o usurio deixa de preencher algum
campo obrigatrio. Neste caso, o usurio informado a respeito de qual ou quais campos no foram preenchidos. O formulrio retornado para o usurio, juntamente com
os valores j digitados, para que o usurio no precise redigitar todos os valores
novamente. Observe que todo o cdigo HTML que gera o formulrio retornado
utilizando-se Response.Write da linha 124 linha 189.
Vamos testar o funcionamento da pgina cadastro.asp.
Na Figura 6.5, o usurio preencheu alguns campos, porm no preencheu os campos
obrigatrios Bairro e Rua.

Figura 6.5: Os campos obrigatrios Bairro e Rua no foram preenchidos.


Ao clicar no boto Enviar dados, a pgina cadastro.asp detecta que alguns campos obrigatrios
no foram preenchidos e informa isto ao usurio, conforme indicado na Figura 6.6.

359

Criando Sites Dinmicos com ASP 3.0

Figura 6.6: O usurio informado que alguns campos obrigatrios no foram preenchidos.
Agora o usurio preenche os campos obrigatrios que esto faltando, conforme indicado na
Figura 6.7.

Figura 6.7: O usurio preenche os campos que esto faltando.

360

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

Ao clicar em Enviar dados, as informaes sero salvas no banco de dados. A pgina


cadastro.asp informa que os dados foram salvos com sucesso e retorna um link para que o
usurio possa voltar ao formulrio de cadastro e cadastrar outro cliente, conforme indicado
na Figura 6.8.

Figura 6.8: O cliente foi cadastrado com sucesso.

Editando Registros em um Banco de Dados


Neste tpico aprenderemos a criar uma pgina ASP que atualiza um registro do banco de dados.
Nosso exemplo ser composto dos seguintes elementos:
Uma pgina ASP produto.asp, onde temos um campo com a listagem de produtos
disponveis na tabela Produtos, do banco de dados Nwind. Esta listagem ser construda
dinamicamente, isto , cada vez que a pgina for carregada, a listagem ser construda a
partir das informaes disponveis na tabela Produtos.
Aps selecionar o produto a ser alterado, o usurio clica em um boto Localizar produto.
Feito isso, a pgina produto.asp chama uma pgina chamada localiza.asp, que localiza
o registro selecionado no banco de dados. Com isso, o usurio pode alterar os dados do
produto.
Aps alterar os dados desejados, o usurio clica em um boto Atualizar produto. A
pgina localiza.asp chama a pgina atualiza.asp, que acessa o banco de dados e faz as
alteraes solicitadas pelo usurio. Ao final emitida uma mensagem indicando que
os dados foram atualizados com sucesso.

NOTA
Existem maneiras mais simples para executar este procedimento. Optei pela utilizao de trs
pginas, para que os passos envolvidos ficassem bem claros. O cdigo ASP tambm foi
desenvolvido de uma maneira didtica, visando facilitar o entendimento do mesmo.

361

Criando Sites Dinmicos com ASP 3.0

A Pgina ASP Para Selecionar o Produto a ser Alterado produto.asp


Na Listagem 6.4 temos o cdigo ASP para a criao da pgina produto.asp.
Listagem 6.4 A pgina ASP para selecionar o produto a ser alterado produto.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

<TITLE>Selecione o produto a ser alterado.</TITLE>

</HEAD>

<BODY>

<%

O primeiro passo criar a conexo com o banco de dados.

Para isto crio um objeto do tipo Connection.

10

Cria um objeto do tipo ADODB.Connection

11

Set conn=Server.CreateObject(ADODB.Connection)

12

Agora abro uma conexo com o arquivo nwind.mdb

13

utilizando OLE DB.

14

conn.ConnectionString = PROVIDER=MICROSOFT.JET.OLEDB.4.0;

15

conn.Open

16

Agora criamos um objeto RecordSet.

17

Este objeto ir acessar o campo ProductName

18

da tabela Produtos

19

Set Produtos = Server.CreateObject(ADODB.Recordset)

20

Produtos.Open Select ProductName from Produtos Order By ProductName, conn, 3, 3

21

Neste ponto tenho o objeto Produtos ligado com a tabela

22

Produtos do banco de dados nwind.mdb.

23

%>

DATA SOURCE=c:\meus documentos\nwind.mdb

362

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

24

<P><B>Selecione o produto a ser alterado.</B></P>

25

<P><B><I>Depois clique no boto Localizar Produto.</I></B></P>

26

<FORM action=localiza.asp method=post>

27

<SELECT id=listaprodutos name=listaprodutos>

28

<%

29

Agora construo a lista de opes a partir dos

30

dados obtidos da tabela Produtos.

31

Para cada produto obtido, crio uma nova opo

32

na lista.

33

Do While Not Produtos.EOF

34

Response.Write <OPTION value= & Chr(34) & Produtos.Fields(ProductName) &


Chr(34) & > & Produtos.Fields(ProductName)& </OPTION>

35

Produtos.MoveNext

36

Loop

37

%>

38

</SELECT>

39

<BR>

40

<BR>

41

<HR>

42

<INPUT type=submit value=Localizar Produto id=Localizar name=Localizar>

43

</FORM>

44

</BODY>

45

</HTML>

Para esta listagem vamos comentar apenas o cdigo ASP que constri a lista com os nomes de
produtos disponveis.
Lembrando da nossa reviso de HTML, o cdigo para construir uma Caixa de combinao
o seguinte:
<SELECT id=select1 name=Item1>
<OPTION value=Item1>Item1</OPTION>
<OPTION value=Item2>Item2</OPTION>

363

Criando Sites Dinmicos com ASP 3.0

<OPTION value=Item3>Item3</OPTION>
</SELECT>

Neste exemplo temos uma lista com trs itens. Para cada produto encontrado devemos criar
um item da lista, o que feito com as tags <OPTION> </OPTION>. Por exemplo, para o
produto Alice Mutton, teramos que criar a seguinte opo:
<OPTION value=Alice Mutton>Alice Mutton</OPTION>

A primeira vez que aparece o nome value=Alice Mutton a designao do nome associado
com cada opo. Na segunda vez que aparece o nome, a definio do texto que ser exibido
na lista. Para construir esta lista dinamicamente, utilizamos o seguinte cdigo ASP:
33

Do While Not Produtos.EOF

34

Response.Write <OPTION value= & Chr(34) & Produtos.Fields(ProductName) &


Chr(34) & > & Produtos.Fields(ProductName)& </OPTION>

35
36

Produtos.MoveNext
Loop

Para preencher a lista com os nomes do produto, utilizamos Produtos.Fields(ProductName),


com isso, vou construindo uma nova opo da lista, para cada nome de produto encontrado
na tabela Produtos. justamente isto que queremos. A construo dinmica de listas bastante
til, sendo que esta tcnica pode ser aplicada em diversas situaes prticas no
desenvolvimento de aplicaes Web.

IMPORTANTE
Observe que utilizamos Chr(34) antes e depois de Produtos.Fields(ProductName), na definio
do atributo value, conforme indicado a seguir: Chr(34) & Produtos.Fields(ProductName) & Chr(34)

Isto feito para tratar o caso de nomes de produtos que tem espao em branco no nome. Se
no utilizssemos as aspas (Chr(34)), somente o primeiro nome do produto seria utilizado.
Por exemplo, um produto ch mate, seria truncado em ch. Com isso, na hora de pesquisar o
nome do produto, no iramos encontr-lo na tabela Produtos.
Ao carregarmos a pgina produto.asp, obteremos o resultado indicado na Figura 6.9.
Nesta pgina o usurio seleciona o produto a ser alterado, conforme indicado na Figura 6.10,
onde o usurio selecionou o produto Camembert Pierrot. Aps selecionar o produto, o usurio
clica no boto Localizar Produto. Ao fazer isso, chamada a pgina localiza.asp, que ir
carregar o registro correspondente ao produto selecionado.

364

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

Figura 6.9: A pgina produto.asp.

Figura 6.10: O usurio seleciona um produto na lista de produtos.

A Pgina que Localiza o Registro do


Produto a ser Atualizado localiza.asp
A pgina localiza.asp indicada na Listagem 6.5.

365

Criando Sites Dinmicos com ASP 3.0

Listagem 6.5 Pgina ASP que carrega o registro a ser alterado.


1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

<TITLE>Altere os dados do produto.</TITLE>

<BODY>

<%

O primeiro passo criar a conexo com o banco de dados.

Para isto crio um objeto do tipo Connection.

10

Cria um objeto do tipo ADODB.Connection

11

Set conn=Server.CreateObject(ADODB.Connection)

12

Agora abro uma conexo com o arquivo nwind.mdb

13

utilizando OLE DB.

14

conn.ConnectionString = PROVIDER=MICROSOFT.JET.OLEDB.4.0;

15

conn.Open

16

Agora criamos um objeto RecordSet.

17

Este objeto ir acessar os campos

18

da tabela Produtos

19

Set Produtos = Server.CreateObject(ADODB.Recordset)

20

inst_sql=Select * from Produtos WHERE Produtos.ProductName= &


Request.Form(listaprodutos)&

21

Produtos.Open inst_sql,conn,3,3

22

Neste ponto tenho o objeto Produtos ligado com a tabela

23

Produtos do banco de dados nwind.mdb.

DATA SOURCE=c:\meus documentos\nwind.mdb

24

%>

25

<P><FONT color=navy size=5><STRONG>Altere os campos que


forem necessrios.</STRONG></FONT></P>

26

<P><I><B><FONT size=4>
Depois clique no boto Atualizar Produto</FONT>.</B></I></P>

366

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

27

<FORM action=atualiza.asp method=post>

28

<%

29

Agora construo o formulrio e exibo os dados

30

do produto para que o usurio possa alterar

31

os campos que forem necessrios.

32

%>

33

<TABLE>

34

<%

35

Response.Write <TR><TD>Cdigo:</TD><TD><INPUT id=ProductID maxLength=10


name=ProductID size=10 value= & Chr(34)& Produtos.Fields(ProductID) & Chr(34)&
></TD></TR>

36

Response.Write <TR><TD>Nome:</TD><TD><INPUT id=ProductName maxLength=35


name=ProductName size=35 value= & Chr(34)& Produtos.Fields(ProductName) &
Chr(34)& ></TD></TR>

37

Response.Write <TR><TD>Fornecedor:</TD><TD><INPUT id=SupplierID maxLength=30


name=SupplierID size=15 value= & Chr(34) & Produtos.Fields(SupplierID) &
Chr(34) & ></TD></TR>

38

Response.Write <TR><TD>Categoria:</TD><TD><INPUT id=CategoryIDmaxLength=10 name=


CategoryID size=10 value= & Chr(34) & Produtos.Fields(CategoryID) & Chr(34)
& ></TD></TR>

40

Response.Write <TR><TD>Quant/unid:</TD><TD><INPUT id=QuantityPerUnit maxLength=20


name=QuantityPerUnit size=20 value= & Chr(34) & Produtos.Fields(QuantityPerUnit) &
Chr(34) & ></TD></TR>

41

Response.Write <TR><TD>Preo Unit:</TD><TD><INPUT id=UnitPrice 42


maxLength=10 name=UnitPrice size=10 value= & Chr(34) & 43 Produtos.Fields
(UnitPrice) & Chr(34) & ></TD></TR>

42

Response.Write <TR><TD>Estoque:</TD><TD><INPUT id=UnitsInStockmaxLength=10


name=UnitsInStock size=10 value= & Chr(34) & Produtos.Fields(UnitsInStock) &
Chr(34) & ></TD></TR>

43

Response.Write <TR><TD>Unid. Pedid:</TD><TD><INPUT id=UnitsOnOrder maxLength=10


name=UnitsOnOrder size=10 value= & Chr(34) & 45Produtos.Fields(UnitsOnOrder) &
Chr(34) & ></TD></TR>

367

Criando Sites Dinmicos com ASP 3.0

44

Response.Write <TR><TD>Nvel Ordenao:</TD><TD><INPUT id=ReorderLevel maxLength=10


name=ReorderLevel size=10 value= & Chr(34) & Produtos.Fields(ReorderLevel) &
Chr(34) & ></TD></TR>

45

Response.Write <TR><TD>Descontinuado:</TD><TD><INPUT id=Discontinued maxLength=10


name=Discontinued size=10 value= & Chr(34) & Produtos.Fields(Discontinued) &
Chr(34) & ></TD></TR>

46

%>

47

</TABLE>

48

<BR>

49

<HR>

50

<INPUT type=submit value=Atualizar Produto id=Atualizar name=Atualizar>

51

</FORM>

52

</BODY>

53

</HTML>

NOTA
Algumas linhas aparecem divididas em duas ou mais linhas. Nunca demais lembrar que as
mesmas devem ser digitadas como uma linha nica; apenas esto exibidas, em duas ou mais
linhas, por questo de espao.

Alguns comentrios sobre o cdigo:


Primeiro vamos tratar da construo da instruo SQL, conforme indicado no seguinte
trecho de cdigo:
20 inst_sql=Select * from Produtos WHERE Produtos.ProductName= &
Request.Form(listaprodutos)&

Esta uma instruo SQL, que utiliza a clusula WHERE para pesquisar apenas o registro
cujo nome do produto foi selecionado na lista de produtos. Vamos supor que o usurio tenha
selecionado o produto Geitost. A instruo SQL para localizar o registro para este produto,
deve ser a seguinte:
Select * from Produtos WHERE Produtos.ProductName=Geitost

Observe no cdigo da linha 20 que colocamos o apstrofe logo aps o sinal de igual (=), depois
utilizamos Request.Form(listaprodutos), para capturar o valor do produto que o usurio
selecionou na lista de produtos e, finalmente, anexamos o apstrofe final ( ). Com isso o cdigo
ASP monta a instruo SQL correta, seja qual for o produto selecionado na lista de produtos.
Um detalhe importante a ser observado que o critrio, quando for um campo de texto, deve vir
entre os sinais de apstrofe. J para um campo do tipo data, o critrio deve vir entre os sinais #.

368

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

Uma vez montada a instruo SQL corretamente, a mesma passada como parmetro para o
mtodo Open do RecordSet Produtos. Com isso, apenas o registro para o produto selecionado,
ser retornado pelo banco de dados.
Aps termos recuperado o registro para o produto selecionado, passamos a montar um
formulrio, onde so exibidos os diversos campos do produto selecionado. Observe
que utilizamos uma tabela para facilitar o posicionamento e o alinhamento dos campos. Cada uma das linhas da tabela, possui duas colunas: uma onde vai a descrio do
campo e outra que exibe o campo propriamente dito. No exemplo abaixo, montada a
primeira linha da tabela, onde exibido o campo ProductID:
35 Response.Write <TR><TD>Cdigo:</TD><TD><INPUT id=ProductID maxLength=10
name=ProductID size=10 value= & Chr(34)& Produtos.Fields(ProductID) &
Chr(34)& ></TD></TR>

Uma linha semelhante utilizada para todos os demais campos do produto selecionado.
Na Figura 6.11, o usurio selecionou o produto Queso Cabrales.

Figura 6.11: O usurio seleciona o produto a ser alterado.


Ao clicar no boto Localizar Produto, ser chamada a pgina localiza.asp, a qual localiza o
registro do produto selecionado e exibe o mesmo em um formulrio, para que o usurio
possa alterar os campos que forem necessrios, conforme indicado na Figura 6.12.
O usurio pode alterar um ou mais campos, simplesmente clicando no campo e digitando
um novo valor. Aps ter alterado os campos necessrios, s clicar no boto Atualizar Produto,
que os dados para o produto sero atualizados na tabela Produtos do banco de dados
nwind.mdb.

369

Criando Sites Dinmicos com ASP 3.0

Figura 6.12: O usurio pode alterar quaisquer campos do produto.

A Pgina que Atualiza os Dados na Tabela Produtos do


Banco de Dados Nwind.mdb Atualiza.asp
Quando o usurio clica no boto Atualizar Produto, chamada a pgina atualiza.asp, a qual
indicada na Listagem 6.6.
Listagem 6.6 Pgina ASP que atualiza os dados no banco de dados atualiza.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

<TITLE>Dados atualizados com sucesso.</TITLE>

<BODY>

<%

O primeiro passo criar a conexo com o banco de dados.

370

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

Para isto crio um objeto do tipo Connection.

10

Cria um objeto do tipo ADODB.Connection

11

Set conn=Server.CreateObject(ADODB.Connection)

12

Agora abro uma conexo com o arquivo nwind.mdb

13

utilizando OLE DB.

14

conn.ConnectionString = PROVIDER=MICROSOFT.JET.OLEDB.4.0;
DATA SOURCE=c:\meus documentos\nwind.mdb

15

conn.Open

16

Agora criamos um objeto RecordSet.

17

Este objeto ir acessar o registro do Produto

18

que ser alterado.

19

Set Produtos = Server.CreateObject(ADODB.Recordset)

20

inst_sql=Select * from Produtos WHERE Produtos.ProductName= &


Request.Form(ProductName)&

21

Produtos.Open inst_sql,conn,3,3

22

Comeo a alterar os campos do registro

23

Produtos.Fields(ProductName)= Request.Form(ProductName)

24

Produtos.Fields(SupplierID)= Request.Form(SupplierID)

25

Produtos.Fields(CategoryID)= Request.Form(CategoryID)

26

Produtos.Fields(QuantityPerUnit)= Request.Form(QuantityPerUnit)

27

Produtos.Fields(UnitPrice)= Request.Form(UnitPrice)

28

Produtos.Fields(UnitsInStock)= Request.Form(UnitsInStock)

29

Produtos.Fields(UnitsOnOrder)= Request.Form(UnitsOnOrder)

30

Produtos.Fields(ReorderLevel)= Request.Form(ReorderLevel)

31
32

Produtos.Fields(Discontinued)= Cbool(Request.Form(Discontinued))
Atualizo o registro, utilizando o mtodo Update.

33

Produtos.Update

34

Response.Write PRODUTO :

35

Response.Write Request.Form(ProductName)

36

Response.Write Atualizado com sucesso <BR>

37

Response.Write <HR>

38

%>

39

<A HREF=produto.asp>Clique aqui para atualizar outro produto</A>

40

</BODY>

41

</HTML>

Para atualizar o registro utilizamos o seguinte cdigo:


23

Produtos.Fields(ProductName)= Request.Form(ProductName)

24

Produtos.Fields(SupplierID)= Request.Form(SupplierID)

25

Produtos.Fields(CategoryID)= Request.Form(CategoryID)

26

Produtos.Fields(QuantityPerUnit)= Request.Form(QuantityPerUnit)

371

Criando Sites Dinmicos com ASP 3.0

27

Produtos.Fields(UnitPrice)= Request.Form(UnitPrice)

28

Produtos.Fields(UnitsInStock)= Request.Form(UnitsInStock)

29

Produtos.Fields(UnitsOnOrder)= Request.Form(UnitsOnOrder)

30

Produtos.Fields(ReorderLevel)= Request.Form(ReorderLevel)

31

Produtos.Fields(Discontinued)= Cbool(Request.Form(Discontinued))

32
33

Atualizo o registro, utilizando o mtodo Update.


Produtos.Update

Cada campo do registro recebe o valor contido no campo respectivo do formulrio da Figura
6.12. Depois utilizamos o mtodo Update para atualizar o registro. No momento que chamamos
o mtodo Update que as atualizaes so gravadas no banco de dados.

Utilizando o Nosso Exemplo de Alterao de Registro


Vamos utilizar o nosso exemplo, passo a passo, para que possamos visualizar o funcionamento
completo do mesmo. Conforme indicado na Figura 6.13, carregamos a pgina produto.asp e
selecionamos o produto Ravioli Angelo.

Figura 6.13: Selecionando o produto Ravioli Angelo.


Ao clicarmos no boto Localizar Produto, carregada a pgina localiza.asp, a qual nos exibe
os campos do produto Ravioli Angelo, conforme indicado na Figura 6.14.
Nesta pgina vamos alterar o valor do campo Preo Unit. Vamos alterar de 19,52 para 25,34,
conforme indicado na Figura 6.15.

372

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

Figura 6.14: O registro do produto Ravioli Angelo foi localizado.

Figura 6.15: Alterando o valor do campo Preo Unit.


Ao clicar no boto Atualizar Produto, chamada a pgina atualiza.asp, que faz as atualizaes
no banco de dados, exibe uma mensagem de que estas atualizaes foram feitas com sucesso

373

Criando Sites Dinmicos com ASP 3.0

e apresenta um link para que o usurio possa voltar para a pgina produto.asp para selecionar
um outro produto a ser atualizado, conforme indicado na Figura 6.16.

Figura 6.16: Os dados foram alterados com sucesso.


Na Figura 6.17, abrimos a tabela Produtos do banco de dados C:\meus documentos\ nwind.mdb,
na qual podemos comprovar que o preo unitrio para o produto Ravioli Angelo foi realmente
alterado para 25,34.

Figura 6.17: Comprovando as alteraes efetuadas.

IMPORTANTE
Veja que atravs da utilizao de ASP podemos construir aplicaes Web com as mesmas
funcionalidades de banco de dados existentes em aplicaes tradicionais. Podemos inserir, pesquisar
e alterar registros. No prximo item aprenderemos a eliminar registros, utilizando ASP.

374

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

Eliminando Registros de um Banco de Dados


Neste tpico aprenderemos a criar uma pgina ASP que elimina um registro do banco de dados.
Nosso exemplo ser composto dos seguintes elementos:
Uma pgina ASP produto.asp, onde temos um campo com a listagem de produtos
disponveis na tabela Produtos, do banco de dados Nwind. Esta listagem ser construda
dinamicamente, isto , cada vez que a pgina for carregada, a listagem ser construda
a partir das informaes disponveis na tabela Produtos. Est pgina j foi construda
no exemplo do item anterior, consulte a Listagem 6.4.
Aps selecionar o produto a ser alterado, o usurio clica em um boto Localizar produto.
Feito isso, a pgina produto.asp chama uma pgina chamada localiza.asp, a qual localiza
o registro selecionado no banco de dados. Com isso, o usurio pode conferir se este
realmente o produto que ele deseja eliminar. Esta pgina j foi construda no item
anterior, consulte a Listagem 6.5, sendo que apenas iremos alterar a legenda do boto
de comando, ao invs de Alterar Produto, teremos Excluir Produto. Tambm ser
alterado o atributo action da tag FORM, para que aponte para a pgina exclui.asp, ao
invs de apontar para a pgina atualiza.asp.
Aps conferir se o produto a ser excludo o que est sendo exibido, o usurio clica no
boto Excluir produto. Ento, a pgina localiza.asp chama a exclui.asp, que acessa o
banco de dados e exclui o produto selecionado pelo usurio. Ao final emitida uma
mensagem indicando que os dados foram atualizados com sucesso.

A Pgina ASP Para Excluir o Produto Selecionado Exclui.asp


Na Listagem 6.7 temos o cdigo ASP para a criao da pgina exclui.asp.
Listagem 6.7 Pgina ASP para excluir o produto selecionado exclui.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

<TITLE>Produto excludo com sucesso.</TITLE>

<BODY>

<%

O primeiro passo criar a conexo com o banco de dados.

Para isto crio um objeto do tipo Connection.

375

Criando Sites Dinmicos com ASP 3.0

10

Cria um objeto do tipo ADODB.Connection

11

Set conn=Server.CreateObject(ADODB.Connection)

12

Agora abro uma conexo com o arquivo nwind.mdb

13

utilizando OLE DB.

14

conn.ConnectionString = PROVIDER=MICROSOFT.JET.OLEDB.4.0;

15

conn.Open

16

Agora criamos um objeto RecordSet.

17

Este objeto ir acessar o registro do Produto

DATA SOURCE=c:\meus documentos\nwind.mdb

18

que ser excludo.

19

Set Produtos = Server.CreateObject(ADODB.Recordset)

20

inst_sql=Select * from Produtos WHERE Produtos.ProductName= & Request.Form


(ProductName)&

21

Produtos.Open inst_sql,conn,3,3

22

If Produtos.RecordCount <> 1 Then

23

Response.Write <B>O produto no existe, ou

24

Response.Write existe mais do que um <BR> produto com este nome: </B>

25
26

Response.Write Request.Form(ProductName)
Else

27

Produtos.Delete

28

Response.Write PRODUTO:

29

Response.Write Request.Form(ProductName)

30
31

Response.Write foi excludo da tabela de Produtos. <BR>


End If

32

Response.Write <HR>

33

%>

34

<A HREF=produto.asp>Clique aqui para selecionar outro produto a ser excludo.</A>

35

</BODY>

36

</HTML>

NOTA
Algumas linhas aparecem divididas em duas ou mais linhas. Nunca demais lembrar que
estas devem ser digitadas como uma linha nica. As mesmas esto exibidas em duas ou mais
linhas apenas por questo de espao.

Comentrio sobre o cdigo:


A nica novidade na Listagem 6.7 o trecho indicado a seguir:
22
23

If Produtos.RecordCount <> 1 Then


Response.Write <B>O produto no existe, ou

376

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

24
25
26

Response.Write existe mais do que um <BR> produto com este nome: </B>
Response.Write Request.Form(ProductName)
Else

27

Produtos.Delete

28

Response.Write PRODUTO:

29

Response.Write Request.Form(ProductName)

30
31

Response.Write foi excludo da tabela de Produtos. <BR>


End If

Neste cdigo utilizamos o mtodo RecordCount para verificar se no foi encontrado nenhum
produto (RecordCount = 1) ou foi encontrado mais do que um produto (RecordCount>1).
Nestas duas situaes informamos que o produto no existe ou existe mais do que um produto
com o nome selecionado. Em ambos os casos no podemos utilizar o mtodo Delete.
Caso tenha sido encontrado somente um registro (RecordCount = 1), utilizamos o mtodo
Delete do objeto Produtos, para eliminar o registro encontrado.
Neste exemplo, utilizamos o mtodo Delete sem nenhum parmetro, o que faz com que seja
eliminado somente o registro atual. Podemos passar um parmetro para o mtodo Delete, o
qual altera o comportamento do mesmo. Para isso utilizaramos a seguinte sintaxe:
RecordSet.Delete parmetro

Na Tabela 6.11, descrevemos os valores mais utilizados para o parmetro do mtodo Delete.
Tabela 6.11 Valores de parmetro para o mtodo Delete.
Valor

Descrio

Elimina o registro atual, isto , o registro no qual est o


indicador de registros.

Elimina somente os registros selecionados atravs da


utilizao da propriedade Filter do objeto RecordSet. A
propriedade Filter j deve ter sido definida anteriormente.

Elimina todos os registros do objeto RecordSet.

Utilizando o Nosso Exemplo de Excluso de Registro


Vamos utilizar o nosso exemplo, passo a passo, para que possamos visualizar o funcionamento
completo do mesmo. Conforme indicado na Figura 6.18, carregamos a pgina produto.asp e
selecionamos o produto Filo Mix.

377

Criando Sites Dinmicos com ASP 3.0

Figura 6.18: Selecionando o produto Filo Mix.


Ao clicarmos no boto Localizar Produto, carregada a pgina localiza.asp, a qual nos exibe
os campos do produto Filo Mix, conforme indicado na Figura 6.19.

Figura 6.19: O registro do produto Filo Mix foi localizado.

378

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

Os dados do produto Filo Mix so exibidos para que o usurio confira se este realmente o
produto a ser excludo no banco de dados. Para excluir o produto selecionado s clicar no
boto Excluir Produto.
Ao clicar no boto Excluir Produto, chamada a pgina exclui.asp, que exclui o produto
selecionado, e exibe uma mensagem de que a excluso foi realizada com sucesso e apresenta
um link para que o usurio possa voltar para a pgina produto.asp para selecionar um outro
produto a ser excludo, conforme indicado na Figura 6.20.

Figura 6.20: O produto Filo Mix foi excludo com sucesso.


Na Figura 6.21, abrimos a tabela Produtos do banco de dados C:\meus documentos\ nwind.mdb,
na qual podemos comprovar que o produto Filo Mix foi realmente excludo.

Figura 6.21: Comprovando a excluso do produto Filo Mix.

379

Criando Sites Dinmicos com ASP 3.0

IMPORTANTE
Veja que atravs da utilizao de ASP podemos construir aplicaes Web com as mesmas
funcionalidades de banco de dados existentes em aplicaes tradicionais. Podemos inserir,
pesquisar, alterar e excluir registros.

A Propriedade Filter do Objeto RecordSet


Podemos configurar a propriedade Filter para exibir apenas um conjunto de registros que
satisfaam uma ou mais condies. Por exemplo, posso ter criado um RecordSet que retorna
todos os registros da tabela Pedidos (Orders) do banco de dados nwind.mdb. Depois posso
configurar a propriedade Filter para que somente sejam exibidos os registros cujo Pas de
destino seja o Brasil.
A configurao da propriedade Filter apenas faz com que seja limitada a visibilidade do
RecordSet. Podemos redefinir a propriedade Filter, de tal maneira que todos os registros voltem
a estar disponveis.
Na Listagem 6.8, criamos uma pgina que acessa a tabela Orders, do banco de dados
nwind.mdb. So recuperados os campos OrderID, OrderDate, ShipCity e ShipCountry. Depois
utilizamos a propriedade Filter, para exibir somente os pedidos para o ano de 1994.
Listagem 6.8 Exibindo somente os pedidos para o ano de 1994 filter_pedidos.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

<TITLE>Utilizando a propriedade Filter.</TITLE>

<BODY>

<%

O primeiro passo criar a conexo com o banco de dados.

Para isto crio um objeto do tipo Connection.

10

Cria um objeto do tipo ADODB.Connection

11

Set conn=Server.CreateObject(ADODB.Connection)

12

Agora abro uma conexo com o arquivo nwind.mdb

380

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

13

utilizando OLE DB.

14

conn.ConnectionString = PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=c:\meus


documentos\nwind.mdb

15

conn.Open

16

Agora criamos um objeto RecordSet.

17

Este objeto ir acessar o campo ProductName

18

da tabela Orders.

19

Set Pedidos = Server.CreateObject(ADODB.Recordset)

20

inst_sql=SELECT Orders.OrderID, Orders.OrderDate, Orders.ShipCity, Orders.


ShipCountry, Year([OrderDate]) AS AnoPedido FROM Orders Order By ShipCountry

21

Pedidos.Open inst_sql, conn, 3, 3

22

Neste ponto tenho o objeto Pedidos ligado com a tabela

23

Produtos do banco de dados nwind.mdb.

24

%>

25

<P><FONT color=navy size=6><B>Empresa ABC Ltda.</B></FONT></P>

26

<P><B><I>Listagem de Produtos para o ano de: <FONT color=red>1994</FONT>

27

</I></B>

28

<HR>

29

</P>

30

<%

31

Configura a propriedade Filter para exibir

32

somente os registros em que o ano do campo

33

OrderDate igual a 1994.

34

Pedidos.Filter = AnoPedido=1994

35

Agora construo uma tabela para exibir os resultados.

36

%>

381

Criando Sites Dinmicos com ASP 3.0

37

<%

38

<TABLE>

39

<TR>

40

<TD>Cdigo</TD>

41

<TD>Data</TD>

42

<TD>Cidade</TD>

43

<TD>Pas</TD>

44

<TD>Ano</TD>

45

</TR>

46

<%

47

Pedidos.MoveFirst

48

Do Until Pedidos.EOF %>

49

<TR>

50

<TD><% =Pedidos.Fields(OrderID)

%></TD>

51

<TD><% =Pedidos.Fields(OrderDate)

%></TD>

52

<TD><% =Pedidos.Fields(ShipCity)

%></TD>

53

<TD><% =Pedidos.Fields(ShipCountry)%></TD>

54

<TD><% =Pedidos.Fields(AnoPedido)

55

%></TD>

</TR>

56

<%

57

Pedidos.MoveNext

58

Loop

59

%>

60

</TABLE>

61

</BODY>

62

</HTML>

Ao carregarmos esta pgina, obteremos o resultado indicado na Figura 6.22.

382

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

Figura 6.22: Pedidos para o ano de 1994.


Vamos fazer alguns comentrios sobre o cdigo.
Primeiro gostaria de comentar a construo da instruo SQL:
20

inst_sql=SELECT Orders.OrderID, Orders.OrderDate, Orders.ShipCity,


Orders.ShipCountry, Year([OrderDate]) AS AnoPedido FROM Orders Order By
ShipCountry

Observe que na instruo SQL, utilizamos a funo Year(NomeDoCampo), para criar um campo
chamado AnoPedido, o qual contm apenas o ano da data do Pedido. Esta construo mostra o
poder e a simplicidade da linguagem SQL, motivo pelo qual foi colocado anteriormente sobre a
importncia de aprendermos a utilizar com eficincia a linguagem SQL.
Agora vamos observar a utilizao da propriedade Filter, no seguinte fragmento de cdigo:
34

Pedidos.Filter = AnoPedido=1994

Com este comando estamos restringindo os registros de tal forma que somente sejam exibidos
os registros cujo campo AnoPedido seja igual a 1994.
Para salientar a flexibilidade desta propriedade, vamos considerar um outro exemplo. Vamos
supor que seja necessrio exibir apenas os pedidos para o ano de 1994 e cujo pas de destino
fosse o Brazil (com z porque no banco de dados Nwind est com z). Para obter este resultado,
bastaria definir a propriedade Filter da seguinte maneira:
Pedidos.Filter = AnoPedido=1994 And ShipCountry=Brazil

383

Criando Sites Dinmicos com ASP 3.0

Quando queremos que os registros atendam a dois ou mais critrios, simultaneamente,


utilizamos o operador And. Neste caso somente sero exibidos os registros em que o campo
AnoPedido for 1994 e o campo ShipCountry for Brazil, conforme indicado na Figura 6.23.

Figura 6.23: Pedidos para o Brazil no ano de 1994.


Vamos refinar um pouco mais. Vamos fazer com que sejam exibidos apenas os registros para
o ano de 1994 e para Brazil ou Germany (Alemanha).
Pedidos.Filter = (AnoPedido=1994 And ShipCountry=Brazil) OR (AnoPedido=1994 And
ShipCountry=Germany)

Este comando deve ser digitado em uma nica linha, alm disso os espaos devem ser
rigorosamente respeitados. Aps fechar parnteses, apenas um espao, aps o OR mais um
espao e assim por diante. Na Figura 6.24 temos o resultado desta pesquisa, na qual so
exibidos apenas os pedidos para o Brazil e para a Germany, no ano de 1994.
Observe que, com a correta utilizao da propriedade Filter, podemos obter resultados
interessantes. Voltaremos a utilizar esta propriedade em outros exemplos deste livro.
Para eliminar qualquer filtro aplicado e voltar a disponibilizar todos os registros, basta utilizar
os seguinte comando:
Pedidos.Filter =

384

Captulo 6 Bancos de Dados com ASP Conceitos Avanados Parte I

Figura 6.24: Pedidos para Brazil e para Germany no ano de 1994.


Com isso elimino qualquer filtro que tenha sido aplicado.
Tambm podemos utilizar o operador Like para fazer uma pesquisa por padres. Por exemplo,
vamos supor que queremos filtrar apenas os registros cujo campo NomeCliente inicie com a
letra J. Poderamos utilizar o seguinte comando:
Pedidos.Filter = NomeCliente Like J%

Neste caso o % funciona como um caractere curinga, isto , a primeira letra do nome deve ser
J e o que vem depois no importa. Neste caso seriam retornados registros tais como:
Jos da Silva
Juvenal Pereira
Jlio Battisti

Concluso
No incio do captulo aprendemos a estabelecer conexes com banco de dados, sem utilizar
ODBC. Fizemos isto, definimos a propriedade ConnectionString do objeto Connection,

385

Criando Sites Dinmicos com ASP 3.0

acessando as fontes de dados utilizando o provedor OLE DB para cada fonte. Foram
apresentados exemplos para o Microsoft Access, Microsoft SQL Server e ORACLE.
Neste captulo tambm fizemos um estudo detalhado do objeto RecordSet.
Saber utilizar o objeto RecordSet de fundamental importncia para a criao de aplicaes
Web com acesso a bancos de dados. Estudamos os diversos mtodos, propriedades e eventos
deste objeto.
Aprendemos a criar pginas ASP que fazem operaes bastante comuns em aplicaes Web,
tais como:
Pesquisar registros em um banco de dados.
Alterar registros.
Eliminar registros.
Fazer a validao dos dados digitados em um formulrio.
Filtrar os registros retornados por um objeto RecordSet.

386

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

Captulo 7
Bancos de Dados com ASP
Conceitos Avanados Parte II

387

Criando Sites Dinmicos com ASP 3.0

Neste captulo sero apresentados mais alguns tpicos sobre o acesso a banco de dados.
Iniciaremos por um estudo do objeto Command, o qual pode ser utilizado para retornar um
conjunto de registros em um objeto RecordSet e para efetuar operaes que envolvem diversos
registros como, por exemplo, atualizar o campo PreoUnitrio em todos os registros da
tabela Produtos. O objeto Command tambm pode ser utilizado para passar parmetros para
uma Consulta Parametrizada.
Faremos um exemplo completo sobre a passagem de parmetros para uma Consulta
Parametrizada do Microsoft Access. Com a utilizao de Consultas Parametrizadas podemos
criar pginas ASP bastante flexveis, que nos permitem executar consultas de maneira interativa
com o banco de dados. O usurio seleciona um valor para um ou mais parmetros e executa
a consulta. Caso deseje uma nova consulta s selecionar novos valores para os parmetros
e executar novamente a consulta. Com isso podemos obter uma srie de resultados de maneira
simples e prtica.
Veremos exemplos de acesso a banco de dados com a utilizao dos mtodos e propriedades
do objeto Command. Sero apresentadas tabelas com a descrio dos principais mtodos e
propriedades deste objeto. A utilizao do objeto Command especialmente indicada para
situaes onde temos que passar parmetros para Consultas Parametrizadas ou para Stored
Procedures. Atravs da utilizao do objeto Command e de seus mtodos, propriedades e
colees, podemos criar os diversos parmetros necessrios, pass-los para o banco de dados
e, at mesmo, receber valores de retorno de Stored Procedures em parmetros definidos para
o objeto Command.
Tambm estudaremos o objeto Parameter, utilizado na criao e definio dos parmetros a
serem utilizados pelo objeto Command. Veremos como criar e definir um determinado
parmetro.
Tambm sero apresentadas tabelas com a descrio dos principais mtodos e propriedades
dos diversos objetos estudados.
Na seqncia, analisaremos mais alguns exemplos de pesquisa em banco de dados, utilizando
pginas ASP. Trataremos um pouco mais sobre a construo de instrues SQL avanadas, as
quais utilizam o operador Like e funes de agregao como Sum, Avg, Min e Max. Tambm
trataremos, diretamente em uma instruo SQL, da utilizao dos operadores And e Or, bem
como de funes como Year, Month e Day.
Como exemplo de aplicao, no final do captulo, criaremos um formulrio que permite que
o prprio usurio defina a pesquisa a ser realizada. No formulrio, o usurio poder fazer
pesquisa na tabela Orders do banco de dados Nwind. O usurio poder decidir se deseja
fazer a pesquisa por Pas de destino, Pas de destino e Cidade, por Ano da Data do Pedido ou

388

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

Ms da Data do Pedido. Tambm utilizaremos o modelo de eventos do Internet Explorer para


ativar ou desativar campos medida em que o usurio seleciona opes no formulrio.
Neste captulo, estaremos utilizando como exemplo o banco de dados nwind.mdb do Microsoft
Access. Existem pequenas diferenas na linguagem SQL do Microsoft Access e do Microsoft
SQL Server. Para maiores detalhes sobre a criao de instrues com o Microsoft SQL Server,
consulte a documentao do produto.

O Objeto Command
Utilizamos o objeto Command para definir um determinado comando que dever ser
executado em um fonte da dados, como um banco de dados do Microsoft Access ou do
Microsoft SQL Server. O objeto Command especialmente indicado para a execuo de
comandos que necessitem de parmetros, com por exemplo, Stored Procedures de um banco
de dados do Microsoft SQL Server, ou Consultas Parametrizadas do Microsoft Access.

NOTA
Uma Consulta Parametrizada um tipo especial de consulta, a qual espera receber um ou
mais valores (os parmetros). Os valores recebidos so utilizados, normalmente, como critrios
de pesquisa, de tal forma que somente sero retornados os registros que atenderem os critrios
especificados. Por exemplo, poderamos ter um parmetro no campo ShipCountry da tabela
Orders do banco de dados nwind.mdb. Se passarmos para este parmetro o valor Germany,
sero retornados apenas os registros em que o campo ShipCountry for igual a Germany.

Um Breve Introduo ao Objeto Command


Para criar um objeto Command utilizamos a seguinte sintaxe:
Set nome_objeto = Server.CreateObject(ADODB.Command)

O exemplo, a seguir, cria o objeto Command chamado Pedidos:


Set Pedidos = Server.CreateObject(ADODB.Command).

IMPORTANTE
Nunca demais lembrar que, para criar um objeto, devemos utilizar o operador Set, caso
contrrio obteremos um erro quando a pgina for carregada.

Para iniciarmos o estudo do objeto Command, vamos analisar o exemplo da Listagem 7.1.

389

Criando Sites Dinmicos com ASP 3.0

Listagem 7.1 Utilizando o objeto Command para retornar dados command1.asp.


1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

<TITLE>Utilizando o objeto Command.</TITLE>

<BODY>

<%

O primeiro passo criar a conexo com o banco de dados.

Para isto crio um objeto do tipo Connection.

10

Cria um objeto do tipo ADODB.Connection

11

Set conn=Server.CreateObject(ADODB.Connection)

12

Agora abro uma conexo com o arquivo nwind.mdb

13

utilizando OLE DB.

14

conn.ConnectionString = PROVIDER=MICROSOFT.JET.OLEDB.4.0;

15

conn.Open

16

Agora crio um objeto do tipo Command, o qual ser,

17

automaticamente, associado com a conexo conn.

18

Set com_orders = Server.CreateObject(ADODB.Command)

19

com_orders.CommandText = Select * From Orders Order By OrderDate

20

com_orders.ActiveConnection = conn

21

Agora retorno o resultado do comando, utilizando o

DATA SOURCE=c:\meus documentos\nwind.mdb

22

mtodo Execute.

23

Este resultado ser armazenado em um objeto RecordSet

24

chamado Ped.

25

Set Ped= Server.CreateObject(ADODB.RecordSet)

26

Set Ped=com_orders.Execute

390

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

27

%>

28

<HR>

29

<TABLE>

30

<TR>

31

<TD>Cdigo</TD>

32

<TD>Data

33

</TD>

</TR>

34
35

<%

36

Do Until Ped.EOF

37

%>

38

<TR>

39

<TD><%=Ped.Fields(OrderID)

40

%> </TD>

<TD><%=Ped.Fields(OrderDate)%> </TD>

41

</TR>

42

<%

43

Ped.MoveNext

44

Loop

45

%>

46

</TABLE>

47

<HR>

48

</BODY>

49

</HTML>

Ao carregarmos este arquivo obtemos o resultado indicado na Figura 7.1.


A novidade na Listagem 7.1 a utilizao do objeto Command para a obteno do RecordSet
Ped. Vamos analisar os mtodos e propriedades que foram utilizados.
Primeiro criamos um objeto do tipo Command, conforme indicado pelo seguinte comando:
18

Set com_orders = Server.CreateObject(ADODB.Command)

391

Criando Sites Dinmicos com ASP 3.0

Figura 7.1: Carregando a pgina comand1.asp.


O prximo passo definir a propriedade CommandText. Esta propriedade foi configurada
com a instruo SQL que dever ser executada no banco de dados, para retornar os registros
desejados. No nosso exemplo, a instruo SQL retorna todos os registros da tabela Orders e
ordena a listagem pelo campo OrderDate, conforme indicado no seguinte comando:
19

com_orders.CommandText = Select * From Orders Order By OrderDate

Em seguida definimos a conexo com a qual o objeto com_orders est associado. Para isto
definimos a propriedade ActiveConnection, conforme indicado no seguinte comando:
20

com_orders.ActiveConnection = conn

A partir de agora, os comandos executados pelo objeto Command sero executados na conexo
conn, que est ligada ao banco de dados nwind.mdb.
Agora criamos um objeto do tipo RecordSet chamado Ped:
25

Set Ped= Server.CreateObject(ADODB.RecordSet)

O ltimo passo utilizar o mtodo Execute do objeto com_orders. Ao utilizarmos este mtodo,
executada a instruo contida na propriedade CommandText. O resultado retornado para
o objeto RecordSet especificado no comando, conforme indicado abaixo:
26

Set Ped=com_orders.Execute

392

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

Neste caso aps a execuo do mtodo Execute, os registros retornados estaro armazenados
no objeto Ped, o qual um objeto do tipo RecordSet.
Veja que o que fizemos foi, simplesmente, utilizar um objeto Command e as propriedades
CommandText, ActiveConnection e o mtodo Execute, para criar um objeto RecordSet com
todos os registros da tabela Orders.
Voc pode estar questionando: Por que todos esses passos, se podemos simplesmente utilizar
o mtodo Open do objeto RecordSet, como j fizemos nos captulos anteriores?.
A resposta simples. Estamos estudando o objeto Command porque existem determinadas
operaes que somente podem ser executadas com este objeto, como por exemplo, passar
parmetros para um Stored Procedure ou uma Consulta Parametrizada.
Agora que j fizemos um estudo preliminar do objeto Command, vamos apresentar as demais
propriedades e mtodos deste objeto.

Os Mtodos do Objeto Command


Na Tabela 7.1 temos uma descrio dos mtodos do objeto Command.
Tabela 7.1 Os mtodos do objeto Command.
Mtodo

Descrio

Cancel

Cancela a execuo do mtodo Execute caso a mesma


ainda esteja pendente.

CreateParameter

Cria um novo objeto do tipo Parameter. Pode ser


utilizado, por exemplo, para passar parmetros para
Consultas Parametrizadas do Microsoft Access.

Execute

Executa uma pesquisa, instruo SQL ou Stored


Procedure especificado na propriedade CommandText.

Ainda neste item veremos exemplos de aplicao destes mtodos.

As Propriedades do Objeto Command


Na Tabela 7.2 temos uma descrio das propriedades do objeto Command.

393

Criando Sites Dinmicos com ASP 3.0

Tabela 7.2 As propriedades do objeto Command.


Propriedade

Descrio

ActiveConnection

Determina a qual conexo o objeto Command estar


ligado, isto , atravs de qual conexo os comandos
sero executados.

CommandText

Contm o texto do comando que ser executado contra


a conexo definida na propriedade ActiveConnection.

CommandTimeout

Indica por quanto tempo o comando pode ser


executado. Caso o comando no retorne um resultado
no tempo especificado por esta propriedade, ser
gerada uma mensagem de erro e a execuo do
comando ser suspensa. O tempo especificado em
segundos e o valor padro 30 segundos.

CommandType

Indica o tipo de comando que ser executado. Na tabela


7.3 temos uma descrio dos tipos de comandos possveis.

Name

Indica o nome do objeto Command.

Parameters

Contm todos os objetos do tipo Parameter definidos


para o objeto Command.

Prepared

Indica se para salvar ou no uma verso compilada


do objeto Command aps a execuo do mesmo. O
armazenamento de verses compiladas melhora o
desempenho do banco de dados. Esta possibilidade
depende do banco de dados que est sendo acessado.
O Microsoft SQL Server 2000 permite que sejam
criadas e armazenadas verses compiladas dos
comandos e Store Procedures executados. Assim, da
prxima vez que o comando for executado, o mesmo
no precisa ser novamente interpretado para gerar a
verso compilada. Em ambientes acessados por um
grande nmero de usurios, este recurso pode ser de
grande valia para melhorar o desempenho.

Properties

Contm todos os objetos do tipo Property definidos


para o objeto Command.

State

Indica se o objeto Command est aberto (Open) ou


fechado (Closed). Esta propriedade somente para leitura.

394

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

Na Tabela 7.3, temos uma relao dos tipos de comandos possveis, os quais so definidos
pela propriedade CommandType.
Tabela 7.3 Valores possveis para a propriedade CommandType.
Valor/Constante

Tipo de comando

-1/adCmdUnspecified

No especifica o tipo de Comando.

1/adCmdText

Avalia o texto definido na propriedade


CommandText, o qual pode ser uma instruo SQL
ou uma chamada para um Stored Procedure do
banco de dados.

2/adCmdTable

Considera o valor da propriedade CommandText


como sendo o nome de uma tabela que foi gerada
a partir de uma instruo SQL. Somente retorna as
colunas definidas pela instruo SQL. Para retornar
todas as colunas, devemos utilizar o tipo 512
adCmdTableDirect.

4/adCmdStoredProc

Considera o valor da propriedade CommandText


como sendo o nome de um Stored Procedure.

8/adCmdUnknown

Considera o valor da propriedade CommandText


como sendo de tipo desconhecido. o valor padro.

256/adCmdFile

Considera o valor da propriedade CommandText


como sendo o nome de um RecordSet armazenado
em um arquivo.

512/adCmdTableDirect

Considera o valor da propriedade CommandText


como sendo o nome de um tabela em que todos os
campos so retornados.

A sintaxe para definir a propriedade CommandType a seguinte:


Objeto.CommandType = valor

ou
Objeto.CommandType = constante

Observe que podemos utilizar o valor numrico ou uma constante predefinida. Por exemplo,
podemos utilizar o valor 1 ou a constante adCmdText para definir o tipo do comando como
sendo texto.

395

Criando Sites Dinmicos com ASP 3.0

Existe um grande nmero de constantes predefinidas para os objetos ADO. Estas constantes
esto localizadas nos seguintes arquivos:
adovbs.inc: Constantes para a linguagem VBScript.
adojavas.inc: Constantes para a linguagem JScript.
Estes arquivos esto localizados, normalmente, em uma das seguintes pastas:
Para o Windows 2000 em Portugus: Arquivos de programas\Arquivos comuns\System\ADO.
Para o Windows 2000 em Ingls: Program Files\Common Files\system\ado.
Para que possamos utilizar estas constantes, devemos utilizar uma diretiva include para incluir
estes arquivos, ou definir uma referncia utilizando a tag a seguir:
<!- -METADATA TYPE=typelib uuid={00000205-0000-0010-8000-00AA006D2EA4} ->

Esta tag deve ser includa dentro da seo <HEAD></HEAD> de cada pgina ASP que
utilizar as constantes ou no arquivo global.asa. Ao serem includas no arquivo global.asa, as
constantes estaro disponveis para qualquer pgina ASP que faa parte da aplicao Web.

NOTA
Voltaremos a falar sobre o arquivo global.asa.

Agora vamos ver alguns exemplos de cdigo para o objeto Command, alguns de seus mtodos
e propriedades.
Vamos iniciar criando um objeto Connection e um objeto Command, conforme indicado pelo
trecho a seguir:
Criamos um objeto do tipo Connection
Set conn=Server.CreateObject(ADODB.Connection)
Agora abro uma conexo com o arquivo nwind.mdb
utilizando OLE DB.
conn.ConnectionString = PROVIDER=MICROSOFT.JET.OLEDB.4.0;
DATA SOURCE=c:\meus documentos\nwind.mdb
conn.Open
Agora crio um objeto do tipo Command
Set com_orders = Server.CreateObject(ADODB.Command)

396

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

Uma vez criado o objeto Command, vamos definir qual a conexo que o mesmo utilizar.
Para isso definimos a propriedade ActiveConnection:
com_orders.ActiveConnection = conn

Agora vamos definir o tipo de comando. Para isso utilizaremos a propriedade CommandType:
com_orders.CommandType = 1

Ao invs do valor numrico podemos utilizar a constante equivalente, conforme indicado no exemplo:
com_orders.CommandType = adCmdText

Agora vamos definir o comando que o objeto Command executar. Para isso definimos a
propriedade CommandText:
com_orders.CommandText = Select * From Orders Order By OrderDate

Vamos definir o TimeOut em 2 minutos (120 segundos) para a execuo deste objeto Command,
utilizando a propriedade CommandTimeout:
com_orders.CommandTimeout= 120

Agora vamos criar um objeto RecordSet e utilizar o mtodo Execute do objeto Command para
retornar registros para o objeto RecordSet:
Set Ped= Server.CreateObject(ADODB.RecordSet)
Set Ped=com_orders.Execute

Consultas Parametrizadas no Microsoft Access


Conforme descrito anteriormente, podemos utilizar o objeto Command para passar parmetros
para Consultas Parametrizadas do Microsoft Access ou para Stored Procedures do Microsoft
SQL Server. Neste tpico aprenderemos a trabalhar com parmetros.

NOTA
Para saber mais sobre a criao de consultas no Microsoft Access, consulte a documentao do
produto ou consulte o livro Microsoft Access 2000 Curso Bsico e Rpido, da editora Axcel Books.

Na Figura 7.2 temos uma consulta do Microsoft Access. A consulta baseada na tabela Orders
e foram includos os seguintes campos:
OrderID
OrderDate
ShipName

397

Criando Sites Dinmicos com ASP 3.0

ShipCity
ShipCountry

Figura 7.2: Consulta no Microsoft Access.


Ao executarmos esta consulta, no Microsoft Access, so exibidos todos os pedidos, pois nenhum
critrio de filtragem foi imposto. Na Figura 7.3, vemos o resultado da execuo desta consulta.

Figura 7.3: Execuo da consulta sem critrios de filtragem.

398

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

Podemos definir um critrio de filtragem. Por exemplo, queremos que sejam exibidos os pedidos
apenas para a Argentina. Para isso poderamos especificar um critrio para o campo
ShipCountry, conforme indicado na Figura 7.4.

Figura 7.4: Especificando um critrio para o campo ShipCountry.


Ao executarmos esta consulta, no Microsfot Access, sero exibidos apenas os pedidos em que
o campo ShipCountry seja igual a Argentina. Na Figura 7.5, vemos o resultado da execuo
desta consulta.

Figura 7.5: Execuo da consulta com um critrio de pesquisa.

399

Criando Sites Dinmicos com ASP 3.0

Observe que somente foram exibidos os pedidos para a Argentina, o que confirma o correto
funcionamento do critrio que foi especificado.
Porm esta maneira de especificar critrios pouco flexvel, pois cada vez que quisermos
alterar o critrio, teremos que digitar o novo critrio, salvar a consulta e execut-la novamente.
Podemos obter uma maior flexibilidade especificando um parmetro para a consulta. Depois,
colocamos este parmetro como critrio no campo ShipCountry. Ao especificarmos um
parmetro como critrio para este campo, cada vez que a consulta for executada, o Microsoft
Access nos pergunta o valor do parmetro. Ns digitamos o valor desejado que passa a servir
como critrio de filtragem.
Para definir um parmetro, selecione o menu Consulta -> Parmetros. Na janela que surge
digite Pais (sem acento) para o nome do parmetro e selecione Texto para o tipo do parmetro,
conforme indicado na Figura 7.6.

Figura 7.6: Definindo um parmetro para a consulta.


Depois basta colocar como critrio, no campo ShipCountry, o nome do parmetro entre
colchetes, conforme indicado na Figura 7.7.
Ao executar esta consulta, o Microsoft Access reconhece a existncia do parmetro, e abre
uma janela pedindo para que o usurio digite um valor para o parmetro, conforme indicado
na Figura 7.8.
Vamos supor que o usurio digite France e d um clique em OK. Sero exibidos todos os
pedidos em que o campo ShipCountry seja igual a France, conforme indicado na Figura 7.9.

400

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

Figura 7.7: Definindo o parmetro como critrio para o campo ShipCountry.

Figura 7.8: O usurio deve digitar um valor para o parmetro.

Figura 7.9: Execuo da consulta com o valor do parmetro definido como France.

401

Criando Sites Dinmicos com ASP 3.0

Utilizando parmetros, cada vez que a consulta executada, podemos fornecer um valor
diferente para o parmetro, valor esse que serve para filtrar os resultados. Podemos definir
parmetros em mais do que um campo da consulta, com isso, ao executar a consulta, sero
pedidos valores para cada um dos parmetros definidos.
O nosso objetivo poder, a partir de uma pgina ASP, executar uma Consulta Parametrizada
do Microsoft Access. Para isso, precisamos passar, a partir da pgina ASP, os valores para os
parmetros definidos na consulta. Isso possvel de ser feito com a utilizao do objeto
Parameter e a propriedade Parameters do objeto Command.
Na seqncia deste captulo estudaremos o objeto Parameter, bem como a passagem de
parmetros utilizando o objeto Command.

NOTA
Esta consulta foi salva com o nome de con_pedidos. Utilizaremos este nome em exemplos mais
adiante. Caso voc tenha criado uma consulta com um nome diferente, utilize o nome da
consulta que voc criou, nos exemplos deste captulo.

O Objeto Parameter
O objeto Parameter representa parmetros associados com Consultas Parametrizadas ou
argumentos de entrada e valores de retorno para Stored Procedures. Com a utilizao do
objeto Parameter podemos definir, detalhadamente, os parmetros que sero enviados para
uma Consulta Parametrizada, ou os argumentos de entrada enviados para um Stored Procedure.
Na Tabela 7.4, temos uma descrio das principais propriedades do objeto Parameter.
Tabela 7.4 Principais propriedades do objeto Parameter.
Propriedade

Descrio

Attributes

Indica uma ou mais caractersticas do objeto Parameter.

Direction

Define se o objeto Parameter representa um parmetro de


entrada, de sada ou ambos; ou indica se o parmetro
um valor de retorno de um Stored Procedure.

Name

Contm o nome do objeto Parameter.

NumericScale

Indica uma faixa de valores numricos aceitveis para o


valor do parmetro.

402

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

Propriedade

Descrio

Precision

Indica a preciso a ser utilizada para valores numricos.

Size

Indica o tamanho mximo do parmetro, em bytes ou


caracteres.

Type

Indica o tipo de dados para o objeto Parameter.

Value

Indica o valor associado com o objeto Parameter.

NOTA
Um Stored Procedure um conjunto de comandos gravados com um nome no banco de dados.
Podemos, por exemplo, criar um Stored Procedure que gera uma listagem com o total de vendas
por ms do ano. Um Stored Procedure pode receber valores como argumentos de entrada. Um
exemplo de argumento de entrada poderia ser o ano para o qual deve ser gerada uma listagem
do total de vendas mensais. Um Stored Procedure tambm pode retornar valores aps a sua
execuo. Podemos utilizar o objeto Parameter para enviar argumentos de entrada e tambm
para receber os valores calculados pelo Stored Procedure.

Para cada parmetro, que o objeto Command precisa tratar, criado um objeto Parameter.
Todos os objetos Parameter podem ser acessados atravs da coleo Parameters do objeto
Command. Para criar um objeto do tipo Parameter, podemos utilizar o mtodo CreateParameter
do objeto Command.

Utilizando o Objeto Command Para Passar


Parmetros Para uma Consulta Parametrizada
Neste item vamos utilizar o objeto Command e a sua coleo Parameters para acessar a consulta
con_pedidos e passar um valor para o parmetro Pais da consulta. Vamos criar um formulrio,
onde temos uma lista, gerada dinamicamente pelo ASP, na qual temos a listagem dos pases
em ordem alfabtica. O usurio seleciona um pas na lista e clica no boto Pesquisar. Feito
isso ser chamada uma pgina procurapais.asp, que passa o valor selecionado na lista como
parmetro para a consulta con_pedidos, a qual retorna a listagem dos pedidos para o pas
selecionado. A pgina inicial, na qual construiremos a listagem de pases, ser chamada de
command2.asp.
Na Figura 7.10 temos um diagrama do funcionamento do nosso exemplo.

403

Criando Sites Dinmicos com ASP 3.0

command2.asp

procurapais.asp

nwind.mdb
Consulta:
con_pedidos

Figura 7.10: Diagrama de funcionamento do exemplo proposto.


Na Listagem 7.2 temos o cdigo que cria a pgina command2.asp.
Listagem 7.2 Criando a lista com o nome dos pases command2.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

<TITLE>Selecione o Pas de destino.</TITLE>

<BODY>

<%

O primeiro passo criar a conexo com o banco de dados.

para isto crio um objeto do tipo Connection.

10

Cria um objeto do tipo ADODB.Connection

11

Set conn=Server.CreateObject(ADODB.Connection)

12

Agora abro uma conexo com o arquivo nwind.mdb

13

utilizando OLE DB.

14

conn.ConnectionString = PROVIDER=MICROSOFT.JET.OLEDB.4.0;
DATA SOURCE=c:\meus documentos\nwind.mdb

15

conn.Open

16

Agora criamos um objeto RecordSet.

17

Este objeto ir acessar o campo ProductName

18

da tabela Produtos

19

Set Paises = Server.CreateObject(ADODB.Recordset)

404

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

20 Paises.Open Select ShipCountry from Orders Group By ShipCountry Order By


ShipCountry, conn, 3, 3
21

Neste ponto tenho o objeto Paises com uma listagem

22

em ordem ascendente, dos pases para os quais existem

23

pedidos efetuados.

24

%>

25

<P><B>Selecione o pas a ser pesquisado.</B></P>

26

<P><B><I>Depois clique no boto Pesquisar.</I></B></P>

27

<FORM action=procurapais.asp method=post id=form1 name=form1>

28

<SELECT id=listapaises name=listapaises>

29

<%

30

Agora construo a lista de opes a partir dos

31

dados obtidos da tabela Orders.

32

Para cada pas obtido, crio uma nova opo

33

na lista.

34

Do While Not Paises.EOF

35

Response.Write <OPTION value= & Chr(34) & Paises.Fields(ShipCountry) &


Chr(34) & > & Paises.Fields(ShipCountry)& </OPTION>

36

Paises.MoveNext

37

Loop

38

%>

39

</SELECT>

40

<BR>

41

<HR>

42

<INPUT type=submit value=Pesquisar id=Pesquisar name=Pesquisar>

43

</FORM>

44

</BODY>

45

</HTML>

405

Criando Sites Dinmicos com ASP 3.0

Agora precisamos construir a pgina procurapais.asp. Esta pgina receber o valor selecionado
na lista, passar este valor para o parmetro Pais da consulta con_pedidos, a qual ir retornar
somente os pedidos para o pas selecionado. A pgina procurapais.asp tambm exibir os
resultados obtidos.
Na Listagem 7.3 temos o cdigo que cria a pgina procurapais.asp.
Listagem 7.3 Passando um valor para o parmetro Pais da consulta con_pedidos.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

<TITLE>Resultados da pesquisa.</TITLE>

<BODY>

<%

O primeiro passo criar a conexo com o banco de dados.

para isto crio um objeto do tipo Connection.

10

Cria um objeto do tipo ADODB.Connection

11

Set conn=Server.CreateObject(ADODB.Connection)

12

Agora abro uma conexo com o arquivo nwind.mdb

13

utilizando OLE DB.

14

conn.ConnectionString = PROVIDER=MICROSOFT.JET.OLEDB.4.0;
DATA SOURCE=c:\meus documentos\nwind.mdb

15

conn.Open

16

Agora criamos um objeto RecordSet para reapresentar

17

a lista de pases no final, para que o usurio possa

18

fazer uma nova pesquisa.

19

Set Paises = Server.CreateObject(ADODB.Recordset)

20

Paises.Open Select ShipCountry from Orders Group By ShipCountry Order By


ShipCountry, conn, 3, 3

21

Agora crio um objeto do tipo Command

22

defino a conexo ativa utilizando a propriedade ActiveConnection.

23

Depois defino o tipo de comando utilizando a propriedade

406

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

24

CommandType. O valor 4 significa que um Stored Procedure.

25

Para o caso de consultas do Microsoft Access devemos definir

26

o tipo como sendo Stored Procedure.

27

Ao invs do valor 4 poderamos utilizar a constante

28

adCmdStoredProc

29

Set com_paises = Server.CreateObject(ADODB.Command)

30

com_paises.ActiveConnection = conn

31

com_paises.CommandType = 4

32

Agora comeo a definir as caractersticas do parmetro.

33

Crio varivel para definir o nome do parmetro.

34

nome_par = Pais

35

Crio uma varivel para conter o valor do parmetro.

36

Defino este valor como sendo o valor selecionado

37

na lista de pases.

38

valor_par= Request.Form(listapaises)

39

Agora crio variveis que definem as demais

40

caractersticas do parmetro.

41

tipo_par = 129 parmetro do tipo string.

42

tama_par = 50 define o tamanho do parmetro.

43

dire_par = 1

define um parmetro de entrada.

44

Agora crio um objeto do tipo Parameter

45

Set pais_par=com_paises.CreateParameter
(nome_par,tipo_par,dire_par,tama_par,valor_par)

46

Adiciono o parmetro coleo Parameters.

47

com_paises.Parameters.Append pais_par

48

Defino o comando a ser executado como sendo o nome

407

Criando Sites Dinmicos com ASP 3.0

49

da consulta con_pedidos

50

com_paises.CommandText = con_pedidos

51

Crio um objeto RecordSet e utilizo o mtodo

52

execute do objeto Command para retornar valores

53

para o objeto RecordSet.

54

Set Resultados = Server.CreateObject(ADODB.RecordSet)

55

Set Resultados = com_paises.Execute

56

Reexibo a lista de pases para que o usurio possa

57

pesquisar os pedidos para um outro pas.

58

%>

59

<P><B>Para pesquisar outro pas, selecione na lista.</B></P>

60

<P><B><I>Depois clique no boto Pesquisar.</I></B></P>

61

<FORM action=procurapais.asp method=post id=form1 name=form1>

62

<SELECT id=listapaises name=listapaises>

63
64

<%

65

Agora construo a lista de opes a partir dos

66

dados obtidos da tabela Orders.

67

Para cada pas obtido, crio uma nova opo

68

na lista.

69

Do While Not Paises.EOF

70

Response.Write <OPTION value= & Chr(34) & Paises.Fields(ShipCountry) &


Chr(34)

71

If Paises.Fields(ShipCountry)= Request.Form(listapaises) Then

72

Response.Write SELECTED

73

End If

74

Response.Write > & Paises.Fields(ShipCountry)& </OPTION>

75

Paises.MoveNext

76

Loop

77

%>

408

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

78

</SELECT>

79

<INPUT type=submit value=Pesquisar id=Pesquisar name=Pesquisar>

80

</FORM>

81

<%

82

Exibo os resultados obtidos a partir da consulta

83

con_pedidos.

84

%>

85

<B>Relao de pedidos para: <% =Request.Form(listapaises) %>.</B>

86

<HR>

87

<% Agora exibo os resultados utilizando uma tabela. %>

88

<TABLE border=1>

89

<TR>

90

<TD><B>Cdigo</B></TD>

91

<TD><B>Data</B></TD>

92

<TD><B>Cidade</B></TD>

93

<TD><B>Pas</B></TD>

94
95

</TR>
<%

96
97

Do While Not Resultados.EOF


%>

98

<TR>

99

<TD><% =Resultados.Fields(OrderID)

%></TD>

100

<TD><% =Resultados.Fields(OrderDate)

%></TD>

101

<TD><% =Resultados.Fields(ShipCity)

%></TD>

102

<TD><I><% =Resultados.Fields(ShipCountry) %></I></TD>

103

</TR>

104 <% Resultados.MoveNext


105 Loop
106 %>

409

Criando Sites Dinmicos com ASP 3.0

107 </TABLE>
108 <BR>
109 <HR>
110 </BODY>
111 </HTML>

A Listagem 7.3 salienta diversos pontos importantes na utilizao do objeto Command para a execuo
de Consultas Parametrizadas, atravs da passagem de parmetros utilizando o objeto Parameter.
Vamos detalhar alguns trechos desta listagem. Observe o seguinte trecho de cdigo:
29

Set com_paises = Server.CreateObject(ADODB.Command)

30

com_paises.ActiveConnection = conn

31

com_paises.CommandType = 4

Inicialmente criamos um objeto do tipo Command, depois definimos a sua propriedade


ActiveConnection como sendo a conexo conn. Por ltimo definimos a propriedade
CommandType com o valor 4. Ao invs do valor 4 poderamos ter utilizado a constante
adCmdStoredProc, o que significa que o valor passado para a propriedade CommandText
deve ser o nome de uma consulta (no caso do Microsoft Access), ou de um Stored Procedure
(no caso do Microsoft SQL Server). Como queremos executar a consulta con_pedidos,
definimos a propriedade CommandType com o valor 4.

NOTA
Na Tabela 7.3 esto listados os valores e respectivas constantes para a propriedade
CommandType.

Em seguida comeo a definir as caractersticas do parmetro que ser criado e passado para a
consulta. Isto feito com o seguinte trecho de cdigo:
32

Agora comeo a definir as caractersticas do parmetro.

33

Crio varivel para definir o nome do parmetro.

34

nome_par = Pais

35

Crio uma varivel para conter o valor do parmetro.

36

Defino este valor como sendo o valor selecionado

37

na lista de pases.

410

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

38

valor_par= Request.Form(listapaises)

39

Agora crio variveis que definem as demais

40

caractersticas do parmetro.

41

tipo_par = 129 parmetro do tipo string.

42

tama_par = 50 define o tamanho do parmetro.

43

dire_par = 1

define um parmetro de entrada.

Primeiro definimos o nome do parmetro, que deve ser o mesmo utilizado para a definio
do parmetro, quando da criao da consulta no Microsoft Access. Neste caso criamos uma
varivel chamada nome_par e definimos o seu valor como Pais.
Logo em seguida criamos a varivel valor_par, a qual ir conter o valor que ser passado para
o parmetro Pais. Este valor o selecionado na lista de pases da pgina command2.asp,
conforme indicado pelo cdigo abaixo:
38

valor_par= Request.Form(listapaises)

Seguindo as definies, criamos uma varivel para o tipo do parmetro tipo_par. A esta
varivel foi atribudo o valor 129. Ao invs do valor 129 poderamos ter utilizado a constante
adChar, que define o parmetro como sendo uma String, isto , do tipo texto. Na Tabela 7.5
temos uma listagem com os principais valores e respectivas constantes que podem ser definidas
para o tipo do parmetro.
Tabela 7.5 Principais Valores/Constantes para definio do tipo do parmetro.
Valor/Constante

Descrio

0x2000/adArray

Um valor de Flag indicativo de que temos um array


de valores, o qual deve ser combinado com outro
valor indicativo de tipo. Este valor indica um array
de parmetros de um determinado tipo.

20/adBigInt

Indica um inteiro de 8 bytes.

128/adBibary

Indica um valor binrio.

11/adBoolean

Indica um valor boleano, do tipo Verdadeiro ou


Falso, Sim ou No.

8/sdBSTR

Indica uma String de caracteres de terminao nula


(Unicode).

129/adChar

Indica um valor de String, isto , texto.

411

Criando Sites Dinmicos com ASP 3.0

Valor/Constante

Descrio

6/adCurrency

Indica um valor do tipo currency, o qual um


nmero com quatro casas decimais fixas.

7/adDate

Indica um valor do tipo Data.

134/adDBTime

Indica um valor de hora, no formato hhmmss.

135/adDBTimeStamp

Indica um valor de data/hora no formato


yyyymmddhhmmss

14/adDecimal

Indica um valor decimal.

5/adDouble

Indica um valor numrico de preciso dupla.

0/adEmpty

No define nenhum valor.

10/adError

Indica um cdigo de erro de 32 bits.

72/adGUID

Indica um valor do tipo GUID Globally Unique


Identifier.

3/adInteger

Indica um valor inteiro de 4 bytes.

4/adSingle

Indica um valor numrico de preciso simples.

Em seguida definimos um tamanho mximo em bytes para o parmetro, que no nosso exemplo
foi definido para 50, conforme indicado pelo seguinte comando:
42

tama_par = 50 define o tamanho do parmetro.

Finalmente definimos uma varivel para conter o valor de definio para a propriedade
Direction do parmetro. Este valor foi definido em 1, o que significa um parmetro de entrada,
isto , um parmetro que envia um valor para a consulta do Microsoft Access. Esta definio
est indicada no cdigo a seguir:
43

dire_par = 1

define um parmetro de entrada.

Ao invs do valor 1, poderamos ter utilizado a constante adParamInput. Na Tabela 7.6 temos
uma listagem com os valores e respectivas constantes que podem ser definidas para a
propriedade Direction.
Tabela 7.6 Valores/Constantes para a propriedade Direction.
Valor/Constante

Descrio

1/adParamImput

Indica um parmetro de entrada. o valor padro.

2/adParamOutput

Indica que o parmetro de sada.

412

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

Valor/Constante

Descrio

3/adParamInputOutput

Indica que o parmetro de entrada e sada.

4/adParamReturnValue

Indica que o parmetro representa um valor de


retorno.

0/adParamUnknown

Indica um parmetro com direo desconhecida.

NOTA
Criamos variveis para conter estes valores. Depois passaremos estas variveis para o mtodo
CreateParameter. Ao invs de criarmos as variveis, poderamos passar os valores diretamente para
o mtodo CreateParameter. Adotamos este procedimento para facilitar o entendimento do cdigo.

O prximo passo criar um objeto do tipo Parameter, utilizando o mtodo CreateParameter


do objeto Command. Chamamos este objeto de pais_par, conforme indicado abaixo:
44

Agora crio um objeto do tipo Parameter

45

Set pais_par=com_paises.CreateParameter
(nome_par,tipo_par,dire_par,tama_par,valor_par)

A sintaxe para o mtodo CreateParameter a seguinte:


Set nome_parameter = nome_command.CreateParameter (Name, Type, Direction, Size, Value)

Onde temos:
Name: O nome do parmetro.
Type: O tipo do parmetro. Os principais valores de tipo possveis esto listados na
Tabela 7.5.
Direction: Definio da direo do parmetro. Os principais valores de direo possveis,
esto listados na Tabela 7.6.
Size: Define o tamanho mximo para o parmetro.
Value: Define o valor do parmetro. No nosso caso o valor que ser enviado para a
consulta con_pedidos, e que servir como critrio de filtragem para o campo
ShipCountry.
Uma vez criado o parmetro hora de adicion-lo coleo Parameters do objeto Command.
Para fazer isso, utilizamos o mtodo Append da coleo Parameters, conforme indicado a seguir:
46

Adiciono o parmetro coleo Parameters.

47

com_paises.Parameters.Append pais_par

413

Criando Sites Dinmicos com ASP 3.0

Observe que passamos para o mtodo Append o nome do objeto Parameter a ser adicionado
a coleo Parameters. Utilizando Append, podemos adicionar novos parmetros.
Agora preciso definir a propriedade CommandText do objeto com_paises. Como definimos a
propriedade CommandType como 4 (Stored Procedure), vamos passar para o objeto
CommandText o nome da consulta a ser executada, que no nosso exemplo con_pedidos.
Isto feito com o seguinte cdigo:
50

com_paises.CommandText = con_pedidos

O passo final criar um objeto RecordSet utilizando o mtodo Execute do objeto Command.
Isto feito com o seguinte cdigo:
54

Set Resultados = Server.CreateObject(ADODB.RecordSet)

55

Set Resultados = com_paises.Execute

Assim, o valor selecionado na lista de pases passado para a consulta con_pedidos. A consulta
executada e somente so retornados os registros em que o campo ShipCountry contm o
valor selecionado na lista de pases.
Com a utilizao do objeto Command e do objeto Parameter foi possvel executar uma Consulta
Parametrizada no Microsoft Access, passando o valor do parmetro para a consulta.

Utilizando o Nosso Exemplo


Agora vamos utilizar o nosso exemplo, para comprovar o correto funcionamento do mesmo.
Ao carregar a pgina command2.asp, obtemos o resultado indicado na Figura 7.11.

Figura 7.11: Selecionando um pas da lista.

414

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

Vamos supor que o usurio selecionou Norway, na lista de pases. Ao clicar no boto Pesquisar
sero exibidos apenas os pedidos para o pas selecionado, conforme indicado na Figura 7.12.

Figura 7.12: Exibindo os pedidos para Norway.


Observe que novamente exibida a lista de pases e o pas selecionado anteriormente aparece
selecionado na lista. Para pesquisar os pedidos para outro pas s selecionar o pas desejado
e clicar no boto Pesquisar. Veja que com isso construmos um formulrio de pesquisa bastante
interativo. O usurio seleciona o pas desejado e manda pesquisar. Cada vez que o usurio
seleciona um pas diferente na lista, e clica no boto Pesquisar, o novo valor selecionado
passado como parmetro para a consulta con_pedidos. A consulta executada e retorna
somente os registros que atendem ao critrio passado como parmetro.

Um Desafio Para o Amigo Leitor


Agora que j conhecemos vrios detalhes sobre o acesso a bancos de dados, atravs de pginas
ASP, fica aqui um pequeno desafio para o amigo leitor.

415

Criando Sites Dinmicos com ASP 3.0

Desafio: Modificar o exemplo anterior fazendo as seguintes melhorias.


Modificar a consulta con_pedidos incluindo um parmetro chamado AnoPedido. Este
parmetro ser utilizado para filtrar somente os registros de um determinado ano. Adicionar
um campo calculado consulta, que exiba somente o ano do campo OrderDate.
Modificar a pgina command2.asp para que, alm de uma lista com os nomes dos
pases, seja exibida uma lista com a relao de anos para os quais existem pedidos.
Construir esta lista dinamicamente, assim como foi construda a lista para os pases.
Modificar a pgina procurapais.asp, para que a mesma crie mais um parmetro chamado
ano_ped e passe esse parmetro para a consulta con_pedidos, de tal forma que somente
sejam retornados os pedidos para o Pas selecionado e para o Ano selecionado.
Vamos exemplificar como deve ser o resultado final, aps estas alteraes.
Ao carregar a pgina command2.asp, obtemos o resultado indicado na Figura 7.13.

Figura 7.13: Selecione um pas da lista Pas e o ano na lista Ano.


Vamos supor que o usurio selecionou Brazil, na lista de pases e 1994 na lista Ano. Ao
clicar no boto Pesquisar sero exibidos apenas os pedidos para pas e ano selecionados,
conforme indicado na Figura 7.14.
Para fazer uma nova pesquisa, basta selecionar novos critrios e clicar no boto Pesquisar.

416

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

Figura 7.14: Pedidos para Brazil no ano de 1994.


Em caso de dificuldades na criao da nova verso do nosso exemplo s entrar em contato pelo
e-mail: juliobattisti@hotmail.com. Mas antes de entrar em contato procure revisar os conceitos j
apresentados at o momento. Praticar muito importante para conseguir fix-los.

Um Pouco Mais Sobre Pesquisas em Banco de Dados


Neste item iremos explorar um pouco mais a utilizao da linguagem SQL em pginas ASP.

IMPORTANTE
Estaremos utilizando exemplos que acessam bancos de dados do Microsoft Access. Para o
acesso a outros bancos de dados, podem existir pequenas diferenas, dependendo do OLE DB
Provider para cada caso. Caso voc esteja utilizando outro banco de dados, consulte a
documentao do padro SQL do mesmo.

417

Criando Sites Dinmicos com ASP 3.0

Trataremos dos seguintes tpicos:


A utilizao do operador Like.
Definindo mltiplos critrios.
Utilizando funes de agregao.

A Utilizao do Operador Like


Com o operador Like, podemos criar consultas que retornam resultados contendo um
determinado padro. Por exemplo, podemos fazer uma consulta que localize todos os clientes
em que o primeiro nome inicie com Jo. Neste caso sero retornados os registros de Joo da
Silva, Joo Santos, Jos da Silva, Josimar da Silva e assim por diante. O operador Like nos d
uma flexibilidade bastante grande, pois permite que faamos pesquisa, digitando apenas
parte do valor procurado.
Considere a seguinte instruo SQL:
SELECT CustomerID, CompanyName, ContactName FROM Customers
WHERE CompanyName Like La%

NOTA
Estamos tomando como base a tabela Customers do banco de dados nwind.mdb.

Esta instruo iria selecionar apenas os registros cujo campo CompanyName iniciasse com La.

IMPORTANTE
Quando utilizamos o Microsoft Access, utilizamos o * como caractere coringa; j em ASP
utilizamos o %. Outra diferena importante em relao a critrios de texto. Quando
utilizamos o Microsoft Access, todo critrio de texto deve vir entre aspas (), j no caso de
pginas ASP, todo critrio de texto deve vir entre apstrofes ().

Na Listagem 7.4 temos exemplo de pgina que utiliza o operador Like.


Listagem 7.4 Utilizando o operador Like para fazer pesquisas exlike.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

418

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

<TITLE>Utilizando o operador Like.</TITLE>

<BODY>

<%

Set conn=Server.CreateObject(ADODB.Connection)

Agora abro uma conexo com o arquivo nwind.mdb

10

utilizando OLE DB.

11

conn.ConnectionString = PROVIDER=MICROSOFT.JET.OLEDB.4.0;

12

DATA SOURCE=c:\meus documentos\nwind.mdb

13

conn.Open

14

Agora crio uma instruo SQL que utiliza o operador Like.

15

inst_sql=Select * from Customers where CompanyName Like La%

16

Set Cust= Server.CreateObject(ADODB.RecordSet)

17

Cust.Open inst_sql,conn,3,3

18

%>

19

<P>

20

<FONT color=navy size=4><B>

21

Relao de Clientes cujo nome comea com La.

22

</B></FONT>

23

</P>

24

<HR>

25

<TABLE>

26

<TR>

27

<TD><B>Cdigo</B></TD>

28

<TD><B>Nome </B></TD>

29

<TD><B>Cidade

30

</TR>

31

<%

</B></TD>

419

Criando Sites Dinmicos com ASP 3.0

32

Do Until Cust.EOF

33

%>

34

<TR>

35

<TD><%=Cust.Fields(CustomerId)

36

<TD><%=Cust.Fields(CompanyName)%> </TD>

37
38

%> </TD>

<TD><%=Cust.Fields(City)%> </TD>
</TR>

39

<%

40

Ped.MoveNext

41

Loop

42

%>

43

</TABLE>

44

<HR>

45

</BODY>

46

</HTML>

Ao carregarmos este exemplo no Internet Explorer, obteremos o resultado indicado na Figura 7.15.

Figura 7.15: Resultados obtidos com o operador Like.


Agora vamos supor que voc quisesse uma listagem de todos os consumidores que possuem
o texto La em qualquer parte do nome, no necessariamente no incio. Mais uma vez a

420

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

utilizao do operador Like facilita a nossa vida. Para obter o resultado desejado, bastaria
alterar a instruo SQL da Listagem 7.4. A instruo deve ficar da seguinte maneira:
inst_sql=Select * from Customers where CompanyName Like %La%

Bastou colocar mais um caractere % antes do La. Com isso sero retornados todos os registros que
contiverem La em qualquer parte do campo CompanyName, conforme indicado na Figura 7.16.

Figura 7.16: Mais um exemplo de utilizao do operador Like.


Poderamos comear a refinar mais ainda a nossa consulta. Vamos pesquisar todos os registros
em que o Nome do Cliente (campo CompanyName) possui La e o CEP (campo PostalCode)
possui o nmero 3.
Para obter o resultado desejado, bastaria alterar a instruo SQL da Listagem 7.4. A instruo
deve ficar da seguinte maneira:
inst_sql=Select * from Customers where CompanyName Like %La% and
PostalCode Like %3%

Na Figura 7.17 temos a listagem obtida aps esta alterao da instruo SQL.

421

Criando Sites Dinmicos com ASP 3.0

Figura 7.17: Utiliando o operador Like e And.


Agora vamos supor que voc queira uma listagem somente com os registros em que o campo
CompanyName inicie com uma letra na faixa de A at M, isto , a primeira letra do nome deve
estar entre A e M. Alm disso voc deseja que esta listagem seja classificada em ordem ascendente
do campo CompanyName. Para obter este resultado, basta utilizar a instruo SQL a seguir:
inst_sql=Select * from Customers where CompanyName Like [A-M]% Order By CompanyName

O resultado desta pesquisa est indicado na Figura 7.18.

NOTA
Ao invs de digitar a instruo SQL diretamente no cdigo ASP, a mesma pode ser construda
a partir de valores digitados ou selecionados em um formulrio. No final do captulo, criaremos
um formulrio genrico para pesquisas, onde o usurio poder definir por qual ou quais critrios
deseja fazer a pesquisa e selecionar um valor para os critrios. Ao clicar em um boto Pesquisar,
os dados so enviados para uma pgina ASP, que monta a instruo SQL de acordo com as
opes selecionadas pelo usurio.
Com estes exemplos, podemos comprovar a versatilidade e facilidade de uso do operador Like.

422

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

Figura 7.18: Utiliando o operador Like e uma faixa inicial.

A Utilizao de Mltiplos Critrios


Para realizarmos uma pesquisa com mais de um critrio, utilizamos os operadores And e Or.
Inicialmente vamos salientar a diferena entre ambos.

O Operador And
Quando utilizamos o operador And para ligar dois critrios, somente sero selecionados os
registros que atenderem, ao mesmo tempo, aos dois critrios. Caso o registro somente atenda
a um dos critrios, no ser selecionado. Considere o seguinte exemplo:
inst_sql=Select * from Orders where ShipCountry = France and ShipCity = Lyon

Neste caso somente sero selecionados os registros em que o pas for France e a cidade Lyon,
isto , somente os registros que atenderem aos dois critrios.
Podemos utilizar mais do que um operador And. Com isso podemos especificar trs ou mais
critrios. Mas, a regra se mantm: para que um registro seja selecionado, ele precisa atender

423

Criando Sites Dinmicos com ASP 3.0

a todos os critrios ligados pelos operadores And. Se um nico critrio falhar, o registro no
ser selecionado.

O Operador Or
Quando utilizamos o operador Or para ligar dois critrios, somente sero selecionados os
registros que atenderem, pelo menos, a um dos dois critrios. O registro somente no ser
selecionado se no atender a nenhum dos dois critrios. Considere o seguinte exemplo:
inst_sql=Select * from Orders where ShipCountry = France Or ShipCity = Lyon

Neste caso sero selecionados todos os registros que atenderem a pelo menos um dos critrios,
isto , se o pas for igual a France, o registro ser selecionado, independente da cidade. Se a
cidade for igual a Lyon, o registro ser selecionado, independente do pas. Caso o registro
atenda aos dois critrios tambm ser selecionado. A nica situao em que o registro no ser
selecionado quando no atender a nenhum dos dois critrios ligados pelo operador Or.
Podemos utilizar mais do que um operador Or. Com isso podemos especificar trs ou mais
critrios. Mas a regra se mantm, para que um registro seja selecionado, ele precisa atender a
pelo menos um dos critrios ligados pelos operadores Or. Somente se todos os critrios falharem
que o registro no ser selecionado.

Alguns Exemplos de Utilizao de Mltiplos Critrios


Exemplo 1: Vamos supor que desejamos uma listagem dos pedidos que atendam aos seguintes
critrios:
Campo ShipCountry = France
OrderDate deve estar dentro do ano de 1994.
A instruo SQL a seguinte:
inst_sql=Select * from Orders where ShipCountry=France And OrderDate>#01/01/1994#
And OrderDate<#31/12/1994#

Observe que quando formos definir um critrio para um campo do tipo Data, devemos colocar
o valor entre os sinais de #.
Na figura 7.19, temos o resultado da execuo da instruo SQL do nosso exemplo.

424

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

Figura 7.19: Especificando critrios para o Pas e para a Data.


Exemplo 2: Se, no exemplo anterior, trocarmos o primeiro And por um Or e utilizarmos
parnteses para determinar a ordem de avaliao, conforme indicado no exemplo:
inst_sql=Select * from Orders where ShipCountry=France Or
(OrderDate>#01/01/1994# And OrderDate<#31/12/1994#)

qual seria o resultado desta instruo SQL?


Seriam retornados todos os pedidos para o pas France, independente do ano. Tambm seriam
retornados todos os pedidos para o ano de 1994, independente do Pas. Lembre que para ser
selecionado, basta que o registro atenda um dos critrios ligados pelo Or. Ao colocarmos os
parnteses, estamos forando que os critrios da data sejam avaliados de uma maneira nica.
O resultado desta comparao que ligado pelo Or primeira parte do critrio.
Exemplo 3: Vamos fazer uma pesquisa em que sejam exibidos os pedidos para todos os pases,
com exceo dos pedidos em que o campo ShipCountry seja igual a France. Podemos utilizar
a seguinte instruo SQL:
inst_sql=Select * from Orders where ShipCountry <>France

425

Criando Sites Dinmicos com ASP 3.0

Neste caso fizemos uso do operador diferente <>. Com isso estamos dizendo que devem ser
selecionados todos os registros em que o campo ShipCountry for diferente de France.
Exemplo 4: Queremos pesquisar por registros que possam apresentar dois ou mais valores
em um determinado campo, como por exemplo, pesquisar todos os pedidos para Brazil, France,
Argentina ou Germany. Poderamos utilizar vrios critrios ligados pelo operador Or, porm
existe uma maneira mais simples de fazer isso, que atravs da utilizao do operador In,
conforme indicado no exemplo abaixo:
inst_sql=Select * from Orders where ShipCountry In (France,Argentina, Brazil,
Germany) Order By ShipCountry

Com o uso do operador In, podemos definir dois ou mais critrios para um determinado
campo. A lista de critrios vem entre parnteses, cada critrio deve ser colocado entre
apstrofes e separados por vrgula.
Exemplo 5: Vamos inverter um pouco o exemplo anterior: criar uma listagem de todos os
pedidos, com exceo dos pedidos enviados para os seguintes pases:
Argentina
Brazil
France
Germany
Podemos utilizar a mesma instruo anterior, apenas colocando o operador Not, antes do
operador In, conforme indicado a seguir:
inst_sql=Select * from Orders where ShipCountry Not In (France,Argentina, Brazil,
Germany) Order By ShipCountry

O Not informa que devem ser selecionados todos os registros, com exceo daqueles em que
o campo ShipCountry contiver os valores especificados como parmetros do operador In.
A utilizao de operadores nos permite criar consultas bastante avanadas, combinando
critrios, e utilizando critrios mltiplos. Tambm podemos utilizar as chamadas funes de
agregao, que ser o assunto do prximo item.

Utilizando Funes de Agregao


As funes de agregao nos permitem criar valores consolidados dos dados de uma ou mais
tabelas, como por exemplo:
A soma de todos os pedidos enviados para a Argentina.
A mdia dos pedidos para um determinado cliente.

426

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

O nmero de pedidos enviados para um determinado pas em determinado ano.


O menor e o maior pedido para um determinado cliente ou pas.
Para obter estes resultados consolidados, podemos utilizar as diversas funes de agregao
disponveis. Na Tabela 7.7, temos a descrio das principais funes de agregao disponveis.
Tabela 7.7 Funes de agregao.
Funo

Descrio

Count( )

utilizada para efetuar uma contagem. Pode ser uma


contagem geral, como por exemplo o nmero de registros de
uma tabela, ou especfica, como o nmero de pedidos para
cada pas.

AVG( )

utilizada para clculo de mdias. Calcula a mdia aritmtica


de um determinado campo. Somente pode ser utilizada com
campos numricos. Valores do tipo Null sero ignorados.

Sum( )

utilizada para efetuar a soma de campos numricos.

Max( )

utilizada para determinar o maior valor de um campo


numrico.

Min( )

utilizada para determinar o menor valor de um campo


numrico.

Alguns Exemplos de Utilizao de Funes de Agregao


Exemplo 1: Vamos comear com um exemplo em que seja exibida uma listagem, com o nmero
de pedidos para cada pas, classificada pelo nome do pas de destino.
inst_sql=Select ShipCountry, Count(OrderID) As Totais from Orders
Group By ShipCountry Order By ShipCountry

Na Listagem 7.5, temos um exemplo de uma pgina ASP, excount.asp, que faz uso desta
instruo SQL.
Listagem 7.5 Utilizando a funo de agregao Count( ) excount.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

427

Criando Sites Dinmicos com ASP 3.0

<TITLE>Utilizando a funo Count.</TITLE>

<BODY>

<%

O primeiro passo criar a conexo com o banco de dados.

Para isto crio um objeto do tipo Connection.

10

Cria um objeto do tipo ADODB.Connection

11

Set conn=Server.CreateObject(ADODB.Connection)

12

Agora abro uma conexo com o arquivo nwind.mdb

13

utilizando OLE DB.

14

conn.ConnectionString = PROVIDER=MICROSOFT.JET.OLEDB.4.0;
DATA SOURCE=c:\meus documentos\nwind.mdb

15

conn.Open

16

Agora crio um objeto do tipo RecordSet, o qual ser,

17

automaticamente associado com a conexo conn.

18

inst_sql=Select ShipCountry, Count(OrderID) As Totais from Orders


Group By ShipCountry Order By ShipCountry

19

Set Ped= Server.CreateObject(ADODB.RecordSet)

20

Ped.Open inst_sql,conn,3,3

21

%>

22

<P>

23

<FONT color=navy size=4><B>

24

Nmero de pedidos por pas de destino.

25

</B></FONT>

26

</P>

27

<HR>

28

<TABLE border=1>

29

<TR>

428

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

30

<TD><B>Pas</B></TD>

31
32

<TD><B>Pedidos

</B></TD>

</TR>

33

<%

34

Do Until Ped.EOF

35

%>

36

<TR>

37

<TD>

38

<TD><B><%=Ped.Fields(Totais)

39

<%=Ped.Fields(ShipCountry)

%>

</TD>

%> </B></TD>

</TR>

40

<%

41

Ped.MoveNext

42

Loop

43

%>

44

</TABLE>

45

<HR>

46

</BODY>

47

</HTML>

Na Figura 7.20, temos o resultado da pgina excount.asp, quando a mesma carregada no


Internet Explorer.

Figura 7.20: Resultados obtidos com a utilizao da funo Count( ).

429

Criando Sites Dinmicos com ASP 3.0

Exemplo 2: Vamos supor que devssemos alterar a nossa listagem, para classific-la em ordem
descendente do nmero de pedidos, isto , devem ser listados primeiro os pases com o
maior nmero de pedidos. Para obter este resultado, bastaria alterar a instruo SQL, deixandoa da seguinte maneira:
inst_sql=Select ShipCountry, Count(OrderID) As Totais from Orders Group By
ShipCountry Order By Count(OrderID)Desc

Ao utilizarmos esta instruo, obteremos o resultado indicado na Figura 7.21.

Figura 7.21: Resultados em ordem decresente do nmero de pedidos.

IMPORTANTE
Quando formos fazer a ordenao, utilizando a clusula Order By, no podemos utilizar o
alis do campo. O alis o nome que damos ao campo que est sendo calculado. No nosso
exemplo, chamamos o campo com o total de pedidos de Totais. Um alis criado com a
palavra As. Se utilizarmos um alis na clusula Order By, obteremos um erro e a pgina no
ser carregada. A instruo a seguir comete este erro.

430

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

Cuidado instruo incorreta:


inst_sql=Select ShipCountry, Count(OrderID) As Totais from Orders Group By
ShipCountry Order By Totais Desc

Se utilizarmos esta instruo, ao tentarmos carregar a pgina, obteremos o erro indicado na


Figura 7.22.

Figura 7.22: Erro causado pelo uso de um alis na clusula Order By.
Exemplo 3: Agora vamos utilizar a funo Sum para retornar a soma do valor do Frete (Freight)
para cada pas. Para obter este resultado, podemos utilizar o comando SQL a seguir:
inst_sql=Select ShipCountry, Sum(Freight) As SomFrei from Orders Group By
ShipCountry Order By Sum(Freight) Desc

Na Listagem 7.6, temos um exemplo de uma pgina ASP, exsum.asp, que faz uso desta
instruo SQL.
Listagem 7.6 Utilizando a funo de agregao Sum ( ) exsum.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

<TITLE>Utilizando a funo Sum.</TITLE>

<BODY>

431

Criando Sites Dinmicos com ASP 3.0

<%

O primeiro passo criar a conexo com o banco de dados.

Para isto crio um objeto do tipo Connection.

10

Cria um objeto do tipo ADODB.Connection

11

Set conn=Server.CreateObject(ADODB.Connection)

12

Agora abro uma conexo com o arquivo nwind.mdb

13

utilizando OLE DB.

14

conn.ConnectionString = PROVIDER=MICROSOFT.JET.OLEDB.4.0;
DATA SOURCE=c:\meus documentos\nwind.mdb

15

conn.Open

16

Agora crio um objeto do tipo RecordSet, o qual ser,

17

automaticamente associado com a conexo conn.

18

inst_sql=Select ShipCountry, Sum(Freight) As SomFrei from Orders


Group By ShipCountry Order By Sum(Freight) Desc

19

Set Ped= Server.CreateObject(ADODB.RecordSet)

20

Ped.Open inst_sql,conn,3,3

21

%>

22

<P>

23

<FONT color=navy size=4><B>

24

Soma do frete por pas de destino.

25

</B></FONT>

26

</P>

27

<HR>

28

<TABLE border=1>

29

<TR>

30
31
32

<TD><B>Pas</B></TD>
<TD><B>Soma do Frete </B></TD>
</TR>

432

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

33

<%

34

Do Until Ped.EOF

35

%>

36

<TR>

37

<TD>

38

<TD align=Right><B><%=FormatNumber(Ped.Fields(SomFrei),2)

39
40

<%=Ped.Fields(ShipCountry)

%>

</TD>

%> </B></TD>
</TR>

41

<%

42

Ped.MoveNext

43

Loop

44

%>

45

</TABLE>

46

<HR>

47

</BODY>

48

</HTML>

Na Figura 7.23, temos o resultado da pgina exsum.asp, quando a mesma carregada no


Internet Explorer.

Figura 7.23: Resultados obtidos com a utilizao da funo Sum( ).

433

Criando Sites Dinmicos com ASP 3.0

Apenas um comentrio sobre a utilizao da funo FormatNumber: esta funo foi utilizada
para delimitar o resultado da soma em duas casas decimais.
Exemplo 3: Ao invs da funo Sum, vamos utilizar a funo Avg, para retornar a mdia
aritmtica do valor do Frete (Freight) para cada pas. Para obter este resultado, podemos utilizar
o comando SQL a seguir:
inst_sql=Select ShipCountry, Avg(Freight) As AvgFrei from Orders Group By
ShipCountry Order By Avg(Freight) Desc

O resultado obtido com esta instruo mostrado na Figura 7.24.

Figura 7.24: Resultados obtidos com a utilizao da funo Avg( ).


Exemplo 4: Vamos construir um exemplo um pouco mais sofisticado. Vamos fazer com que
sejam listados todos os pedidos, cujo valor do frete seja maior do que o valor mdio do frete.
A listagem ser classificada em ordem decrescente do valor do frete. Podemos utilizar a seguinte
instruo SQL:
Select ShipCountry, OrderID, OrderDate, Avg(Freight) As AvgFrei from Orders
Group By ShipCountry, OrderID, OrderDate
Having Avg(Freight)>Davg(Freight,Orders) Order By Avg(Freight) Desc

Observe que nesta instruo utilizamos algumas elementos novos, como por exemplo:

434

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

A clusula Having: quando utilizamos a clusula Group By, devemos utilizar a clusula
Having ao invs da clusula Where.
Utilizamos a funo Davg, que uma funo chamada de domnio. A funo Davg foi
utilizada para calcular a mdia geral do frete na tabela Orders. Utilizamos a seguinte sintaxe:
Davg(Nome_campo,Nome_da_tabela)

Ao executarmos esta instruo SQL, obteremos os resultados indicados na Figura 7.25.

Figura 7.25: Resultados obtidos com a utilizao da funo de domnio Davg( ).


Exemplo 5: Agora vamos utilizar as funes Max e Min, para retornar o pedido com o menor
valor de frete e o pedido com o maior valor de frete.
Na Listagem 7.7, temos um exemplo de uma pgina ASP, exmaxmin.asp, a qual faz uso das
funes Max e Min
Listagem 7.7 Utilizando as funes de agregao Max ( ) e Min( ) exmaxmin.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

<TITLE>Utilizando as funes Max e Min.</TITLE>

435

Criando Sites Dinmicos com ASP 3.0

<BODY>

<%

O primeiro passo criar a conexo com o banco de dados.

Para isto crio um objeto do tipo Connection.

10

Cria um objeto do tipo ADODB.Connection

11

Set conn=Server.CreateObject(ADODB.Connection)

12

Agora abro uma conexo com o arquivo nwind.mdb

13

utilizando OLE DB.

14

conn.ConnectionString = PROVIDER=MICROSOFT.JET.OLEDB.4.0;

15

conn.Open

16

Agora crio um objeto do tipo RecordSet, o qual ser,

17

automaticamente associado com a conexo conn.

DATA SOURCE=c:\meus documentos\nwind.mdb

18

inst_sql=Select Max(Freight) As MaiorFrete, Min(Freight) As MenorFrete From Orders

19

Set Ped= Server.CreateObject(ADODB.RecordSet)

20

Ped.Open inst_sql,conn,3,3

21

%>

22

<P>

23

<FONT color=navy size=4><B>

24

Valores Mximos e Mnimos de Frete.

25

</B></FONT>

26

</P>

27

<HR>

28

<TABLE border=1>

29

<TR>

30

<TD><B>Mximo</B></TD>

31

<TD><B>Mnimo</B></TD>

32

</TR>

33

<TR>

34

<TD>

<%=Ped.Fields(MaiorFrete)

%>

436

</TD>

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

35

<TD>

36

</TR>

37

</TABLE>

38

<HR>

39

</BODY>

40

</HTML>

<%=Ped.Fields(MenorFrete)

%>

</TD>

A Figura 7.26 mostra o resultado da pgina exmaxmin.asp, ao ser carregada no Internet Explorer.

Figura 7.26: Resultados obtidos com a utilizao das funes Max( ) e Min( ).
Agora vamos ao nosso exemplo final, no qual iremos construir um formulrio genrico, onde
o usurio poder selecionar por qual campo e por qual critrio deseja fazer a pesquisa.

Um Formulrio Genrico Para Pesquisas


Para finalizar este captulo vamos criar um formulrio que permite pesquisas genricas por
at trs critrios:
Pas de destino.
Ano do pedido.
Parte do endereo.

437

Criando Sites Dinmicos com ASP 3.0

O formulrio permite que sejam feitas pesquisa utilizando um ou mais destes critrios. Na
Figura 7.27 temos um exemplo do formulrio geral.asp, onde o usurio pode selecionar por
quais campos deseja pesquisar a tabela Orders e qual o valor para cada campo.

Figura 7.27: O formulrio onde o usurio define os critrios a serem utilizados geral.asp.
Na Listagem 7.8, temos o cdigo para a pgina geral.asp.
Listagem 7.8 O formulrio para definio dos critrios de pesquisa geral.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

</HEAD>

<BODY bgColor=silver>

<HR>

438

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

<FONT color=White style=BACKGROUND-COLOR: navy>

<B>

Formulrio para pesquisas na

10

tabela de Pedidos.<BR>

11

<FONT color=White>

12

Selecione por qual ou quais campos deseja fazer a pesquisa,

13

<BR>

14

depois defina valores para os campos selecionados.<BR>

15

<HR>

16

<%

17

O primeiro passo criar a conexo com o banco de dados.

18

Para isto crio um objeto do tipo Connection.

19

Cria um objeto do tipo ADODB.Connection

20

Set conn=Server.CreateObject(ADODB.Connection)

21

Agora abro uma conexo com o arquivo nwind.mdb

22

utilizando OLE DB.

23

conn.ConnectionString = PROVIDER=MICROSOFT.JET.OLEDB.4.0;

24

conn.Open

25

Agora criamos os objetos RecordSet,

26

para criao das listas com os nomes dos pases e

27

com a lista de anos para os quais existem pedidos.

28

Set Paises = Server.CreateObject(ADODB.Recordset)

29

Set Anos = Server.CreateObject(ADODB.Recordset)

30

Paises.Open Select ShipCountry from Orders Group By ShipCountry Order By


ShipCountry, conn, 3, 3

31

Anos.Open Select Year(OrderDate) As AnoPedido from Orders Group By


Year(OrderDate) Order By Year(OrderDate), conn, 3, 3

32

Neste ponto tenho os objetos RecordSet necessrios para a

33

criao das listas.

34

%>

DATA SOURCE=c:\meus documentos\nwind.mdb

439

Criando Sites Dinmicos com ASP 3.0

35

<FORM action=pesquisa.asp method=post id=form1 name=form1>

36

Pesquisar por Pas?

37

<INPUT id=pesqpais name=pesqpais type=radio value=Sim>Sim

38

<INPUT CHECKED id=pesqpais name=pesqpais type=radio value=Nao>No<BR>

39

</FONT></B></FONT>

40

<SELECT id=listapaises name=listapaises>

41

<%

42

Agora construo a lista de opes a partir dos

43

dados obtidos da tabela Orders.

44

Do While Not Paises.EOF

45

Response.Write <OPTION value= & Chr(34) & Paises.Fields(ShipCountry) &


Chr(34) & > & Paises.Fields(ShipCountry)& </OPTION>

46

Paises.MoveNext

47

Loop

48

%>

49

</SELECT>

50

<FONT color=White style=BACKGROUND-COLOR: navy>

51

<B>

52

<HR>

53

Pesquisar pelo Ano?

54

<INPUT id=pesqano name=pesqano type=radio value=Sim>Sim

55

<INPUT CHECKED id=pesqano name=pesqano type=radio value=Nao>No

56

<BR>

57

</FONT>

58

</B>

59

</FONT>

60

<SELECT id=listaano name=listaano>

61

<%

440

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

62

Agora construo a lista de opes a partir dos

63

dados obtidos da tabela Orders.

64

Para cada ano obtido, crio uma nova opo

65

na lista.

66

Do While Not Anos.EOF

67

Response.Write <OPTION value= & Chr(34) & Anos.Fields(AnoPedido)


& Chr(34) & > & Anos.Fields(AnoPedido)& </OPTION>

68

Anos.MoveNext

69

Loop

70

%>

71

</SELECT>

72

<FONT color=White style=BACKGROUND-COLOR: navy>

73

<B>

74

<HR>

75

O campo endereo deve conter?

76

<INPUT id=pesqend name=pesqend type=radio value=Sim>Sim

77

<INPUT CHECKED id=pesqend name=pesqend type=radio value=Nao>No

78

<BR>

79

Digite parte do endereo:</FONT></B></FONT>

80

<INPUT type=text id=partend name=partend size=25 maxlength=25>

81

<HR>

82

<INPUT type=submit value=Pesquisar id=Pesquisar name=Pesquisar>

83

</FORM>

84

</BODY>

85

</HTML>

Observe que mais uma vez as listas com os nomes dos pases e os anos, para os quais existem
pedidos, foram construdas dinamicamente, a partir dos dados da tabela Orders. Ao construir
as listas dinamicamente, evitamos que o usurio tente pesquisar, por exemplo, os pedidos
para um pas que no existe na tabela Orders. Com isso o usurio no perde tempo e faz as
pesquisas apenas para os pases para os quais realmente existem pedidos cadastrados. O
mesmo vlido para a lista com os anos para os quais existem pedidos cadastrados.

441

Criando Sites Dinmicos com ASP 3.0

O prximo passo construir a pgina pesquisa.asp. Esta pgina ir montar uma instruo
SQL de acordo com as opes selecionadas pelo usurio na pgina geral.asp. Por exemplo, se
o usurio marcar Sim somente para a lista de pases e selecionar Argentina, a pgina
pesquisa.asp ter que montar uma instruo SQL que pesquise a tabela Orders e retornar
somente os pedidos em que o campo ShipCountry for igual a Argentina.
Ento vamos construo da pgina pesquisa.asp. O ponto central da pgina pesquisa.asp
a montagem da instruo SQL com base nas opes selecionadas pelo usurio. O usurio
possui trs opes para definir parmetros de pesquisa:
Pas
Data
Endereo
O usurio poder selecionar uma ou mais opes. Com isto teremos oito possibilidades a
serem consideradas; o usurio est pesquisando:
Apenas pelo nome do pas.
Apenas pelo ano da data do pedido.
Apenas pelo endereo ou parte do endereo.
Pelo nome do pas e pelo ano da data do pedido.
Pelo nome e pelo endereo ou parte do endereo.
Pelo ano da data do pedido e pelo endereo ou parte do endereo.
Com base nos trs critrios.
Ou ainda:
O usurio no especificou nenhum critrio de pesquisa.
A pgina pesquisa.asp ter que analisar essas oito possibilidades e montar uma instruo
SQL diferente para cada uma delas.
Na Listagem 7.9, temos o cdigo para a pgina pesquisa.asp.
Listagem 7.9 O formulrio para definio dos critrios de pesquisa pesquisa.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

<TITLE>Resultado da pesquisa! </TITLE>

</HEAD>

<BODY bgColor=silver>

442

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

<%

O primeiro passo criar a conexo com o banco de dados.

para isto crio um objeto do tipo Connection.

10

Cria um objeto do tipo ADODB.Connection

11

Set conn=Server.CreateObject(ADODB.Connection)

12

Agora abro uma conexo com o arquivo nwind.mdb

13

utilizando OLE DB.

14

conn.ConnectionString = PROVIDER=MICROSOFT.JET.OLEDB.4.0;

15

conn.Open

16

Agora passamos a analisar cada uma das oito possibilidades.

17

**************************************************

18

A primeira possibilidade o caso em que o usurio

19

selecionou apenas um pas na lista de pases.

20

If (Request.Form(pesqpais)=Sim And Request.Form(pesqano)=Nao And

DATA SOURCE=c:\meus documentos\nwind.mdb

Request.Form(pesqend)=Nao) Then
21

inst_sql=Select * from orders where ShipCountry= & Request.Form


(listapaises) &

22

Response.Write Voc pesquisou pelo critrio Pas = <B> & Request.Form


(listapaises) & </B><HR>

23

End If

24

**************************************************

25

A segunda possibilidade o caso em que o usurio

26

selecionou apenas um ano na lista de anos.

27

If (Request.Form(pesqpais)=Nao And Request.Form(pesqano)=Sim And


Request.Form(pesqend)=Nao) Then

28

inst_sql=Select * from orders where Year(OrderDate)= & Request.Form


(listaano)

29

Response.Write Voc pesquisou pelo critrio Ano = <B> & Request.Form


(listaano) & </B><HR>

30

End If

31

**************************************************

32

A terceira possibilidade o caso em que o usurio

33

digitou um critrio para pesquisar no endereo.

443

Criando Sites Dinmicos com ASP 3.0

34

If (Request.Form(pesqpais)=Nao And Request.Form(pesqano)=Nao And


Request.Form(pesqend)=Sim) Then

35

inst_sql=Select * from orders where ShipAddress Like % & Request.Form


(partend) & %

36

Response.Write Voc pesquisou pelo critrio Endereo contendo: <B> &


Request.Form(partend) & </B><HR>

37

End If

38

**************************************************

39

A quarta possibilidade o caso em que o usurio

40

selecionou um pas na lista de pases e tambm

41

selecionou um ano na lista de anos.

42

If (Request.Form(pesqpais)=Sim And Request.Form(pesqano)=Sim And


Request.Form(pesqend)=Nao) Then

43

inst_sql=Select * from orders where ShipCountry= & Request.Form


(listapaises) & and Year(OrderDate)= & Request.Form(listaano)

44

Response.Write Voc pesquisou pelos seguintes critrios <BR>

45

Response.Write Pas = <B> & Request.Form(listapaises) & </B><BR>

46

Response.Write Ano = <B> & Request.Form(listaano) & </B><BR><HR>

47

End If

48

**************************************************

49

A quinta possibilidade o caso em que o usurio

50

selecionou um pas na lista de pases e tambm

51

digitou um critrio para pesquisar no endereo.

52

If (Request.Form(pesqpais)=Sim And Request.Form(pesqano)=Nao And


Request.Form(pesqend)=Sim) Then

53

inst_sql=Select * from orders where ShipCountry= & Request.Form


(listapaises) & and ShipAddress Like % & Request.Form(partend)& %

54

Response.Write Voc pesquisou pelos seguintes critrios <BR>

55

Response.Write Pas = <B> & Request.Form(listapaises) & </B><BR>

56

Response.Write Endereo contendo:<B> & Request.Form(partend) &


</B><BR><HR>

57

End If

58

**************************************************

59

A sexta possibilidade o caso em que o usurio

60

selecionou um ano na lista de anos e tambm

61

digitou um critrio para pesquisar no endereo.

62

If (Request.Form(pesqpais)=Nao And Request.Form(pesqano)=Sim And


Request.Form(pesqend)=Sim) Then

63

inst_sql=Select * from orders where Year(OrderDate)= & Request.Form


(listaano) & and ShipAddress Like % & Request.Form(partend)& %

64

Response.Write Voc pesquisou pelos seguintes critrios <BR>

444

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

65

Response.Write Ano = <B> & Request.Form(listaano) & </B><BR>

66

Response.Write Endereo contendo:<B> & Request.Form(partend) &


</B><BR><HR>

67

End If

68

**************************************************

69

A stima possibilidade o caso em que o usurio

70

no selecionou nenhum dos trs critrios.

71

If (Request.Form(pesqpais)=Nao And Request.Form(pesqano)=Nao And


Request.Form(pesqend)=Nao) Then

72

inst_sql=Select * from orders

73

Response.Write Voc no especificou nenhum critrio. <BR>

74

Response.Write Foram retornados todos os registros.<HR>

75

End If

76

**************************************************

77

A oitava possibilidade o caso em que o usurio

78

selecionou os trs critrios

79

If (Request.Form(pesqpais)=Sim And Request.Form(pesqano)=Sim And


Request.Form(pesqend)=Sim) Then

80

inst_sql=Select * from orders where Year(OrderDate)= & Request.Form


(listaano) & and ShipAddress Like % & Request.Form(partend)& % and
ShipCountry= & Request.Form(listapaises) &

81

Response.Write Voc pesquisou pelos seguintes critrios <BR>

82

Response.Write Pas = <B> & Request.Form(listapaises) & </B><BR>

83

Response.Write Ano = <B> & Request.Form(listaano) & </B><BR>

84

Response.Write Endereo contendo:<B> & Request.Form(partend) &


</B><BR><HR>

85

End If

86

Agora criamos um objeto RecordSet.

87

Set Pedidos = Server.CreateObject(ADODB.Recordset)

88

Pedidos.Open inst_sql, conn, 3, 3

89

Neste ponto tenho o objeto RecordSet com

90

os resultados da pesquisa.

91

*************************************************

92

Passo a exibir os resultados obtidos.

93

Response.Write <B>Foram Encontrados: & Pedidos.RecordCount & Registros


</B><HR>

94

%>

95

<A HREF=geral.asp>Clique aqui para fazer outra pesquisa.</A>

96

<HR>

97

<TABLE BORDER=1>

445

Criando Sites Dinmicos com ASP 3.0

98

<TR>

99

<TD><B>Cdigo

</B></TD>

100

<TD><B>Data

</B></TD>

101

<TD><B>Endereo</B></TD>

102

<TD><B>Pas

</B></TD>

103 </TR>
104 <%
105 Do While Not Pedidos.EOF
106 %>
107 <TR>
108

<TD><% =Pedidos.Fields(OrderID)

%></TD>

109

<TD><% =Pedidos.Fields(OrderDate)

%></TD>

110

<TD><% =Pedidos.Fields(ShipAddress)%></TD>

111

<TD><% =Pedidos.Fields(ShipCountry)%></TD>

112 </TR>
113 <%
114 Pedidos.MoveNext
115 Loop
116 %>
117 </TABLE>
118 </BODY>
119 </HTML>

Observe que a pgina pesquisa.asp no tem nada de especial. Apenas testamos as oito
possibilidades descritas anteriormente. Para cada uma das possibilidades montamos a instruo
SQL correspondente e informamos os critrios de pesquisa especificados pelo usurio.

Utilizando o Nosso Formulrio de Pesquisa


Agora vamos demonstrar a utilizao do nosso formulrio genrico para pesquisas na tabela Orders.
Na Figura 7.28 temos um exemplo onde o usurio apenas definiu um pas como critrio, no
caso o pas selecionado foi Austria.

446

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

Figura 7.28: Pesquisando os pedidos para Austria.


Ao clicar no boto Pesquisar, so obtidos os resultados indicados na Figura 7.29. Observe que
foram encontrados 40 registros para Austria.

Figura 7.29: Listagem de pedidos para Austria.

447

Criando Sites Dinmicos com ASP 3.0

Agora vamos clicar no link Clique aqui para fazer outra pesquisa, com isso voltaremos para a
pgina geral.asp, onde poderemos definir outros critrios de pesquisa.
Vamos refinar um pouco mais a nossa pesquisa. Selecione Austria na lista Pas e 1994 na lista
Ano. No esquea de marcar a opo Sim ao lado de cada critrio selecionado, caso contrrio o
critrio ser ignorado. O formulrio de pesquisa dever estar igual ao indicado na Figura 7.30.

Figura 7.30: Pesquisando os pedidos para Austria no ano de 1994.


Ao clicar no boto Pesquisar, so obtidos os resultados indicados na Figura 7.31. Observe que
foram encontrados cinco registros para Austria no ano de 1994.
Agora vamos fazer uma pesquisa envolvendo os trs critrios. Vamos definir os seguintes critrios:
Pas: Brazil
Ano: 1994
Endereo contendo: Rua
Clique no link Clique aqui para fazer outra pesquisa, com isso voltaremos para a pgina
geral.asp. Defina os critrios de pesquisa conforme indicado na Figura 7.32.

448

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

Figura 7.31: Listagem de pedidos para Austria no ano de 1994.

Figura 7.32: Pesquisando os pedidos para Brazil, no ano de 1994 e com o endereo contendo a palavra Rua.

449

Criando Sites Dinmicos com ASP 3.0

Ao clicar no boto Pesquisar, so obtidos os resultados indicados na Figura 7.33. Observe que foram
encontrados seis registros para Brazil, no ano de 1994, com o endereo contendo a palavra Rua.

Figura 7.33: Listagem de pedidos para Brazil, no ano de 1994, com o endereo contendo a palavra Rua.
Veja que, atravs deste exemplo, conseguimos criar um formulrio de pesquisa extremamente
verstil. Podemos definir de um a trs critrios de pesquisa, alm de definir o valor para cada
critrio. Este exemplo demonstra as possibilidades na utilizao de ASP para a construo de
sites dinmicos.

Concluso
Neste captulo aprendemos uma srie de tcnicas teis na construo de aplicaes Web
profissionais.
Iniciamos pelo estudo dos objetos Command e Parameter, os quais facilitam a execuo de
Consultas Parametrizadas, bem como o envio de parmetros e o recebimento de valores de
retorno dos Stored Procedures. Alm disso, utilizando os mtodos e propriedades dos objetos

450

Captulo 7 Bancos de Dados com ASP Conceitos Avanados Parte II

Command e Parameter podemos ter um controle bastante apurado sobre tipo, tamanho e
outras caractersticas dos parmetros a serem passados para consultas e Stored Procedures.
Foram apresentados exemplos prticos de utilizao destes dois objetos.
Depois passamos a estudar alguns conceitos avanados na utilizao da linguagem SQL.
Aprendemos a utilizar os operadores Like, And e Or, In e Not. Tambm aprendemos a utilizar
as funes de agregao e a funo de domnio Davg. Foram apresentados exemplos prticos de
utilizao dos conceitos avanados da linguagem SQL.
Por fim, apresentamos um exemplo prtico que salienta a natureza dinmica e as capacidades
do ASP 3.0, na construo de sites dinmicos, principalmente no que se refere a conexo e
pesquisas em bancos de dados.
Os exemplos deste captulo foram baseados no arquivo nwind.mdb, o qual fornecido
juntamente com o Microsoft Access. O nome dos campos esto em ingls. Caso voc esteja
utilizando uma verso do nwind.mdb que esteja com o nome dos campos em portugus,
utilize os nomes de campos da sua verso.
No prximo captulo falaremos um pouco mais sobre o que uma aplicao Web e sobre os
conceitos de Sesso e Aplicao, alm de aprendermos o conceito de componentes ASP.

451

Captulo 8 Aplicativos Web e Componentes

Captulo 8
Aplicativos Web
e Componentes

453

Criando Sites Dinmicos com ASP 3.0

Introduo
Neste captulo veremos o que significa uma Aplicao Web criada em ASP, que fica
armazenada no servidor IIS. Veremos exatamente quais os componentes que formam uma
aplicao Web. Revisaremos o conceito de estado e os problemas oriundos do fato do protocolo
HTTP no manter uma conexo aberta aps o carregamento da pgina.
Iremos conhecer a utilizao e o funcionamento do arquivo global.asa, o qual de grande
importncia para o gerenciamento de aplicaes Web no IIS. Em seguida passaremos a estudar
o objeto Session. Com o objeto Session, podemos manter valores para um determinado usurio,
enquanto o mesmo estiver acessando uma aplicao Web.
Por exemplo, quando um usurio passa de uma pgina para outra, a pgina acessada no teria
como acessar as opes selecionadas pelo usurio e os dados da pgina anterior, a no ser que
tivessem sido armazenados em um banco de dados. Ento, a pgina que est sendo acessada,
recuperaria estas informaes a partir deste banco de dados. Porm, trabalhar intensivamente
com o banco de dados pode degradar o desempenho da aplicao.
Com o objeto Session podemos armazenar informaes utilizadas em uma sesso do usurio.
As variveis armazenadas no objeto Session no sero perdidas quando o usurio acessar
outras pginas da nossa aplicao Web. Estas variveis somente sero descartadas quando o
usurio sair da aplicao, ou quando a sesso for encerrada por TimeOut.
O objeto Application pode ser utilizado para compartilhar informaes entre todos os usurios
que esto acessando uma determinada aplicao Web. Enquanto o objeto Session permite
que um usurio tenha acesso variveis armazenadas nele; o objeto Application permite que
todos os usurios que esto acessando a aplicao Web tenham acesso s informaes
armazenadas neste objeto.
Veremos exemplos de cdigo que utilizam os objetos Session e Application, bem como os
diversos mtodos, propriedades e eventos destes objetos.

O que uma Aplicao Web no IIS?


Antes de definirmos exatamente o que compe uma aplicao Web no IIS, vamos fazer uma
comparao entre as aplicaes Cliente/Servidor tradicionais e as aplicaes Web, com nfase
no conceito de conexo e estado.

454

Captulo 8 Aplicativos Web e Componentes

Uma Aplicao Cliente/Servidor Tradicional


Em uma aplicao Cliente/Servidor tradicional, temos a aplicao Cliente instalada em cada
uma das estaes da rede que faro acesso a aplicao, e podemos ter uma camada de lgica
instalada no servidor de Aplicaes, atravs da qual feito o acesso ao banco de dados.
Quando o usurio inicia a aplicao Cliente, o mesmo se identifica, normalmente atravs de
um nome de usurio (username ou login) e de uma senha.
As informaes de identificao so utilizadas para estabelecer uma conexo com o servidor.
Esta conexo mantida enquanto a aplicao Cliente estiver sendo utilizada. Atravs desta
conexo, o lado servidor da aplicao consegue identificar o usurio. Com a identificao do
usurio podem ser aplicadas regras de segurana, como nveis de permisso de acesso aos
dados, nveis de permisso para as funcionalidades da aplicao, log das aes realizadas
pelo usurio, etc. Por exemplo, as opes de menu da aplicao Cliente podem ser montadas
com base nas permisses de acesso que o usurio possui. Se o usurio no possui permisses
para alterar os dados, o menu com as opes de alterao no ser exibido para ele.
Atravs da manuteno da conexo e da respectiva possibilidade de identificar unicamente
cada um dos usurios conectados, podemos implementar a maioria das funcionalidades
essenciais nas aplicaes Cliente/Servidor tradicionais.
Porm, existem diversos problemas na atualizao e manuteno deste tipo de aplicao,
dentre os quais podemos destacar:
A atualizao dos sistemas problemtica pois, neste modelo, cada vez que houver
alterao na camada de apresentao (no modelo de n camadas) ou at mesmo na
camada de Lgica do Negcio (no modelo mais antigo de duas camadas), a aplicao
ter que ser atualizada em todas as estaes de trabalho que utilizam a aplicao.

NOTA
Para maiores detalhes sobre os modelos de aplicao de duas ou mais camadas, consulte o
Captulo 1.
Controle de verso: Garantir que todas as estaes de trabalho estejam com a ltima verso
da aplicao uma tarefa nada fcil, a qual, dependendo do nmero de estaes da rede
da empresa, pode exigir uma equipe de Help Desk praticamente dedicada a esta tarefa.
Problemas de conflitos de DLL e padronizao de ambiente tornam a manuteno e o
gerenciamento destas aplicaes uma tarefa difcil e de custo elevado.

455

Criando Sites Dinmicos com ASP 3.0

Estes problemas surgem para cada aplicao Cliente/Servidor tradicional que estiver sendo
usada. Agora imagine o caso de uma grande empresa, com milhares de computadores ligados
em rede, com dezenas de aplicaes. A situao torna-se insustentvel, alm do custo de
manuteno e suporte atingir patamares impraticveis.
Para resolver estes e outros problemas das aplicaes Cliente/Servidor tradicionais que
comearam a ser desenvolvidas aplicaes para a Web, das quais vamos falar um pouco mais.

Aplicaes Web um Novo Paradigma


Para resolver os tradicionais problemas das aplicaes Cliente/Servidor que surge o conceito
de aplicao Web.
Para acessar uma aplicao Web o nico programa que o usurio precisa um navegador
instalado na sua estao. Existem inclusive aplicaes Web bem projetadas que no obrigam
o usurio a utilizar um navegador especfico, o que aumenta mais ainda a flexibilidade.
Uma aplicao Web reside no servidor, no nosso caso no IIS. Toda e qualquer alterao que se
fizer necessria na aplicao, ser feita diretamente no servidor Web, sem que seja necessria
nenhuma modificao nas estaes dos usurios. Na prxima vez que o usurio acessar a
aplicao, utilizando o navegador instalado em sua estao, j estaro disponveis as alteraes
efetuadas. Com este modelo no necessria a atualizao (que muitas vezes significa uma
reinstalao) da aplicao em todas as estaes da rede, cada vez que forem feitas alteraes
na aplicao. Com isso, a equipe de suporte fica dispensada da tediosa tarefa de atualizao
da aplicao em cada estao da rede.
O modelo de aplicaes Web traz inmeras vantagens, dentre as quais podemos destacar:
Atualizao das aplicaes centralizada no servidor Web, sem a necessidade de atualizar
todas as estaes da rede que acessam a aplicao.
Facilidade de manuteno e suporte, uma vez que o cliente precisa somente de um
navegador para acessar a aplicao.
Reduo do chamado TCO Total Cost Ownership (Custo Total de Propriedade). O
TCO uma medida de quanto custa, por ano, a manuteno de uma estao de rede
em funcionamento. O clculo do TCO leva em considerao diversos fatores. Para
maiores informaes sobre este clculo acesse o site do Gardner Group na Internet.
Porm nem tudo so vantagens. Pela natureza e implementao do modelo Web, o qual faz
uso do protocolo HTTP, as aplicaes Web no tm como manter uma conexo permanente
com o usurio. Por isso que o modelo Web, muitas vezes, conhecido como State Less, isto
, Sem estado. Isso acontece porque aps ter enviado a pgina solicitada pelo usurio, a

456

Captulo 8 Aplicativos Web e Componentes

conexo encerrada, no sendo possvel continuar trocando informaes com o usurio, a


no ser que uma nova conexo seja estabelecida.
Para vencer as limitaes impostas por este modelo State Less, que iremos estudar os objetos
Application e Session do ASP, alm de aprendermos sobre o que e como utilizar o arquivo global.asa.
Atravs da utilizao destes objetos, podemos manter diversas informaes sobre o usurio
que est acessando a aplicao Web. Na verdade estamos simulando uma conexo, porm
utilizando os recursos disponibilizados pelos objetos Application e Session.
A possibilidade de diferenciar cada usurio que est acessando uma aplicao Web de
fundamental importncia, para que possamos criar contedos mais personalizados e
interativos, alm da possibilidade de aplicar conceitos como nveis de permisso de acesso
aos dados e auditoria de acesso.

Aplicaes Web no IIS


Agora que j sabemos que o modelo de desenvolvimento baseado na Web o modelo dominante
para o desenvolvimento de novas aplicaes, vamos aprender a identificar quais os elementos
que compem uma aplicao Web no IIS.
De uma maneira simples e didtica poderamos definir uma aplicao Web desenvolvida
com ASP como sendo:
Uma pasta virtual e todas as suas subpastas, com o conjunto de pginas ASP e componentes
COM ou COM+, projetadas para executar uma ou mais tarefas especficas, por exemplo um
sistema para controle do departamento de Recursos Humanos.
Conforme detalharemos mais adiante, componentes COM ou COM+ (no Windows 2000 o
padro COM foi aperfeioado e transformado em COM+) so elementos de software que
desempenham funes especficas. Por exemplo, a minha aplicao de controle do
departamento de Recursos Humanos pode fazer uso de um componente COM+ o qual faz
clculos previdencirios. Um componente COM+ pode ser desenvolvido internamente na
empresa, para ser utilizado por uma ou mais aplicaes ou pode ser adquirido de empresas
especializadas no desenvolvimento de componentes.
O nosso conjunto de pginas ASP pode fazer uso dos diversos componentes disponveis para
a aplicao Web.

NOTA
No Captulo 10 voltaremos a falar de componentes e do Microsoft Transaction Services.

457

Criando Sites Dinmicos com ASP 3.0

No IIS, o ponto de partida para criar uma aplicao Web criar uma pasta. O prximo passo
transformar esta pasta em uma Pasta Virtual do servidor IIS.

NOTA
Para saber como transformar uma pasta em uma Pasta Virtual do IIS, consulte o Captulo 1,
no item Tornando a pasta livro, parte do servidor IIS.
Vamos supor que voc tenha criado uma pasta chamada WebApl no drive (C:\WebApl), de
um servidor IIS chamado www.abc.com.br. Agora voc registrou esta pasta como uma pasta
virtual chamada WebApl. Dentro do diretrio voc criou uma pgina ASP chamada index.asp,
a qual ser a pgina inicial da aplicao Web. Voc lembra como seria o endereo para acessar
a pgina index.asp do diretrio virtual WebApl do servidor www.abc.com.br?
O endereo seria o seguinte:
http://www.abc.com.br/WebApl/index.asp

Dentro da pasta WebApl poderamos criar outras pastas, conforme a necessidade da nossa
aplicao Web. As pastas criadas dentro de uma pasta virtual, j passam a ser acessveis para
o servidor Web. Por exemplo, dentro da pastas WebApl criamos uma pasta chamada Seguranca.
Dentro dela colocamos um arquivo chamado login.asp. O endereo para acessar o arquivo
login.asp seria o seguinte:
http://www.abc.com.br/WebApl/Seguranca/login.asp

Todos as subpastas da pasta WebApl tambm faro parte da aplicao Web. Com isso podemos
concluir, em um primeiro momento, que uma aplicao Web do IIS est ligada criao de
uma pasta virtual no servidor IIS.
O prximo passo configurar as propriedades da aplicao Web. Para isso utilizamos o
Gerenciador do Internet Services, conforme ilustrado nos passos a seguir.
Para configurar as propriedades de uma aplicao Web faa o seguinte:
1. Faa o logon no Windows 2000 Server, com permisses de administrador.
2. Abra o Gerenciador do Internet Services: Iniciar/Programas/Ferramentas administrativas/
Gerenciador do Internet Services.
3. Surge a janela indicada na Figura 8.1.

458

Captulo 8 Aplicativos Web e Componentes

Figura 8.1: Gerenciador do Internet Services.


4. Esta a janela do console de administrao do IIS 5.0.
5. D um clique duplo no nome do computador. No nosso exemplo o nome servidor.
6. Surgem as opes indicadas na Figura 8.2.

Figura 8.2: Opes de gerenciamento do IIS.


7. Todos os aplicativos Web esto disponveis atravs da opo Site da Web Padro. D
um clique no sinal de + ao lado desta opo para abri-la.
8. Sero exibidas todas as pastas virtuais disponveis no servidor IIS, conforme indicado
na Figura 8.3.

459

Criando Sites Dinmicos com ASP 3.0

Figura 8.3: Pastas virtuas do servidor IIS.


9. No nosso exemplo queremos configurar as propriedades da pasta virtual WebApl. Neste
ponto o conceito de pasta virtual confunde-se com o de aplicao Web. Na verdade, a
nossa aplicao WebApl est contida na pasta virtual WebApl.
10. D um clique com o boto direito do mouse sobre WebApl.
11. No menu de opes que surge d um clique em Propriedades.
12. Ser exibida a janela Propriedades de WebApl, conforme indicado na Figura 8.4.
Observe que nesta janela temos diversas informaes, tais como:
Caminho da pasta: C:\WebApl. Este o caminho fsico onde so gravados os elementos
da aplicao Web. No nosso exemplo, a pasta WebApl do drive C:.
Permisses de acesso pasta virtual da aplicao: Observe que, por padro, somente
so marcadas as opes de leitura, criao de log e indexao. Falaremos mais sobre
estas permisses no Captulo 9, sobre segurana em aplicaes desenvolvidas com
ASP. No Captulo 9 tambm falaremos das opes: Permisses de execuo e Proteo
do aplicativo.

460

Captulo 8 Aplicativos Web e Componentes

Figura 8.4: Propriedades da aplicao Web WebApl.


Nome do aplicativo: No nosso exemplo WebApl.
A principal opo desta janela o boto Configurao.
13. D um clique no boto Configurao.
14. Surge a janela Configurao de aplicativo, indicada na Figura 8.5.

Figura 8.5: Configurando as propriedades da aplicao Web WebApl.

461

Criando Sites Dinmicos com ASP 3.0

Na primeira guia, Mapeamento de aplicativo, temos a indicao de qual componente do IIS


ir processar cada requisio do usurio. Este mapeamento baseado na extenso do arquivo.
Por exemplo, toda pgina com a extenso .asp ser processada pela DLL asp.dll (que na verdade
o interpretador ASP), conforme indicado pela Figura 8.6.

Figura 8.6: A DLL asp.dll responsvel pelo processamento das pginas ASP.
15. No iremos alterar nenhuma opo nesta guia.
16. D um clique na guia Opes de aplicativo.
17. Nesta segunda guia, temos diversas configuraes importantes, conforme indicado na
Figura 8.7.

Figura 8.7: Opes da guia Opes de aplicativo.

462

Captulo 8 Aplicativos Web e Componentes

Abaixo temos a descrio destas opes:


Ativar o estado da sesso: Use essa caixa de seleo para ativar ou desativar o estado
da sesso.
Quando o estado da sesso ativado, o Active Server Pages cria uma sesso para cada usurio
que acessa um aplicativo ASP, de modo que voc possa identificar o usurio atravs das pginas
do aplicativo. Quando o estado da sesso desativado, o ASP no controla usurios e no
permite que um script do ASP armazene informaes no objeto Session ou use os eventos
Session.OnStart ou Session.OnEnd. Uma sesso finalizada automaticamente se o usurio no
solicitou ou atualizou uma pgina em um aplicativo no fim do tempo limite TimeOut.
Um script pode terminar explicitamente uma sesso com o mtodo Session.Abandon. Mesmo
que o estado da sesso esteja ativado em um aplicativo, voc poder desativ-lo em uma
pgina ASP individual usando a diretiva <%@ ENABLESESSIONSTATE = False %>, no
cabealho da pgina.
Veremos mais detalhes sobre o objeto Session, ainda neste captulo.
Tempo limite da sesso: No nosso exemplo est definido em 20 minutos. Uma sesso
finalizada automaticamente se o usurio no solicitou ou atualizou uma pgina em
um aplicativo por um tempo maior do que o tempo limite TimeOut.
Ativar o Buffer: Por padro esta opo ativada no IIS 5.0. Nas verses anteriores esta
propriedade era desativada por padro. Quando o Buffer est ativo, o resultado do
processamento de uma pgina ASP somente enviado para o navegador do cliente,
quando toda a pgina tiver sido processada, a menos que seja utilizado o mtodo Flush
do objeto Response.
Ativar os caminhos pai: Marque esta caixa de seleo para permitir que as pginas
ASP usem os caminhos relativos do diretrio pai do diretrio atual (caminhos que
usam a sintaxe ..), tambm conhecidos como endereos relativos.

IMPORTANTE
Se voc ativar essa opo, no fornea acesso de execuo aos diretrios pai, caso contrrio,
um script poder tentar executar um programa no autorizado em um diretrio pai.
Linguagem ASP padro: Por padro definida como sendo VBScript. Caso deseje,
pode alterar para JScript. Tambm podemos especificar o nome de qualquer outra
linguagem para a qual tenhamos o interpretador instalado no servidor IIS, como por
exemplo Perl. Esta opo define a linguagem que ser utilizada para interpretar os
comandos dentro das tags <% e %>.

463

Criando Sites Dinmicos com ASP 3.0

Tempo limite do script ASP: Especifica o perodo de tempo durante o qual o ASP
permitir a execuo de um script. Se a execuo do script no terminar ao final do
perodo de tempo limite, o ASP ir par-lo e gravar um evento no arquivo de log de
eventosYdo Windows 2000. Voc pode definir o perodo de tempo limite como um
valor entre 1 e 2147483647, alm de poder substituir essa opo em uma pgina ASP
usando o mtodo Server.ScriptTimeout.
18. No iremos alterar nenhuma opo nesta guia.
19. D um clique na guia Depurao de aplicativo.
20. Na guia Depurao de aplicativo, temos diversas configuraes relacionadas com a
depurao de erros em pginas ASP, conforme indicado na Figura 8.8.

Figura 8.8: Opes da guia Depurao de aplicativo.


Abaixo temos a descrio das opes:
Ativar a depurao de script ASP do lado do servidor: Marque esta opo para permitir
que o servidor Web entre no depurador de scripts da Microsoft durante o processamento
de pginas ASP. Em seguida, voc pode usar o depurador para examinar seus scripts.
Por questes de desempenho, a depurao do ASP no recomendada em um ambiente
de produo.

464

Captulo 8 Aplicativos Web e Componentes

Ativar a depurao de script ASP do lado do cliente: Essa caixa de seleo est reservada
para uso futuro e no tem efeito sobre a verso atual do ASP (esta a informao
contida na prpria documentao do IIS 5.0).
Enviar mensagens de erro do ASP detalhadas para o cliente: Selecione essa opo para
enviar informaes especficas de depurao (incluindo o nome do arquivo, a mensagem
de erro e o nmero da linha) para o navegador. Principalmente quando estamos
desenvolvendo nossas aplicaes importante que esta opo esteja selecionado, pois
ao testarmos uma pgina, se a mesma contiver um erro, o navegador informa o nmero
da linha onde est o erro, o que facilita a correo do script.
Enviar mensagem de erro de texto para o cliente: Selecione esta opo para enviar
uma mensagem de erro padro ao navegador quando algum erro impedir o servidor
Web de processar a pgina ASP. Uma mensagem de erro especfica gravada no log de
erros. Voc pode alterar a mensagem de erro padro digitando uma nova mensagem na
caixa de texto. No recomendada a utilizao desta opo no ambiente de
desenvolvimento, pelos motivos descritos no pargrafo anterior.
21. No iremos alterar nenhuma opo nesta guia.
22. D um clique no boto OK para fechar a janela de configurao.
23. D um clique no boto OK para fechar a janela de propriedades da pasta virtual WebApl.
24. Voc estar de volta ao Gerenciador do Internet Services.
25. Feche-o.
Bem, agora j conhecemos o que uma aplicao Web do IIS e quais os elementos que a
compem. Um ltimo elemento, porm no menos importante, um arquivo chamado
global.asa. No prximo item iremos aprender o que este arquivo.

O Arquivo Global.asa
O arquivo global.asa um arquivo opcional, porm bastante comum a utilizao do mesmo
em nossas aplicaes Web residentes no IIS. A extenso .asa uma abreviatura para Active
Server Applications. O arquivo global.asa trabalha em conjunto com os objetos Application
e Session, para permitir o gerenciamento das informaes de estado de cada usurio que
acessa a aplicao.
No arquivo global.asa possvel especificar scripts de eventos e declarar os objetos que tm
escopo de sesso (Session) ou de aplicao (Application).
No se trata de um arquivo de contedo exibido para os usurios; em vez disso, o arquivo
armazena informaes de eventos e os objetos utilizados globalmente pelo aplicativo. Esse
arquivo deve ser nomeado como global.asa e armazenado na pasta raiz do aplicativo.

465

Criando Sites Dinmicos com ASP 3.0

Um Aplicativo s Pode ter um Arquivo Global.asa


A capacidade de manter informaes sobre cada usurio conectado com a aplicao de
fundamental importncia, conforme j descrito anteriormente. Quando a aplicao acessada
pela primeira vez, o arquivo global.asa carregado na memria do servidor Web. Depois
utilizado para acompanhar eventos da aplicao como um todo e de cada usurio conectado.
Atravs do arquivo global.asa podemos acompanhar, para o objeto Session, os seguintes eventos:
Session_OnStart: Este evento ocorre quando o usurio acessa uma das pginas da
aplicao Web. Quando o usurio acessar outras pginas, dentro da mesma aplicao,
este evento no ocorrer novamente, ou seja, o evento Session_OnStart somente ocorre
para a primeira pgina da aplicao que o usurio acessar; ele ocorre quando o servidor
cria uma nova sesso. O servidor processa esse script antes de executar a pgina solicitada.
O evento Session_OnStart o momento adequado para definir as variveis no nvel de
sesso, porque as mesmas sero definidas antes de se acessar quaisquer pginas.
Session_OnEnd: Este evento ocorre quando a sesso do usurio encerrada por TimeOut
ou quando o usurio acessar uma pgina de outra aplicao Web.
Estes eventos so utilizados para o acompanhamento de informaes de sesses individuais
de cada usurio, atravs da utilizao do objeto Session. O objeto Session pode ser utilizado
para passar informaes entre as diversas pginas ASP da aplicao, dentro de uma sesso de
usurio. No podemos utilizar o objeto Session para passar informaes entre sesses de
usurios diferentes, para isso utilizamos o objeto Application.
Para o objeto Application podemos acompanhar os eventos:
Application_OnStart: Ocorre quando o primeiro usurio acessar uma das pginas da
aplicao Web. O evento Application_OnStart ocorre antes da criao da primeira
sesso nova, isto , antes do evento Session_OnStart. Por exemplo, se voc est
desenvolvendo uma aplicao de Comrcio Eletrnico, na qual os preos esto em
dlar, mas o usurio tem a opo de converter os valores para reais, voc pode utilizar
o evento Application_OnStart para tornar disponvel a cotao do dlar, para qualquer
pgina dentro da aplicao.
Application_OnEnd: O evento Application_OnEnd ocorre quando o aplicativo
encerrado, aps o evento Session_OnEnd.
Estes objetos so utilizados para monitorar todos os objetos Application, os quais contm
informaes disponveis para quaisquer usurios que acessarem a aplicao.
Na Listagem 8.1, temos um exemplo de um arquivo global.asa tpico.

466

Captulo 8 Aplicativos Web e Componentes

Listagem 8.1 Um exemplo de arquivo global.asa.


1

<SCRIPT LANGUAGE=VBScript RUNAT=Server>

Sub Session_OnStart

** Cdigo para o evento.

End Sub

EventName

Description

Session_OnStart

Runs the first time a user runs any page in your application

Session_OnEnd

Runs when a users session times out or quits your


application

Application_OnStart

Runs once when the first page of your application is run


for the first 9 time by any user

10

Application_OnEnd

Runs once when the web server shuts down

11

</SCRIPT>

12

<SCRIPT LANGUAGE=VBScript RUNAT=Server>

13

Sub Application_OnStart

14

Application(nwind_ConnectionString) = DSN=nwind;DBQ=C:\MEUS
DOCUMENTOS\NWIND.MDB;DriverId=281;FIL=MS
Access;MaxBufferSize=2048;PageTimeout=5;

15

Application(nwind_ConnectionTimeout) = 15

16

Application(nwind_CommandTimeout) = 30

17

Application(nwind_CursorLocation) = 3

18

Application(nwind_RuntimeUserName) =

19

Application(nwind_RuntimePassword) =

20

End Sub

21

</SCRIPT>

Observe que no evento Application_OnStart configuramos os parmetros para uma conexo,


via ODBC, com o banco de dados C:\Meus documentos\nwind.mdb. Estas informaes estaro
disponveis para qualquer usurio que acessar a nossa aplicao Web, pois as mesmas foram
definidas atravs do evento Application_OnStart.
Agora que j conhecemos a anatomia de uma aplicao Web no IIS, bem coma a funo do
arquivo global.asa, vamos estudar os objetos Session e Application, para que possamos
aprender na prtica a utiliz-los.

467

Criando Sites Dinmicos com ASP 3.0

O Objeto Application
Conforme descrito anteriormente, podemos utilizar o objeto Application para compartilhar
informaes entre todos os usurios de um determinado aplicativo. Um aplicativo Web baseado
no ASP definido como todos os arquivos .asp em uma pasta virtual e seus subdiretrios. Como
o objeto Application pode ser compartilhado por mais de um usurio, existem os mtodos Lock e
Unlock para garantir que vrios usurios no tentaro alterar uma propriedade ao mesmo tempo.
Itens do objeto Application podem ser variveis necessrias para todos os usurios que acessam
uma aplicao, como a cotao do dlar ou o ndice da poupana. Tambm podemos utilizar
o objeto Application para criar uma instncia de um componente que fornece uma determinada
funcionalidade utilizada pela nossa aplicao Web.
Uma aplicao Web inicializada quando qualquer uma de suas pginas ASP for acessada. A
partir do momento em que a primeira pgina ASP for acessada, o objeto Application estar
disponvel e quaisquer valores que tenham sido definidos por este objeto, estaro disponveis
para todos os usurios que acessarem a aplicao.
O diagrama da Figura 8.9, demonstra a relao entre o objeto Application, o servidor Web e as
diversas aplicaes Web hospedadas no servidor.
Usurio 1
Aplicao: web1
objeto Application

Usurio 2
Usurio 3

Aplicao: web2
objeto Application

Usurio 4
Usurio 5

Servidor Web
Aplicao: web3
objeto Application

Usurio 6

Cada aplicao possui o seu prprio objeto Application.

Figura 8.9: Relao entre o objeto Application, o servidor Web e as diversas aplicaes.
Cada aplicao Web possui seu prprio objeto Application e informaes disponveis no
objeto Application podem ser acessadas por quaisquer usurio que estiverem acessando a

468

Captulo 8 Aplicativos Web e Componentes

aplicao. Tambm podemos notar, na Figura 8.9, que em um mesmo servidor Web podemos
ter vrias aplicaes Web.
Agora passaremos a estudar os eventos, colees e mtodos do objeto Application.

Eventos do Objeto Application


Na Tabela 8.1 temos a descrio dos eventos do objeto Application.
Tabela 8.1 Os eventos do objeto Application.
Evento

Descrio

OnStart

Ocorre quando a aplicao Web iniciada (quando a primeira


pgina da aplicao acessada), antes da pgina solicitada
pelo usurio ser interpretada e antes que qualquer objeto
Session tenha sido criado. por isso que o objeto Session
pode utilizar valores armazenados no objeto Application, pois
obrigatoriamente o objeto Application ser criado antes de
qualquer objeto Session. Este evento pode ser utilizado para
inicializar variveis, criar objetos ou rodar cdigo necessrio
inicializao da aplicao.

OnEnd

Ocorre quando a aplicao Web finalizada. Isto acontece aps


o encerramento do ltimo objeto Session e depois que
o cdigo para o evento Session_OnEnd executado. Todas
as variveis existentes so retiradas da memria quando a
aplicao encerrada. O encerramento da sesso normalmente
ocorre quando existia somente um usurio conectado e o
mesmo fecha o navegador ou acessa outro site ou outra
aplicao dentro do mesmo site.

O cdigo para os eventos OnStart e OnEnd deve ser colocado no arquivo global.asa. Agora
passaremos a estudar a utilizao destes dois eventos.

Evento Application_OnStart
A seguir mostrada a sintaxe para este evento.

469

Criando Sites Dinmicos com ASP 3.0

Sintaxe para o evento OnStart:


<SCRIPT LANGUAGE=Linguagem_de_script RUNAT=Server>
Sub Application_OnStart
Cdigo para o evento OnStart. . .
End Sub
</SCRIPT>

A seguir temos um exemplo de definio de cdigo para o evento OnStart. Neste exemplo so
criadas duas variveis de nvel de aplicao. Uma com a estao do ano e outra com cotao
do dlar.
<SCRIPT LANGUAGE=VBScript RUNAT.= Server>
Sub Application_OnStart
Application(EstacaoAno) = Inverno
Application(CotDolar) = 1.77
End Sub
</SCRIPT>

Uma das principais utilizao do evento Application_OnStart para a criao e inicializao


de variveis em nvel de aplicao ou at mesmo objetos, como por exemplo, uma conexo
com um banco de dados.
Para criar uma varivel em nvel de aplicao, utilizamos a seguinte sintaxe:
Application(Nome_da_Varivel) = Valor_da_Varivel

As variveis EstacaoAno e CotDolar podem ser acessadas por qualquer usurio, em qualquer
pgina ASP da aplicao Web, pois so variveis de nvel de aplicao, tecnicamente falando,
diramos que so variveis de nvel do objeto Application.
Um detalhe importante a ser lembrado que no apenas no evento Application_OnStart
que podemos definir variveis de nvel de aplicao. Em qualquer pgina ASP podemos
definir uma varivel que estar disponvel para todos os usurios da aplicao. Para isso
utilizamos a mesma sintaxe utilizada no arquivo global.asa, conforme indicado abaixo:
Application(Nome_da_Varivel) = Valor_da_Varivel

Para acessar os valores das variveis do objeto Application muito simples, basta utilizar a
sintaxe:
<% = Application(Nome_da_Varivel) %>

Com isso ser retornado o valor da varivel.

470

Captulo 8 Aplicativos Web e Componentes

Vamos a um exemplo prtico. Suponhamos que tenham sido definidas trs variveis no evento
Application_OnStart da aplicao Web denominada Capitulo8, conforme indicado na Listagem
8.2, onde temos o arquivo global.asa para a aplicao Capitulo8.
Listagem 8.2 Arquivo global.asa onde so definidos trs variveis de nvel de aplicao.
1

<SCRIPT LANGUAGE=VBScript RUNAT=Server>

Sub Application_OnStart

Application(Mensagem)= Bem vindo ao site da empresa ABC Ltda!

Cotao do dlar at o meio-dia

Application(CotAM)= 1.50

Cotao do dlar aps o meio-dia.

Application(CotPM)= 2.00

End Sub

</SCRIPT>

Neste exemplo de arquivo global.asa, no evento Application_OnStart, definimos as variveis


Mensagem, CotAM e CotPM. Estas so variveis do objeto Application, portanto disponveis
para qualquer pgina da aplicao.
Agora vamos criar uma pgina ASP que faz uso destas variveis. A pgina usa_appvar.asp ir
detectar a hora do dia. At s 11:59 ser apresentada a mensagem Bom Dia e ser informado
a cotao do dlar armazenada na varivel CotAM. A partir de 12:00 ser apresentada a
mensagem Boa Tarde e ser informada a cotao do dlar armazenada na varivel CotPM.
Em ambos os casos ser emitida a mensagem contida na varivel Mensagem.
Na Listagem 8.3 temos o cdigo para a pgina usa_appvar.asp.
Listagem 8.3 Utilizando variveis do objeto Application.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

<TITLE> Utilizando variveis em nvel de aplicao !!</TITLE>

</HEAD>

<BODY>

471

Criando Sites Dinmicos com ASP 3.0

<%

Atribui a hora do dia para a varivel hora_dia

hora_dia = hour(Time())

10

If hora_dia<12 Then

11

Response.Write <HR>

12

Response.Write Bom Dia ! <BR>

13

Response.Write Cotao do dlar: & Application(CotAM) & <BR>

14

Response.Write Application(Mensagem)

15

Response.Write <HR>

16

Else

17

Response.Write <HR>

18

Response.Write Boa tarde ! <BR>

19

Response.Write Cotao do dlar: & Application(CotPM) & <BR>

20

Response.Write Application(Mensagem)

21

Response.Write <HR>

22

End If

23

%>

24

</BODY>

25

</HTML>

Observe que utilizamos a funo hour(Time( )); como parmetro para a funo hour, passamos
a funo Time. A funo Time captura a hora do servidor Web e a funo hour retira apenas
o valor numrico da hora.
Observe que, para ter acesso a uma varivel do objeto Application, s utilizar a sintaxe:
Application(Nome_da_Varivel)

Ao visualizarmos o arquivo da Listagem 8.3, antes do meio-dia, obteremos o resultado indicado


na Figura 8.10.
J, ao visualizarmos o arquivo da Listagem 8.3, aps o meio-dia, obteremos o resultado indicado
na Figura 8.11.
A possibilidade de criar variveis no evento Application_OnStart bastante interessante,
principalmente pelo fato de que estas variveis estaro disponveis para qualquer usurio
que acessar a aplicao Web.

472

Captulo 8 Aplicativos Web e Componentes

Figura 8.10: Resultado obtido antes do meio-dia.

Figura 8.11: Resultado obtido aps o meio-dia.


Porm no estamos limitados criao de variveis simplesmente. Podemos criar objetos no
evento OnStart. Por exemplo, posso criar um objeto do tipo ADODB.Connection e utilizar o mtodo
Open do mesmo. Com isso estou disponibilizando uma conexo de banco de dados para todas as
pginas da minha aplicao. Esta tcnica apresenta, dentre outras, duas vantagens importantes:
No necessrio a colocao do cdigo para criao da conexo, em cada pgina que
precisar da mesma. Isto facilita a construo das pginas e reduz a possibilidade de erros.

473

Criando Sites Dinmicos com ASP 3.0

Se, por algum motivo, for necessria a alterao das propriedades da conexo, basta
alterar a String de conexo em um nico local (no arquivo global.asa), e no em todas
as pginas que fazem uso da conexo que est sendo alterada.
Na Listagem 8.4, temos um exemplo de conexo criada no evento Application_OnStart.
Listagem 8.4 Criando uma conexo no evento Application_OnStart.
1

<SCRIPT LANGUAGE=VBScript RUNAT=Server>

Sub Application_OnStart

Application(Mensagem)= Bem vindo ao site da empresa ABC Ltda!

Cotao do dlar at o meio-dia

Application(CotAM)= 1.50

Cotao do dlar aps o meio-dia.

Application(CotPM)= 2.00

Agora cria uma conexo com o banco de dados

C:\Meus documentos\nwind.mdb

10

Esta conexo estar disponvel para todas as

11

pginas da aplicao.

12

Set Application(conn)=Server.CreateObject(ADODB.Connection)

13

Application(conn).ConnectionString = PROVIDER=MICROSOFT.JET.OLEDB.4.0;
DATA SOURCE=c:\meus documentos\nwind.mdb

14

Application(conn).Open

15

End Sub

16

</SCRIPT>

IMPORTANTE
Para que o objeto conn seja uma conexo do objeto Application, e com isso disponvel para
todas as pginas da aplicao, devemos utilizar a sintaxe indicada na Listagem 8.4, ou seja:
12

Set Application(conn)=Server.CreateObject(ADODB.Connection)

Desta forma, precisamos utilizar Application(Nome_do_Objeto), pois se utilizarmos


simplesmente o nome do objeto, o mesmo no pertencer ao objeto Application e no estar
disponvel em todas as pginas. O mesmo vlido na definio da propriedade ConnectionString
e na utilizao do mtodo Open.

474

Captulo 8 Aplicativos Web e Componentes

Agora que criamos uma conexo no evento OnStart, podemos utilizar esta conexo em qualquer
pgina da aplicao. Vamos a um exemplo de pgina ASP que utiliza esta conexo.
Na Listagem 8.5 temos uma pgina ASP que utiliza a conexo criada no evento OnStart.
Observe que estamos criando um objeto RecordSet que utiliza esta conexo como parmetro
para o mtodo Open do objeto RecordSet.
Listagem 8.5 Utilizando a conexo criada no evento OnStart usa_appcon.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

<TITLE> Utilizando uma conexo criada no arquivo global.asa.</TITLE>

</HEAD>

<BODY>

<%

Nesta pgina estamos criando um objeto RecordSet,

o qual utiliza a conexo Conn criada no evento

10

Application_OnStart.

11

O cdigo que cria a conexo est no arquivo global.asa.

12

Set Pedidos = Server.CreateObject(ADODB.Recordset)

13

Pedidos.Open Select * from Orders Order By OrderID, Application(conn), 3, 3

14

Neste ponto tenho o objeto Pedidos ligado com a tabela

15

Orders do banco de dados nwind.mdb.

16

Agora passo a exibir os resultados.

17

%>

18

<P><B>Utilizei uma conexo criada no arquivo global.asa.</B></P>

19

<TABLE border=1 width=100%>

20

<TR>

21

<TD><B>Cdigo</B></TD>

22

<TD><B>Data</B></TD>

23

<TD><B>Cidade</B></TD>

24

<TD><B>Pas</B></TD>

25

</TR>

26

<%

475

Criando Sites Dinmicos com ASP 3.0

27

Agora exibo os registros obtidos a partir da tabela Orders.

28

Response.Write Foram encontrados: & Pedidos.RecordCount & Registros.<HR>

29

Pedidos.MoveFirst

30

Do While Not Pedidos.EOF

31

%>

32

<TR>

33

<TD><% =Pedidos.Fields(OrderID)

%></TD>

34

<TD><% =Pedidos.Fields(OrderDate)

%></TD>

35

<TD><% =Pedidos.Fields(ShipCity)

%></TD>

36

<TD><% =Pedidos.Fields(ShipCountry) %></TD>

37

</TR>

38

<%

39

Pedidos.MoveNext

39

Loop

40

%>

41

</TABLE>

42

<BR>

43

<HR>

44

</BODY>

45

</HTML>

Na Figura 8.12 vemos o resultado quando a pgina usa_appcon.asp carregada no Internet


Explorer.

IMPORTANTE
No evento Application_OnStart no podemos utilizar os seguintes objetos:
Response
Request
Session
Se tentarmos utilizar um destes objetos no evento Application_OnStart, obteremos a mensagem
de erro indicada na Figura 8.13.

476

Captulo 8 Aplicativos Web e Componentes

Figura 8.12: Pgina que utiliza uma conexo criada no arquivo global.asa.

Figura 8.13: Erro devido utilizao de Response no evento Application_OnStart.

477

Criando Sites Dinmicos com ASP 3.0

Evento Application_OnEnd
Embora possamos criar variveis e objetos no evento Application_OnEnd isto no teria
utilidade prtica. Normalmente utilizamos o evento OnEnd para funes administrativas,
tais como gravar informaes em um log de auditoria ou parar um determinado servio para
manuteno.
A seguir mostrada a sintaxe para este evento.
Sintaxe para o evento Application_OnEnd:
<SCRIPT LANGUAGE=Linguagem_de_script RUNAT=Server>
Sub Application_OnEnd
Cdigo para o evento OnEnd. . .
End Sub
</SCRIPT>

A seguir temos um exemplo de definio de cdigo para o evento OnEnd. Neste exemplo
estamos retirando o objeto conn da memria.
<SCRIPT LANGUAGE=VBScript RUNAT.= Server>
Sub Application_OnEnd
Set Application(conn) = Nothing
End Sub
</SCRIPT>

NOTA
Uma situao especial em que o evento Application_OnEnd ocorre quando o arquivo global.asa
precisa ser novamente interpretado e carregado na memria. Isto acontece quando este arquivo
alterado e as alteraes so salvas.

Colees do Objeto Application


Na Tabela 8.2 temos a descrio das colees do objeto Application.

478

Captulo 8 Aplicativos Web e Componentes

Tabela 8.2 As colees do objeto Application.


Coleo

Descrio

Contents

Contm todos os itens que foram adicionados ao objeto


Application, com exceo dos que foram declarados com a
tag <OBJECT>. Todas as variveis e objetos criados com Set,
fazem parte desta coleo. Podemos usar a coleo Contents
para obter a lista de itens aos quais tenha sido atribudo
escopo do aplicativo ou para especificar um item especfico
para ser o destino de uma operao. possvel tambm
remover os itens da coleo com os mtodos Remove e
RemoveAll. No prximo tpico falaremos sobre os mtodos
do objeto Application.

StaticObjects A coleo StaticObjects contm todos os objetos criados com


as tags <OBJECT> dentro do escopo do objeto Application.
Podemos usar esta coleo para determinar o valor de uma
propriedade especfica de um objeto ou fazer interao atravs
da coleo e recuperar todas as propriedades dos objetos
estticos.
Agora passaremos a estudar a sintaxe e alguns exemplos de utilizao das colees do objeto
Application.

A Coleo Contents
Para acessarmos um item da coleo Contents, utilizamos a seguinte sintaxe:
Application.Contents(Chave)

onde Chave o nome do item a ser recuperado.


Por exemplo, vamos supor que as seguintes variveis tenham sido criadas no arquivo global.asa,
no evento Application_OnStart:
Application(Var1) = Jos da Silva
Application(Var2) = Maria do Socorro
Application(HoraDia) = Hour(Time( ))

Poderamos exibir o valor destas variveis utilizando o seguinte cdigo:


<%
Response.Write Variveis de nvel de aplicao.<HR>
Response.Write Var1: & Application.Contents(Var1)

479

& <BR>

Criando Sites Dinmicos com ASP 3.0

Response.Write Var2: & Application.Contents(Var2) & <BR>


Response.Write Hora do incio da aplicao: &
Application.Contents(HoraDia) & <BR>
%>

O comando Application.Contents(Var1) retorna o valor da varivel de aplicao Var1. O


comando Application.Contents(Var2) retorna o valor da varivel de aplicao Var2 e assim
por diante.
Como estamos trabalhando com uma coleo, podemos utilizar o operador For Each...Next
para percorrer todos os itens da coleo Contents. No exemplo de cdigo a seguir, exibimos o
nome de todos os elementos da coleo Contents.
<%
For Each elemento in Application.Contents
Response.Write Nome do elemento: & elemento & <BR>
Next
%>

Considere a Listagem 8.6, onde fazemos uso do operador For Each...Next para exibir o nome
de todos os itens da coleo Contents do objeto Application.
Listagem 8.6 Acessando os elementos da coleo Contents contents.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

<TITLE>Utilizando a coleo Contents</TITLE>

</HEAD>

<BODY>

<HR>

<%

Response.Write Elementos da coleo Contents. <HR>

10

For Each elemento in Application.Contents

11

Response.Write Elemento: & elemento & <BR>

12

Next

13

Response.Write <HR>

14

%>

15

</BODY>

16

</HTML>

Ao carregarmos esta pgina no Internet Explorer, obtemos o resultado indicado na Figura 8.14.

480

Captulo 8 Aplicativos Web e Componentes

Figura 8.14: Usando For Each...Next para exibir o nome dos elementos da coleo Contents.

NOTA
Neste caso a pgina contents.asp faz parte da aplicao que utiliza o arquivo global.asa da
Listagem 8.4. Observe que inclusive o elemento conn, o qual um objeto do tipo Connection,
faz parte da coleo Contents.

Poderamos modificar a Listagem 8.6, para que, alm de exibir o nome de cada elemento, a mesma
exibisse o valor de cada um dos elementos. Esta alterao est indicada na Listagem 8.7.
Listagem 8.7 Exibindo o nome e o contedo dos elementos da coleo Contents.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

<TITLE>Utilizando a coleo Contents</TITLE>

</HEAD>

<BODY>

<HR>

<TABLE border=1 width=100%>

9
10

<TR>
<TD><B>Elemento</B></TD>

481

Criando Sites Dinmicos com ASP 3.0

11

<TD><B>Valor</B></TD>

12
13

</TR>
<%

14

Response.Write Elementos da coleo Contents. <HR>

15

For Each elemento in Application.Contents %>

16

<TR>

17

<TD><% =elemento %> </TD>

18

<TD><% =Application.Contents(elemento)%></TD>

19

</TR>

20

<%

21

Next

22

Response.Write <HR>

23

%>

24

</TABLE>

25

</BODY>

26

</HTML>

Ao carregarmos esta nova verso da pgina, no Internet Explorer, obtemos o resultado indicado
na Figura 8.15.

Figura 8.15: Usando For Each...Next para exibir o nome e o contedo


dos elementos da coleo Contents.

482

Captulo 8 Aplicativos Web e Componentes

A Coleo StaticObjects
Para acessarmos um item da coleo StaticObjects, utilizamos a seguinte sintaxe:
Application.StaticObjects(Chave)

onde Chave o nome do item a ser recuperado.


Como estamos trabalhando com uma coleo, podemos utilizar o operador For Each...Next
para percorrer todos os itens da coleo Contents. No exemplo de cdigo a seguir, exibimos o
nome de todos os elementos da coleo StaticObjects.
<%
For Each elemento in Application.StaticObjects
Response.Write Nome do elemento: & elemento & <BR>
Next
%>

Agora que j conhecemos os eventos e colees do objeto Application, vamos ao estudo dos
mtodos deste objeto.

Mtodos do Objeto Application


Na Tabela 8.3 temos a descrio dos mtodos do objeto Application.
Tabela 8.3 Os mtodos do objeto Application.
Mtodo

Descrio

Contents.Remove

O mtodo Application.Contents.Remove exclui um


item de uma coleo. Este mtodo considera uma
seqncia de caracteres ou um inteiro como um
parmetro de entrada. Se o parmetro de entrada for
uma seqncia de caracteres, o mtodo pesquisar a
coleo Contents para localizar um item com esse
mesmo nome e o remover. Se o parmetro de entrada
for um inteiro, o mtodo contar o nmero de itens
equivalente a partir do incio da coleo e remover o
item correspondente.

Contents.RemoveAll O mtodo Application.Contents.RemoveAll remove


todos os itens que foram adicionados coleo
Application.Contents.

483

Criando Sites Dinmicos com ASP 3.0

Mtodo

Descrio

Lock

O mtodo Lock impede que outros clientes


modifiquem as variveis armazenadas no objeto
Application, garantindo que apenas um cliente de
cada vez possa alterar ou acessar as variveis do
objeto Application. Se o mtodo Unlock no for
chamado explicitamente, o servidor desbloquear o
objeto Application bloqueado quando o arquivo .asp
for concludo ou atingir seu tempo limite TimeOut.

Unlock

O mtodo Unlock permite que outros clientes


modifiquem as variveis armazenadas no objeto
Application aps ele ter sido bloqueado usando o
mtodo Lock. Se voc no chamar explicitamente esse
mtodo, o servidor Web desbloquear objeto
Application quando o arquivo .asp for concludo ou
atingir seu tempo limite TimeOut.

Agora vamos analisar alguns exemplos de cdigo que utilizam os mtodos do objeto Application.
A sintaxe para o mtodo Contents.Remove a seguinte:
Application.Contents.Remove(Nome_da_Varivel)

No exemplo a seguir so adicionadas trs variveis em nvel de aplicao. Depois utilizamos


o mtodo Contents.Remove para remover uma das variveis.
<%
Application(Nome) = Request.Form(nome)
Application(Idade)

= Request.Form(idade)

Application(ValorDolar)

= 1.72

Application.Contents.Remove(Idade)
%>

A sintaxe para o mtodo Contents.RemoveAll a seguinte:


Application.Contents.RemoveAll( )

No exemplo a seguir so adicionadas trs variveis em nvel de aplicao. Depois utilizamos


o mtodo Contents.RemoveAll para remover todas as variveis, inclusive variveis que tenham
sido adicionadas em outras pginas ASP da aplicao, ou atravs do arquivo global.asa.
<%
Application(Nome) = Request.Form(nome)
Application(Idade)

= Request.Form(idade)

484

Captulo 8 Aplicativos Web e Componentes

Application(ValorDolar)

= 1.72

Application.Contents.RemoveAll( )
%>

A sintaxe para o mtodo Lock a seguinte:


Application.Lock

No exemplo a seguir, o mtodo Lock impede que mais de um cliente acesse a varivel
NumVisitantes ao mesmo tempo. Se o aplicativo no tivesse sido bloqueado, dois clientes
poderiam tentar incrementar a varivel NumVisitantes simultaneamente.
<%
Application.Lock
Application(NumVisitantes) = Application(NumVisitantes) + 1
Application(DataUltimaVisita) = Now()
Application.Unlock
Response.Write Esta aplicao j foi visitada:
%>
<%
= Application(NumVisitantes)
%>
<%
Response.Write Vezes!!!
%>

Vezes !!!

A sintaxe para o mtodo UnLock a seguinte:


Application.Unlock

No exemplo a seguir, o mtodo Unlock libera o objeto bloqueado para que o prximo cliente
possa incrementar NumVisitantes.
<%
Application.Lock
Application(NumVisitantes ) = Application(NumVisitantes ) + 1
Application(DataUltimaVisita ) = Now()
Application.Unlock
%>

IMPORTANTE
O mtodo Lock do aplicativo cumulativo, significando que se o mesmo script chamar Lock
vrias vezes, ele tambm dever chamar Unlock o mesmo nmero de vezes para liberar
totalmente o aplicativo. Se isso no ocorrer, o bloqueio do aplicativo ser mantido at que o
script termine de executar.

485

Criando Sites Dinmicos com ASP 3.0

Com isso encerramos o estudo do objeto Application. Conforme estudamos, podemos criar
variveis que estaro acessveis para todos os usurios da aplicao (semelhante ao conceito
de varivel global nas aplicaes tradicionais); podemos criar objetos, como por exemplo um
objeto Connection, de tal forma que qualquer pgina ASP da aplicao utilize-o sem que para
isso o mesmo tenha que ser criado em cada pgina.
Agora passaremos ao estudo do objeto Session.

O Objeto Session
Podemos usar o objeto Session para armazenar as informaes necessrias para uma
determinada sesso de usurio. As variveis armazenadas no objeto Session no so
descartadas quando o usurio alterna entre as pginas do aplicativo; em vez disso, essas
variveis persistem durante toda a sesso de usurio.
O servidor Web cria automaticamente um objeto Session quando uma pgina da Web de um
aplicativo solicitada por um usurio que no tem uma sesso. O servidor descarta o objeto
Session quando a sesso expira (por TimeOut) ou abandonada.
Um uso comum para o objeto Session para armazenar as preferncias do usurio. Por exemplo,
se um usurio indicar que prefere no visualizar elementos grficos, voc dever armazenar
essa informao no objeto Session.
O diagrama da Figura 8.16 demonstra a relao entre o objeto Application, os diversos objetos
Session, o servidor Web e as diversas aplicaes Web hospedadas no servidor.
Cada aplicao Web possui seu prprio objeto Application e informaes disponveis neste
objeto podem ser acessadas por qualquer usurio que estiver acessando a aplicao. Para
cada usurio que acessa a aplicao Web criado um objeto Session, onde ficam armazenadas
as informaes relacionadas a ele. Tambm podemos notar, na Figura 8.16, que em um mesmo
servidor Web podemos ter vrias aplicaes Web.
Informaes armazenadas no objeto Session do usurio podem ser acessadas em qualquer
pgina da aplicao Web, desta forma possvel passar informaes entre as diversas pginas
da aplicao Web durante a existncia do objeto Session.

IMPORTANTE
O objeto Session baseado em Cookies, por isso o estado da sesso s mantido para
navegadores que suportam Cookies.

486

Captulo 8 Aplicativos Web e Componentes

Usurio 1
Aplicao: web1
objeto Application
Sesso1
Sesso2
Sesso3

Usurio 2

Usurio 3

Aplicao: web2
objeto Application
Sesso4
Sesso5

Usurio 4

Usurio 5

Aplicao: web3
objeto Application
Sesso6

Usurio 6

Cada aplicao Web possui o seu prprio objeto Application.


Para cada usurio conectado criado um objeto Session
Diferente, o qual mantem informaes relativas a cada usurio.

Figura 8.16: Para cada usurio conectado criado um objeto Session.


Agora passaremos a estudar os eventos, colees, propriedades e mtodos do objeto Session.

Eventos do Objeto Session


Na Tabela 8.4, temos uma descrio dos eventos do objeto Session.
Tabela 8.4 Os eventos do objeto Session.
Evento

Descrio

OnStart

O evento Session_OnStart ocorre quando o servidor cria uma nova


sesso, processando esse script antes de executar a pgina solicitada.
O evento Session_OnStart uma tima oportunidade de definir as
variveis no nvel de sesso, porque as mesmas sero definidas antes
de se acessar quaisquer pginas. Todos os objetos incorporados
(Application, ObjectContext, Request, Response, Server e Session)
esto disponveis e podem ser referenciados no script do evento
Session_OnStart. Voc pode chamar o mtodo Redirect no evento
Session_OnStart, por exemplo, para assegurar que os usurios sempre
iniciem uma sesso em determinada pgina da Web. Quando o
usurio entrar no aplicativo, o servidor criar uma sesso para este
usurio e processar o script do evento Session_OnStart. possvel
incluir um script nesse evento para verificar se a pgina aberta pelo
usurio a pgina inicial e, se no for, podemos redirecion-lo para a
pgina inicial atravs de uma chamada ao mtodo Response.Redirect.

487

Criando Sites Dinmicos com ASP 3.0

Evento

Descrio

OnEnd

O evento Session_OnEnd ocorre quando uma sesso abandonada ou


o tempo limite expira TimeOut. Para esse evento, somente esto
disponveis os objetos Application, Server e Session.

O Evento Session_OnStart
A seguir mostrada a sintaxe para este evento:
<SCRIPT LANGUAGE=Linguagem_de_script RUNAT=Server>
Sub Session_OnStart
Cdigo para o evento Session_OnStart. . .
End Sub
</SCRIPT>

A seguir temos um exemplo de definio de cdigo para o evento Session_OnStart. Neste


exemplo so criadas duas variveis de nvel de sesso. Uma com a estao do ano e outra com
cotao do dlar.
<SCRIPT LANGUAGE=VBScript RUNAT.= Server>
Sub Session_OnStart
Session(EstacaoAno) = Inverno
Session(CotDolar) = 1.77
End Sub
</SCRIPT>

Uma das principais utilizaes do evento Session_OnStart para a criao e inicializao de


variveis em nvel de sesso ou at mesmo objetos, como por exemplo, uma conexo com um
banco de dados.
Para criar uma varivel em nvel de sesso, utilizamos a seguinte sintaxe:
Session(Nome_da_Varivel) = Valor_da_Varivel

As variveis EstacaoAno e CotDolar podem ser acessadas, pelo usurio conectado, em qualquer
pgina ASP da aplicao Web, pois so variveis de nvel de sesso, tecnicamente falando,
diramos que so variveis de nvel do objeto Session, as quais esto disponveis, em qualquer
pgina, para o usurio ligado sesso.

488

Captulo 8 Aplicativos Web e Componentes

Um detalhe importante a ser lembrado que no apenas no evento Session_OnStart que


podemos definir variveis de nvel de sesso. Em qualquer pgina ASP podemos definir uma
varivel que estar disponvel em nvel de sesso. Para isso utilizamos a mesma sintaxe
utilizada no arquivo global.asa, conforme indicado abaixo:
<%
Session(Nome_da_Varivel) = Valor_da_Varivel
%>

Para acessar os valores das variveis do objeto Session muito simples, basta utilizar a sintaxe:
<%
= Session(Nome_da_Varivel)
%>

Com isso ser retornado o valor da varivel.


Vamos a um exemplo prtico. Suponhamos que tenham sido definidas trs variveis no evento
Session_OnStart, conforme indicado na Listagem 8.8, onde temos o arquivo global.asa para a
aplicao Capitulo8.
Listagem 8.8 Arquivo global.asa onde so definidos trs variveis de nvel de sesso.
1

<SCRIPT LANGUAGE=VBScript RUNAT=Server>

Sub Session_OnStart

Session(Mensagem)= Bem-vindo ao site da empresa ABC Ltda !

Cotao do dlar at o meio-dia

Session(CotAM)= 1.50

Cotao do dlar aps o meio-dia.

Session(CotPM)= 2.00

End Sub

</SCRIPT>

Neste exemplo de arquivo global.asa, no evento Session_OnStart, definimos as variveis


Mensagem, CotAM e CotPM. Estas so variveis do objeto Session, portanto disponveis para
qualquer pgina a ser acessada pelo usurio, desde que tenha sido estabelecida uma conexo.
Lembre que se o usurio estiver utilizando um navegador que no suporta Cookies, ou tiver
desabilitado o suporte a Cookies, a sesso no ser estabelecida e as informaes disponveis
no objeto Session no estaro disponveis.

489

Criando Sites Dinmicos com ASP 3.0

Agora vamos criar uma pgina ASP que faz uso destas variveis. A pgina usa_sessionvar.asp
ir detectar a hora do dia. At s 11:59 ser apresentada a mensagem Bom Dia e ser
informado a cotao do dlar armazenada na varivel CotAM. A partir de 12:00 ser
apresentada a mensagem Boa Tarde e ser informada a cotao do dlar armazenada na
varivel CotPM. Em ambos os casos ser emitida a mensagem contida na varivel Mensagem.
Na Listagem 8.9 temos o cdigo para a pgina usa_sessionvar.asp.
Listagem 8.9 Utilizando variveis do objeto Session.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

<TITLE> Utilizando variveis em nvel de Sesso !!</TITLE>

</HEAD>

<BODY>

<%

Atribui a hora do dia para a varivel hora_dia

hora_dia = hour(Time())

10
11

Response.Write Hora do dia: & hora_dia & <HR>


If hora_dia<12 Then

12

Response.Write <HR>

13

Response.Write Bom Dia! <BR>

14

Response.Write Cotao do dlar: & Session(CotAM) & <BR>

15

Response.Write Session(Mensagem)

16

Response.Write <HR>

17

Else

18

Response.Write <HR>

19

Response.Write Boa tarde ! <BR>

20

Response.Write Cotao do dlar: & Session(CotPM) & <BR>

21

Response.Write Session(Mensagem)

22

Response.Write <HR>

23

End If

24

%>

25

</BODY>

26

</HTML>

Observe que utilizamos a funo hour(Time( )); como parmetro para a funo hour, passamos
a funo Time ( ). A funo Time( ) captura a hora do servidor Web e a funo hour retira
apenas o valor numrico da hora.

490

Captulo 8 Aplicativos Web e Componentes

Observe que para ter acesso a uma varivel do objeto Session s utilizar a seguinte sintaxe:
Session(Nome_da_Varivel).

Ao visualizarmos o arquivo da Listagem 8.9, aps o meio-dia, obteremos o resultado indicado


na Figura 8.17.

Figura 8.17: Resultado obtido aps o meio-dia.


J, ao visualizarmos o arquivo da Listagem 8.3, antes do meio-dia, obteremos o resultado
indicado na Figura 8.18.

Figura 8.18: Resultado obtido antes do meio-dia.

491

Criando Sites Dinmicos com ASP 3.0

A possibilidade de criar variveis no evento Session_OnStart bastante interessante,


principalmente pelo fato de que estas variveis estaro disponveis para o usurio em todas
as pginas que ele acessar na aplicao Web. Por exemplo, uma vez identificado o usurio,
podemos carregar, a partir de um banco de dados, uma srie de informaes sobre o mesmo
e atribui-las a variveis do objeto Session. Com isso, em qualquer pgina da aplicao, as
informaes sobre o usurio estaro disponveis.
Um exemplo de utilizao do objeto Session encontrado em sites que oferecem treinamento
pela Internet. O usurio faz o cadastro no site e recebe um username e uma senha. Ao entrar
no site, o usurio se identifica atravs do seu username e senha. Aps identificado, podemos
utilizar o objeto Session para localizar informaes sobre os cursos em que o usurio est
cadastrado, os mdulos j cursados e as suas preferncias, tais como idioma de exibio da
pgina. Com isso posso criar um contedo personalizado para cada usurio, baseado nas
preferncias do mesmo.
Porm no estamos limitados a criao de variveis simplesmente. Podemos criar objetos no
evento Session_OnStart. Por exemplo, posso criar um objeto do tipo ADODB.Connection e
utilizar o mtodo Open do mesmo. Com isso estou disponibilizando uma conexo de banco
de dados para o usurio, e em qualquer pgina da aplicao esta conexo pode ser utilizada.
Esta tcnica apresenta, dentre outras, duas vantagens importantes:
No necessrio a colocao do cdigo para criao da conexo, em cada pgina que
precisar da mesma. Isto facilita a construo das pginas e reduz a possibilidade de erros.
Se, por algum motivo, for necessria a alterao das propriedades da conexo, basta
alterar a String de conexo em um nico local (no arquivo global.asa), e no em todas
as pginas que fazem uso da conexo que est sendo alterada.
Na Listagem 8.10, temos um exemplo de conexo criada no evento Session_OnStart.
Listagem 8.10 Criando uma conexo no evento Session_OnStart.
1

<SCRIPT LANGUAGE=VBScript RUNAT=Server>

Sub Session_OnStart

Session(Mensagem)= Bem-vindo ao site da empresa ABC Ltda!

Cotao do dlar at o meio-dia

Session (CotAM)= 1.50

Cotao do dlar aps o meio-dia.

Session (CotPM)= 2.00

492

Captulo 8 Aplicativos Web e Componentes

Agora cria uma conexo com o banco de dados

C:\Meus documentos\nwind.mdb

10

Esta conexo estar disponvel para todas as

11

pginas da aplicao.

12

Set Session (conexao)=Server.CreateObject(ADODB.Connection)

13

Session (conexao).ConnectionString =PROVIDER=MICROSOFT.JET.OLEDB.4.0;


DATA SOURCE=c:\meus documentos\nwind.mdb

14

Session(conexao).Open

15

End Sub

16

</SCRIPT>

IMPORTANTE
Para que o objeto conexao seja uma conexo do objeto Session, e com isso esteja disponvel
para todas as pginas que o usurio acessar dentro da aplicao, devemos utilizar a sintaxe
indicada na Listagem 8.10, ou seja:
12

Set Session(conexao)=Server.CreateObject(ADODB.Connection)

Desta forma, precisamos utilizar Session(Nome_do_Objeto), pois se utilizarmos simplesmente


o nome do objeto, a mesma no pertencer ao objeto Session e no estar disponvel em todas
as pginas. O mesmo vlido na definio da propriedade ConnectionString e na utilizao
do mtodo Open.

Agora que criamos uma conexo no evento Session_OnStart, podemos utilizar esta conexo
em qualquer pgina da aplicao. Vamos a um exemplo de pgina ASP que utiliza esta conexo.
Na Listagem 8.11 temos uma pgina ASP que utiliza a conexo criada no evento
Session_OnStart. Observe que estamos criando um objeto RecordSet que utiliza esta conexo
como parmetro para o mtodo Open do objeto RecordSet.
Listagem 8.11 Utilizando a conexo criada no evento OnStart usa_sessioncon.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

<TITLE> Utilizando uma conexo criada no arquivo global.asa.</TITLE>

</HEAD>

<BODY>

493

Criando Sites Dinmicos com ASP 3.0

<%

Nesta pgina estamos criando um objeto RecordSet,

o qual utiliza a conexo Conn criada no evento

10

Session_OnStart.

11

O cdigo que cria a conexo est no arquivo global.asa.

12

Set Pedidos = Server.CreateObject(ADODB.Recordset)

13

Pedidos.Open Select * from Orders Order By OrderID, Session(conexao), 3, 3

14

Neste ponto tenho o objeto Pedidos ligado com a tabela

15

Orders do banco de dados nwind.mdb.

16

Agora passo a exibir os resultados.

17

%>

18

<P><B>Utilizei uma conexo criada no arquivo global.asa.</B></P>

19

<TABLE border=1 width=100%>

20

<TR>

21

<TD><B>Cdigo</B></TD>

22

<TD><B>Data</B></TD>

23

<TD><B>Cidade</B></TD>

24

<TD><B>Pas</B></TD>

25

</TR>

26

<%

27

Agora exibo os registros obtidos a partir da tabela Orders.

28

Response.Write Foram encontrados: & Pedidos.RecordCount & Registros.<HR>

29

Pedidos.MoveFirst

30

Do While Not Pedidos.EOF

31

%>

32
33

<TR>
<TD><% =Pedidos.Fields(OrderID)

494

%></TD>

Captulo 8 Aplicativos Web e Componentes

34

<TD><% =Pedidos.Fields(OrderDate)

%></TD>

35

<TD><% =Pedidos.Fields(ShipCity)

%></TD>

36

<TD><% =Pedidos.Fields(ShipCountry) %></TD>

37

</TR>

38

<%

39

Pedidos.MoveNext

39

Loop

40

%>

41

</TABLE>

42

<BR>

43

<HR>

44

</BODY>

45

</HTML>

Na Figura 8.19 vemos o resultado quando a pgina usa_sessioncon.asp carregada no Internet


Explorer.

Figura 8.19: Pgina que utiliza uma conexo criada no evento Session_OnStart.

495

Criando Sites Dinmicos com ASP 3.0

Evento Session_OnEnd
Embora possamos criar variveis e objetos no evento Application_OnEnd isto no teria
utilidade prtica. Normalmente utilizamos o evento OnEnd para funes administrativas,
tais como gravar informaes em um log de auditoria ou para gravar escolhas feita pelo usurio
em um banco de dados.
A seguir mostrada a sintaxe para este evento.
Sintaxe para o evento Session_OnEnd:
<SCRIPT LANGUAGE=Linguagem_de_script RUNAT=Server>
Sub Application_OnEnd
Cdigo para o evento OnEnd. . .
End Sub
</SCRIPT>

A seguir temos um exemplo de definio de cdigo para o evento OnEnd. Neste exemplo
estamos retirando o objeto conexao da memria, para liberar recursos no servidor Web.
<SCRIPT LANGUAGE=VBScript RUNAT.= Server>
Sub Application_OnEnd
Set Application(conexao) = Nothing
End Sub
</SCRIPT>

Colees do Objeto Session


Na Tabela 8.5 temos a descrio das colees do objeto Session.
Tabela 8.5 As colees do objeto Session.
Coleo

Descrio

Contents

Contm todos os itens que foram adicionados para uma


sesso, com exceo dos que foram declarados com a tag
<OBJECT>. Todas as variveis e objetos criados com Set,
fazem parte desta coleo. Podemos usar a coleo Contents
para obter uma lista de itens aos quais tenha sido atribudo
escopo da sesso. possvel tambm remover os itens da
coleo com os mtodos Remove e RemoveAll.

496

Captulo 8 Aplicativos Web e Componentes

Coleo

Descrio

StaticObjects A coleo StaticObjects contm todos os objetos criados com


as tags <OBJECT> dentro do escopo da sesso. Podemos usar
esta coleo para determinar o valor de uma propriedade
especfica de um objeto ou fazer interao atravs da coleo
e recuperar todas as propriedades de todos os objeto.

Agora passaremos a estudar a sintaxe e alguns exemplos de utilizao das colees do objeto
Session.

A Coleo Contents
Para acessarmos um item da coleo Contents, utilizamos a seguinte sintaxe:
Session.Contents(Chave)

onde Chave o nome do item a ser recuperado.


Por exemplo, vamos supor que as seguintes variveis tenham sido criadas no arquivo global.asa,
no evento Application_OnStart
Session(Var1) = Jos da Silva
Session (Var2) = Maria do Socorro
Session (HoraDia) = Hour(Time( ))

Poderamos exibir o valor destas variveis utilizando o seguinte cdigo:


<%
Response.Write Variveis de nvel de sesso.<HR>
Response.Write Var1: & Session.Contents(Var1)

& <BR>

Response.Write Var2: & Session.Contents(Var2) & <BR>


Response.Write Hora do incio da aplicao: & Session.Contents(HoraDia) &
<BR>
%>

O comando Session.Contents(Var1) retorna o valor da varivel de sesso Var1. O comando


Session.Contents(Var2) retorna o valor da varivel de sesso Var2 e assim por diante.
Como estamos trabalhando com uma coleo, podemos utilizar o operador For Each...Next
para percorrer todos os itens da coleo Contents. No exemplo de cdigo a seguir, exibimos o
nome de todos os elementos da coleo Contents.

497

Criando Sites Dinmicos com ASP 3.0

<%
For Each elemento in Session.Contents
Response.Write Nome do elemento: & elemento & <BR>
Next
%>

Considere a Listagem 8.12, onde fazemos uso do operador For Each...Next para exibir o nome
de todos os itens da coleo Contents do objeto Session.
Listagem 8.12 Acessando os elementos da coleo Contents contents2.asp.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

<TITLE>Utilizando a coleo Contents</TITLE>

</HEAD>

<BODY>

<HR>

<%

Response.Write Elementos da coleo Contents. <HR>

10

For Each elemento in Session.Contents

11

Response.Write Elemento: & elemento & <BR>

12

Next

13

Response.Write <HR>

14

%>

15

</BODY>

16

</HTML>

Ao carregarmos esta pgina no Internet Explorer, obtemos o resultado indicado na Figura 8.20.

498

Captulo 8 Aplicativos Web e Componentes

Figura 8.20: Usando For Each...Next para exibir o nome dos elementos da coleo Contents.
Poderamos modificar a Listagem 8.11, para que alm de exibir o nome de cada elemento, a
mesma exibisse o valor de cada um dos elementos. Esta alterao est indicada na Listagem 8.12.
Listagem 8.12 Exibindo o nome e o contedo dos elementos da coleo Contents.
1

<%@ Language=VBScript %>

<HTML>

<HEAD>

<TITLE>Utilizando a coleo Contents</TITLE>

</HEAD>

<BODY>

<HR>

<TABLE border=1 width=100%>

<TR>

10

<TD><B>Elemento</B></TD>

11

<TD><B>Valor</B></TD>

12
13

</TR>
<%

499

Criando Sites Dinmicos com ASP 3.0

14

Response.Write Elementos da coleo Contents. <HR>

15

For Each elemento in Application.Contents %>

16

<TR>

17

<TD><% =elemento %> </TD>

18

<TD><% =Session.Contents(elemento)%></TD>

19

</TR>

20

<%

21

Next

22

Response.Write <HR>

23

%>

24

</TABLE>

25

</BODY>

26

</HTML>

Ao carregarmos esta nova verso da pgina, no Internet Explorer, obtemos o resultado indicado
na Figura 8.21.

Figura 8.21: Usando For Each...Next para exibir o nome e o contedo dos
elementos da coleo Contents.

500

Captulo 8 Aplicativos Web e Componentes

A Coleo StaticObjects
Para acessarmos um item da coleo StaticObjects, utilizamos a seguinte sintaxe:
Session.StaticObjects(Chave)

onde Chave o nome do item a ser recuperado.


Como estamos trabalhando com uma coleo, podemos utilizar o operador For Each...Next
para percorrer todos os itens da coleo Contents. No exemplo de cdigo a seguir, exibimos o
nome de todos os elementos da coleo StaticObjects.
<%
For Each elemento in Session.StaticObjects
Response.Write Nome do elemento: & elemento & <BR>
Next
%>

Agora que j conhecemos os eventos e colees do objeto Session, vamos ao estudo dos
mtodos deste objeto.

Mtodos do objeto Session


Na Tabela 8.6 temos a descrio dos mtodos do objeto Session.
Tabela 8.6 Os mtodos do objeto Session.
Mtodo

Descrio

Abandon

O mtodo Abandon elimina todos os objetos


armazenados em um objeto Session e libera seus
recursos. Se voc no chamar o mtodo Abandon
explicitamente, o servidor eliminar esses objetos
quando a sesso atingir seu tempo limite. Quando o
mtodo Abandon chamado, o objeto Session atual
colocado em fila para excluso, mas na verdade no
excludo at que todos os comandos de script da pgina
atual tenham sido processados. Isso significa que voc
pode acessar as variveis armazenadas no objeto
Session na mesma pgina que utilizou o mtodo
Abandon, mas no em quaisquer pginas subseqentes
da aplicao Web.

501

Criando Sites Dinmicos com ASP 3.0

Mtodo

Descrio

Contents.Remove

O mtodo Session.Contents.Remove exclui um item


especificado da coleo Contents. O mtodo
Contents.Remove considera uma seqncia de
caracteres ou um inteiro como um parmetro de
entrada. Se o parmetro de entrada for uma seqncia
de caracteres, o mtodo pesquisar a coleo Contents
para localizar um item com esse mesmo nome e o
remover. Se o parmetro de entrada for um inteiro, o
mtodo contar o nmero de itens equivalente a partir
do incio da coleo e remover o item correspondente.

Contents.RemoveAll O mtodo Session.Contents.RemoveAll remove todos os


itens que foram adicionados coleo Session.Contents.
Agora vamos analisar alguns exemplos de cdigo que utilizam os mtodos do objeto Session.
A sintaxe para o mtodo Contents.Remove a seguinte:
Session.Contents.Remove(Nome_da_Varivel)

No exemplo a seguir so adicionadas trs variveis em nvel de sesso. Depois utilizamos o


mtodo Contents.Remove para remover uma das variveis.
<%
Session(Nome) = Request.Form(nome)
Session (Idade)

= Request.Form(idade)

Session (ValorDolar)

= 1.72

Session.Contents.Remove(Idade)
%>

A sintaxe para o mtodo Contents.RemoveAll a seguinte:


Session.Contents.RemoveAll( )

No exemplo a seguir so adicionadas trs variveis em nvel de sesso. Depois utilizamos o


mtodo Contents.RemoveAll para remover todas as variveis, inclusive as que tenham sido
adicionadas pela sesso do usurio, em outras pginas ASP da aplicao, ou atravs do arquivo
global.asa utilizando o mtodo Session_OnStart.
<%
Session (Nome) = Request.Form(nome)
Session (Idade)

= Request.Form(idade)

502

Captulo 8 Aplicativos Web e Componentes

Session (ValorDolar)

= 1.72

Session.Contents.RemoveAll( )
%>

A sintaxe para o mtodo Abandon a seguinte:


<%
Session.Abandon
%>

Observe o exemplo a seguir, onde utilizamos o mtodo Session.Abandon, porm aps termos
utilizado este mtodo, definimos e exibimos uma varivel em nvel de sesso. Esta varivel ser
exibida pois, conforme descrito anteriormente, a sesso somente ser destruda aps todas as
linhas de Script da pgina que chamou o mtodo Session.Abandon terem sido executadas.
<%
Session.Abandon
Session(NomeUsuario) = Jos da Silva
Response.Write Nome do usurio: & Session (NomeUsuario)
%>

NOTA
O servidor cria um novo objeto Session quando voc abre uma pgina subseqente da aplicao
Web depois de abandonar uma sesso. Voc pode armazenar variveis e objetos nesse novo
objeto Session.

Agora vamos ao estudo das propriedades do objeto Session.

Propriedades do Objeto Session


Na Tabela 8.7 temos a descrio das propriedades do objeto Session.
Tabela 8.7 Propriedades do objeto Session.
Propriedade

Descrio

CodePage

uma propriedade de leitura e escrita, representada por um


nmero inteiro. A propriedade CodePage determina a pgina
de cdigo que ser usada para exibir o contedo dinmico de
uma pgina ASP. Uma pgina de cdigo um conjunto de
caracteres que pode incluir nmeros, marcas de pontuao e

503

Criando Sites Dinmicos com ASP 3.0

Propriedade

Descrio
outros hierglifos. Diferentes idiomas e locais podem usar
diferentes pginas de cdigo. Por exemplo, a pgina de cdigo
ANSI 1252 usada para o ingls americano e a maioria dos
idiomas europeus; a pgina de cdigo OEM 932 usada para
o Kanji japons.

LCID

A propriedade LCID determina o identificador de local que


ser usado para exibir o contedo dinmico.

SessionID

A propriedade SessionID retorna o identificador da sesso,


um identificador exclusivo que gerado pelo servidor quando
a sesso criada. Uma identificao da sesso retornada
como um tipo de dado LONG.

TimeOut

A propriedade TimeOut especifica o tempo limite de durao


do objeto Session para esse aplicativo, em minutos. Se o
usurio no atualizar ou solicitar uma pgina dentro do perodo
de limite de tempo, a sesso encerrada pelo servidor IIS.

Vamos estudar mais alguns detalhes sobre estas propriedades.


A sintaxe para a propriedade CodePage a seguinte:
<%
Session.CodePage = nmero_pgina_cdigo
%>
Por exemplo:
<%
Session.CodePage = 1252
%>

Na Tabela 8.8 temos o nmero para algumas pginas de cdigo.


Tabela 8.8 Principais pginas de Cdigo
Nmero

Descrio

437

MS-DOS / EUA

850

MS-DOS / Internacional

1251

Windows / Rssia

504

Captulo 8 Aplicativos Web e Componentes

Nmero

Descrio

1252

Windows/ ANSI

1253

Windows/ Grcia

10000

Macintosh/ Padro

A sintaxe para a propriedade LCID a seguinte:


<%
Session.LCID = nmero_indicador_local
%>
Por exemplo:
<%
Session.LCID = 0816
%>

Este comando define as configuraes de localidade para o Portugus de Portugal. O cdigo


para o Brasil 0416.

NOTA
As configuraes de localidade definem diversas configuraes, como por exemplo o smbolo da
moeda, o nmero de casas decimais, o formato da data e da hora, etc. So as opes configuradas
atravs do cone Opes regionais do Painel de Controle. Para maiores detalhes sobre a
configurao das Opes regionais, consulte o Captulo 2 do livro Microsoft Windows 2000
Server Curso Bsico & Rpido, de minha autoria e publicado pela editora Axcel Books.

A sintaxe para a propriedade SessionID a seguinte:


Session.SessionID
Por exemplo:
<%
Response.Write Identificador da sesso: & Session.SessionID
%>

Este comando retorna um resultado semelhante ao seguinte:


Identificador da Sesso: 117013627

O nmero varia, pois para cada sesso este nmero gerado automaticamente pelo servidor IIS.

505

Criando Sites Dinmicos com ASP 3.0

IMPORTANTE
Voc no deve usar a propriedade SessionID para gerar valores de chave primria para um
aplicativo de banco de dados. Isso porque se o servidor Web for reinicializado, alguns valores
de SessionID podero ser os mesmos daqueles gerados antes do servidor ser parado. Em vez
disso, voc deve usar os campos de auto-incremento do prprio banco de dados.

A sintaxe para a propriedade TimeOut a seguinte:


Session.TimeOut = minutos
Por exemplo:
<%
Session.TimeOut = 20
%>

Este comando define o TimeOut da sesso para 20 minutos.


Com isso encerramos o estudo destes dois importantes objetos do ASP: Application e Session.

Concluso
Neste captulo estudamos alguns conceitos fundamentais, tais como:
O que uma aplicao Web no IIS.
Quais os componentes de uma aplicao Web no IIS.
O problema de manter o estado de uma conexo.
Aprendemos sobre quais elementos que compes uma aplicao Web no servidor IIS. Tambm
tratamos sobre as configuraes de uma aplicao Web, utilizando o Gerenciador do Internet
Services. Aprendemos sobre diversas propriedades que podem ser configuradas para uma
aplicao Web.
Na seqncia aprendemos sobre o arquivo global.asa. Vimos que toda aplicao Web pode
conter um arquivo global.asa, no qual podem ser definidas variveis de inicializao, tanto em
nvel de aplicao quanto em nvel de sesso. Para isso utilizamos, basicamente, quatro eventos
para os quais podemos escrever cdigo no arquivo global.asa. Os eventos so os seguintes:
Application_OnStart
Application_OnEnd
Session_OnStart
Session_OnEnd

506

Captulo 8 Aplicativos Web e Componentes

Fizemos um estudo detalhado do objeto Application. Foram explicados e exemplificados todos


os mtodos, colees e eventos deste objeto. Apresentamos alguns exemplos completos de
utilizao deste objeto, tanto no arquivo global.asa quanto em pginas ASP. Tambm aprendemos
que, alm de variveis, possvel a criao de objetos no evento Application_OnStart. A ttulo
de exemplos criamos um objeto que representa uma conexo com um Banco de dados.
O prximo passo foi o estudo detalhado do objeto Session. Foram explicados e exemplificados
todos os mtodos, colees, eventos e propriedades deste objeto. Apresentamos alguns
exemplos completos de utilizao do objeto Session, tanto no arquivo global.asa quanto em
pginas ASP. Criamos um objeto do tipo ADODB.Connection, no evento Session_OnStart e
depois utilizamos este objeto em exemplos de pginas ASP.
No prximo captulo iremos estudar alguns aspectos de segurana. Hoje em dia, com a
crescente onda de ataques a sites e aplicativos Web, em um mundo em que milhes de usurios
esto conectado