Você está em: Principal › Artigos › ASP 3.0 › Capítulo 07 : 04
Lição 057 - Capítulo 07 - Utilizando o objeto Command para passar parâmetros para uma consulta Parametrizada
Neste item vamos utilizar o objeto Command e a sua coleção Parameters para acessar a consulta con_pedidos e passar um valor para o parâmetro Pais da consulta. Vamos criar um formulário, onde temos uma lista, gerada dinamicamente pelo ASP, na qual temos a listagem dos países em ordem alfabética. O usuário seleciona um país na lista e clica no botão Pesquisar. Feito isso será chamada uma página procurapais.asp, a qual passa o valor selecionado na lista como parâmetro para a consulta con_pedidos, a qual retorna a listagem dos pedidos para o país selecionado. A página inicial, na qual construiremos a listagem de países será chamada de command2.asp.
Na Figura 7.10 temos um diagrama do funcionamento do nosso exemplo.
Figura 7.10 Diagrama de funcionamento do exemplo proposto.
Na Listagem 7.2 temos o código que cria a página command2.asp.
Listagem 7.2 – Criando a lista com o nome dos países – command2.asp.
5 <TITLE>Selecione o País de destino.</TITLE>
19 Set Paises = Server.CreateObject("ADODB.Recordset")
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 países para os quais existem
23 'pedidos efetuados.
25 <P><B>Selecione o país a ser pesquisado.</B></P>
26 <P><B><I>Depois clique no botão Pesquisar.</I></B></P>
27 <FORM action=procurapais.asp method=post id=form1 name=form1>
28 <SELECT id=listapaises name=listapaises>
30 'Agora construo a lista de opções a partir dos
31 'dados obtidos da tabela Orders.
32 'Para cada país obtido, crio uma nova opção
33 'na lista.
35 Response.Write "<OPTION value=" & Chr(34) & Paises.Fields("ShipCountry") & Chr(34) & ">" & Paises.Fields("ShipCountry")& "</OPTION>"
42 <INPUT type="submit" value=Pesquisar id=Pesquisar name=Pesquisar>
Agora precisamos construir a página procurapais.asp. Esta página receberá o valor selecionado na lista, passará este valor para o parâmetro Pais da consulta con_pedidos, a qual irá retornar somente os pedidos para o país selecionado. A página procurapais.asp também exibirá os resultados obtidos.
Na Listagem 7.3 temos o código que cria a página procurapais.asp.
Listagem 7.3 – Passando um valor para o parâmetro Pais da consulta con_pedidos.
5 <TITLE>Resultados da pesquisa.</TITLE>
16 'Agora criamos um Objeto RecordSet para reapresentar
17 'a lista de países no final, para que o usuário possa
18 'fazer uma nova pesquisa.
21 'Agora crio um objeto do tipo Command
22 'defino a conexão ativo utilizando a propriedade ActiveConnection.
23 'Depois defino o tipo de comando utilizando a propriedade
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 invés do valor 4 poderíamos 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 começo a definir as características do parâmetro.
33 'Crio variável para definir o nome do parâmetro.
34 nome_par = "Pais"
35 'Crio uma variável para conter o valor do parâmetro.
36 'Defino este valor como sendo o valor selecionado
37 'na lista de países.
38 valor_par= Request.Form("listapaises")
39 'Agora crio variáveis que definem as demais
40 ' características do parâmetro.
41 tipo_par = 129 'parâmetro do tipo string.
42 tama_par = 50 'define o tamanho do parâmetro.
43 dire_par = 1 'define um parâmetro 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 parâmetro a coleção Parameters.
47 com_paises.Parameters.Append pais_par
48 'Defino o comando a ser executado como sendo o nome
49 'da consulta con_pedidos
50 com_paises.CommandText = "con_pedidos"
51 'Crio um objeto RecordSet e utilizo o método
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 países para que o usuário possa
57 'pesquisar os pedidos para um outro país.
59 <P><B>Para pesquisar outro país, selecione na lista.</B></P>
60 <P><B><I>Depois clique no botão Pesquisar.</I></B></P>
61 <FORM action=procurapais.asp method=post id=form1 name=form1>
62 <SELECT id=listapaises name=listapaises>
65 'Agora construo a lista de opções a partir dos
66 'dados obtidos da tabela Orders.
67 'Para cada país obtido, crio uma nova opção
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"
74 Response.Write ">" & Paises.Fields("ShipCountry")& "</OPTION>"
75 Paises.MoveNext
77 %>
79 <INPUT type="submit" value="Pesquisar" id=Pesquisar name=Pesquisar>
81 <%
82 'Exibo os resultados obtidos a partir da consulta
83 'con_pedidos.
85 <B>Relação de pedidos para: <% =Request.Form("listapaises") %>.</B>
87 <% 'Agora exibo os resultados utilizando uma tabela. %>
88 <TABLE border=1>
90 <TD><B>Código</B></TD>
91 <TD><B>Data</B></TD>
92 <TD><B>Cidade</B></TD>
93 <TD><B>País</B></TD>
96 Do While Not Resultados.EOF
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>
104 <% Resultados.MoveNext
106 %>
A Listagem 7.3 salienta diversos pontos importantes na utilização do objeto Command para a execução de consultas Parametrizadas, através da passagem de parâmetros utilizando o objeto Parameter.
Vamos detalhar alguns trechos desta listagem.
Inicialmente criamos um objeto do tipo Command, depois definimos a sua propriedade ActiveConnection como sendo a conexão conn. Por último definimos a propriedade CommandType com o valor 4. Ao invés do valor 4 poderíamos 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.
Na Tabela 7.3 estão listados os valores e respectivas constantes para a propriedade CommandType.
Em seguida começo a definir as características do parâmetro que será criado e passado para a consulta. Isto é feito com o seguinte trecho de código:
Primeiro definimos o nome do parâmetro, o qual deve ser o mesmo nome que utilizamos para a definição do parâmetro, quando da criação da consulta no Microsoft Access. Neste caso criamos uma variável chamada nome_par e definimos o seu valor como "Pais".
Logo em seguida criamos a variável valor_par, a qual irá conter o valor que será passado para o parâmetro Pais. Este valor é o valor selecionado na lista de países da página command2.asp, conforme indicado pelo código abaixo:
Seguindo as definições, criamos uma variável para o tipo do parâmetro – tipo_par. A esta variável foi atribuído o valor 129. Ao invés do valor 129 poderíamos ter utilizado a constante adChar, o que define o parâmetro 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 parâmetro.
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 parâmetros de um determinado tipo.
adBigInt Indica um inteiro de 8 bytes;
adBibary Indica um valor binário.
adBoolean Indica um valor booleano, do tipo Verdadeiro ou Falso (Sim ou Não).
sdBSTR Indica uma string de caracteres de terminação nula (Unicode).
adChar Indica um valor de string, isto é, texto.
adCurrency Indica um valor do tipo "currency", o qual é um número com quatro casas decimais fixas.
adDate Indica um valor de data.
adDBTime Indica um valor de hora, no formato hhmmss .
adDBTimeStamp Indica um valor de data/hora no formato yyyymmddhhmmss .
adDecimal Indica um valor decimal.
adDouble Indica um valor numérico de precisão dupla.
adEmpty Não define nenhum valor.
adError Indica um código de erro de 32 bits.
adGUID Indica um valor do tipo GUID - Globally Uniq Identifier.
adInteger Indica um valor inteiro de 4 bytes.
adSingle Indica um valor numérico de precisão simples.
Tabela 7.5 Principais Valores/Constantes para definição do tipo do parâmetro.
Em seguida definimos um tamanho máximo em bytes para o parâmetro, que no nosso exemplo foi definido para 50, conforme indicado pelo seguinte comando:
Finalmente definimos uma variável para conter o valor de definição para a propriedade Direction do parâmetro. Este valor foi definido em 1, o que significa um parâmetro de entrada, isto é, um parâmetro que envia um valor para a consulta do Microsoft Access. Esta definição está indicada no código a seguir:
Ao invés do valor 1, poderíamos 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.
adParamInput Indica um parâmetro de entrada. É o valor padrão.
Indica que o parâmetro é um parâmetro de saída.
Indica que o parâmetro é um parâmetro de entrada e saída.
adParamReturnValue Indica que o parâmetro representa um valor de retorno.
Indica um parâmetro com direção desconhecida.
Tabela 7.6 Valores/Constantes para a propriedade Direction.
Criamos variáveis para conter estes valores. Depois passaremos estas variáveis para o método CreateParameter. Ao invés de criarmos as variáveis poderíamos passar os valores, diretamente para o método CreateParameter. Adotamos este procedimento para facilitar o entendimento do código.
O próximo passo é criar um objeto do tipo Parameter, utilizando o método CreateParameter do objeto Command. Chamamos este objeto de pais_par, conforme indicado abaixo:
45 Set pais_par = com_paises.CreateParameter (nome_par,tipo_par,dire_par,tama_par,valor_par)
A sintaxe para o método CreateParameter é a seguinte:
Set nome_parameter = nome_command.CreateParameter (Name, Type, Direction, Size, Value)
1. Name : O nome do parâmetro.
2. Type: O tipo do parâmetro. Os principais valores de tipo possíveis, estão listados na Tabela 7.5.
3. Direction: Definição da direção do parâmetro. Os principais valores de direção possíveis, estão listados na Tabela 7.6.
4. Size: Define o tamanho máximo para o parâmetro.
5. Value: Define o valor do parâmetro. No nosso caso é o valor que será enviado para a consulta con_pedidos, valor esse que servirá como critério de filtragem para o campo ShipCountry.
Uma vez criado o parâmetro é hora de adicioná-lo a coleção Parameters do objeto Command. Para fazer isso, utilizamos o método Append da coleção Parameters, conforme indicado a seguir:
46 'Adiciono o parâmetro a coleção Parameters
Observe que passamos para o método Append, o nome do objeto Parameter a ser adicionado a coleção Parameters. Utilizando Append, podemos adicionar novos parâmetros.
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 código:
O passo final é criar um objeto RecordSet e popular o objeto RecordSet, utilizando o método Execute do objeto Command. Isto é feito com o seguinte código:
Feito isso, o valor selecionado na lista de países é passado para a consulta con_pedidos. A consulta é executada e somente são retornados os registros em que o campo ShipCountry contém o valor selecionado na Lista de países.
Com a utilização do objeto Command e do objeto Parameter foi possível executar uma consulta Parametrizada no Microsoft Access, passando o valor do parâmetro para a consulta.
Utilizando o nosso exemplo.
Agora vamos utilizar o nosso exemplo, para comprovar o correto funcionamento do mesmo.
Ao carregar a página command2.asp, obtemos o resultado indicado na Figura 7.11
Figura 7.11 Selecione um país da Lista.
Vamos supor que o usuário selecionou "Norway", na lista de países. Ao clicar no botão Pesquisar serão exibidos apenas os Pedidos o país selecionado, conforme indicado na Figura 7.12.
Figura 7.12 Exibindo os pedidos para "Norway"
Observe que novamente é exibida a lista de países e o país selecionado anteriormente aparece selecionado na lista. Para pesquisar os pedidos para outro país é só selecionar o país desejado na lista e clicar no botão Pesquisar. Veja que com isso construímos um formulário de pesquisa bastante interativo. O usuário seleciona o país desejado e manda pesquisar. Cada vez que o usuário seleciona um país diferente na lista e clica no botão Pesquisar; o novo valor selecionado é passado como parâmetro para a consulta con_pedidos. A consulta é executada e retorna somente os registros que atendem ao critério passado como parâmetro.
Um desafio para o amigo leitor.
Agora que já conhecemos vários detalhes sobre o acesso a Bancos de dados, através de páginas ASP, fica aqui um pequeno desafio para o amigo leitor.
DASAFIO: Modificar o exemplo anterior fazendo as seguintes melhorias.
Modificar a consulta con_pedidos incluindo um parâmetro chamado AnoPedido. Este parâmetro será utilizado para filtrar somente os registros de um determinado ano. Adicionar um campo calculado à consulta, o qual exiba somente o ano do campo OrderDate.
Modificar a página command2.asp para que além de uma lista com os nomes dos países seja exibida uma lista com a relação de anos para os quais existem pedidos. Construir esta lista dinamicamente, assim como foi construída a lista para os países.
Modificar a página procurapais.asp, para que a mesma crie mais um parâmetro chamado ano_ped e passe esse parâmetro para a consulta con_pedidos, de tal forma que somente sejam retornados os pedidos para o País selecionado e para o Ano selecionado.
Vamos exemplificar como deve ser o resultado final, após estas alterações:
Ao carregar a página command2.asp, obtemos o resultado indicado na Figura 7.13
Figura 7.13 Selecione um país da lista Países e o ano na lista Ano.
Vamos supor que o usuário selecionou "Brazil", na lista de países e 1994 na lista Ano. Ao clicar no botão Pesquisar serão exibidos apenas os Pedidos o país e ano selecionados, conforme indicado na Figura 7.14.
Figura 7.14 Pedidos para o Brasil no ano de 1994.
Para fazer uma nova pesquisa, basta selecionar novos critérios e clicar no botão Pesquisar.
Em caso de dificuldades na criação da nova versão 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 é importante para fixar os diversos conceitos apresentados.