Verificando os dados do Cadastro


Após preencher o formulário o usuário deve enviar as informações clicando no botão Confirmar. Isto irá chamar o arquivo cadastrar.asp que irá verificar se já existe algum cliente cadastrado com os dados informados. Se nada for encontrado os dados do novo usuário serão gravados no banco de dados e  um código de identificação será atribuído ao usuário para identificá-lo na sessão.

O código do arquivo Cadastrar.asp é exibido a seguir

<%@ Language=VBScript %>
<%
Option Explicit

'Declaração das Variáveis 
Dim conntemp
Dim rsClientes

'Abre conexão com o banco de dados

Sub Abre_ConexaoBD
  Set conntemp = Server.CreateObject("ADODB.Connection") 
  conntemp.Open Application("Conecta_bd")
End Sub

'Fecha conexão com o banco de dados
Sub Fecha_ConexaoBD
  conntemp.Close 
  Set conntemp = Nothing
End Sub

Session("cad_nome") = Request.Form("nome")
Session("cad_email") = Request.Form("email")
Session("cad_endereco")= Request.Form("endereco")
Session("cad_bairro") = Request.Form("bairro")
Session("cad_estado")= Request.Form("estado")
Session("cad_cidade") = Request.Form("cidade")
Session("cad_cep")= Request.Form("cep")
Session("cad_telefone") = Request.Form("telefone")
Session("cad_documento")= Request.Form("documento")
Session("cad_sexo")= Request.Form("sexo")

Abre_ConexaoBD

Set rsClientes = Server.CreateObject("ADODB.Recordset") 
rsClientes.Open "Clientes", conntemp, adOpenDynamic, adLockOptimistic, adCmdTable

'Localiza o e-mail 
If NOT rsClientes.EOF Then
   rsClientes.Find "ClienteEMail='" & Session("cad_email") & "'", , adSearchForward 
End If

'Se nao tiver o e-mail cadastrado entao 
If rsClientes.EOF Then
  Session("Cada_Erro") = 0

  'Inclui um novo cliente
  with rsClientes
  .AddNew
  .Fields("ClienteNome") = Session("cad_nome")
  .Fields("ClienteEMail") = Session("cad_email")
  .Fields("ClienteSenha") = Request.Form("senha1")
  .Fields("ClienteEndereco") = Session("cad_endereco")
  .Fields("ClienteBairro") = Session("cad_bairro")
  .Fields("ClienteEstado") = Session("cad_Estado")
  .Fields("ClienteCidade") = Session("cad_cidade")
  .Fields("ClienteCEP") = Session("cad_cep")
  .Fields("ClienteTelefone") = Session("cad_telefone")
  .Fields("ClienteDocumento") = Session("cad_documento")
  .Fields("ClienteSexo") = Session("cad_sexo")
  .Update

  'posiciona o registro para obter o id
  .MoveFirst
  .Find "ClienteEMail='" & Session("cad_email") & "'", , adSearchForward 
  end with

  Session("ClienteID") = rsClientes("ClienteID")
  Session("ClienteNome") = Session("cad_nome")

  'Cria um cookie para o cliente
  Response.Cookies("Cookie_EMail") = Session("cad_email")
  Response.Cookies("CooKie_EMail").Expires = DateAdd("m", 2, Date())

  'Fecha o Recordset e conexao e vai para pagina de compras
   rsClientes.Close 
   Set rsClientes = Nothing
   Fecha_ConexaoBD
   Response.Redirect "comprar.asp"

Else 'já existe cadastro p/ o e-mail
   Session("Cad_Erro") = 1
   rsClientes.Close 
   Set rsClientes = Nothing
   Fecha_ConexaoBD
   Response.Redirect "Cadastra.asp"
End If
%>
<!-- #Include file="ADOVBS.INC" -->

Dim conntemp
Dim rsClientes

'Abre conexão com o banco de dados
Sub Abre_ConexaoBD
  Set conntemp = Server.CreateObject("ADODB.Connection") 
  conntemp.Open Application("Conecta_bd")
End Sub

'Fecha conexão com o banco de dados
Sub Fecha_ConexaoBD
  conntemp.Close 
  Set conntemp = Nothing
End Sub
Session("cad_nome") = Request.Form("nome")
Session("cad_email") = Request.Form("email")
Session("cad_endereco")= Request.Form("endereco")
Session("cad_bairro") = Request.Form("bairro")
Session("cad_estado")= Request.Form("estado")
Session("cad_cidade") = Request.Form("cidade")
Session("cad_cep")= Request.Form("cep")
Session("cad_telefone") = Request.Form("telefone")
Session("cad_documento")= Request.Form("documento")
Session("cad_sexo")= Request.Form("sexo")
Set rsClientes = Server.CreateObject("ADODB.Recordset") 
rsClientes.Open "Clientes", conntemp, adOpenDynamic, adLockOptimistic, adCmdTable

Para abrir o recordset usamos a seguinte sintaxe:

rsClientes.Open "Clientes", conntemp, adOpenDynamic, adLockOptimistic, adCmdTable

Onde:

  1. Open - é o método para abrir o Recordset
  2. "Clientes" - é o nome da Tabela de onde iremos gerar o Recordset
  3. Conntemp - é o nome definido para a nossa conexão com o banco de dados.
  4. adOpenDynamic - indica o tipo de cursor que estamos usando . Aqui estamos usando o cursor que permite adições , alterações e exclusões sendo que elas serão visíveis em seu conjunto de registros. É o cursor mais lento dentre os possíveis. O cursor adOpenForwardOnly - somente leitura para frente - é o cursor mais rápido. (O access não suporta o Cursor do tipo adOpenDynamic)
  5. adCmdTable - Indica que a fonte de dados é uma tabela. Podemos ter os seguintes valores : AdCmdStoreProc - rotina armazenada ; adCmdText - um comando de texto ( SQL ) e adCmdUnKnow - é desconhecido.
If NOT rsClientes.EOF Then
   rsClientes.Find "ClienteEMail='" & Session("cad_email") & "'", , adSearchForward 
End If

O método Find permite procurar na tabela clientes se o e-mail (Session("cad_email") ) esta cadastrado. Ele pode ser usado para encontrar valores em qualquer coluna. A sintaxe é a seguinte:

rs.Find(criterio. Skiprows , SearchDirection, start)

- Criterio - é uma expressão que contém o nome do campo do Recordset, um operador de comparação ( igual = , menor que < , maior que > , menor que ou igual <= , maior que ou igual >=, diferente <> ou Like )

Se o valor da procura for uma sequência de caracteres ela deve  estar envolvida por  aspas simples ('). Assim temos , no nosso caso :     rsClientes.Find "ClienteEMail='" & Session("cad_email") & "'", , adSearchForward 

Quando o valor for uma data , ela deve estar envolvida pelo sinal (#). Assim temos:

 rsclientes.Find "Data=#09/03/2001#" 

Ao usar o operador Like  você pode usar o asterisco(*) no valor de procura apenas na frente e no final da cadeia de caracteres. Assim temos:

 rsclientes.Find "Nome Like '*Silva*'"     ou   rsclientes.Find "Nome Like 'Silva*'" 

A principal limitação do método Find é que você só pode procurar valores em apenas um campo

- SkipRows - é um valor opcional Long ( não usamos ) com valor padrão igual a zero e indica que a busca começa na linha atual e termina na última linha quando SearchDirection é para frente e termina na primeira linha quando SearchDirection é para trás.

- SearchDirection - indica a direção da busca no Recordset. Pode ter os valores : adSearchForward - para frente e se nada for encontrado o cursor é posicionado para além do último registro => EOF retorna True. ou adSearchBack - para trás e se nada for encontrado o cursor é posicionado para além do primeiro registro => BOF retorna True.

- Start - Parâmetro opcional que pode ser definido para um bookmark de início. Assim antes de iniciar a busca o cursor do Recordset se move para este bookmark.

Se não existir um cliente cadastrado com este nome ( EOF=True ) então passamos a incluir o novo cliente. Para isto estamos usando o método AddNew/Update do objeto Recordset. Assim  AddNew adiciona um novo registro ao Recordset e os valores são atribuidos as campos (Fields) do Recordset. O novo registro é gravado no banco de dados através do método Update.

Você deve tomar cuidado ao atribuir um valor ao campo de um Recordset. Verifique primeiro se o valor do campo pode ser armazenado no banco de dados. Cuidado com valores Null e com campos chave primária.

If rsClientes.EOF Then
  Session("Cada_Erro") = 0

  'Inclui um novo cliente
  with rsClientes
  .AddNew
    .Fields("ClienteNome") = Session("cad_nome")
    .Fields("ClienteEMail") = Session("cad_email")
    .Fields("ClienteSenha") = Request.Form("senha1")
    .Fields("ClienteEndereco") = Session("cad_endereco")
    .Fields("ClienteBairro") = Session("cad_bairro")
    .Fields("ClienteEstado") = Session("cad_Estado")
    .Fields("ClienteCidade") = Session("cad_cidade")
    .Fields("ClienteCEP") = Session("cad_cep")
    .Fields("ClienteTelefone") = Session("cad_telefone")
    .Fields("ClienteDocumento") = Session("cad_documento")
    .Fields("ClienteSexo") = Session("cad_sexo")
  .Update

  'posiciona o registro para obter o id
  .MoveFirst
  .Find "ClienteEMail='" & Session("cad_email") & "'", , adSearchForward 
  end with

Podemos usar também a instrução SQL - INSERT - e usar o método Execute do objeto Connection para executar uma instrução  INSERT. A sintaxe é:

INSERT INTO  tabela (coluna1, coluna2, coluna3,...) VALUES (valor1,valor2,valor3,..)

-Coluna1,Coluna2,... - é a lista das colunas da tabela onde desejamos inserir valores

-valor1,valor2,... - são os dados que estamos inserindo na tabela

Exemplo:   INSERT INTO clientes  (Nome,Email,Senha) VALUES ("João","joao@net.com","123")

Para executar a instrução podemos fazer:

SQL="INSERT INTO clientes  (Nome,Email,Senha) VALUES ("João","joao@net.com","123") "

Conn.Execute SQL

A proxíma etapa é mover o ponteiro para o início do arquivo  através do método MoveFirst   - rsclientes.MoveFirst , e localizar o cliente recém cadastrado para obtermos o seu código e o seu nome. Aproveitamos a oportunidade para criar um Cookie para este novo cliente. Criamos um cookie para o seu e-mail e definimos uma data de expiração para o mesmo.

  Session("ClienteID") = rsClientes("ClienteID")
  Session("ClienteNome") = Session("cad_nome")

  'Cria um cookie para o cliente e define data de expiração
  Response.Cookies("Cookie_EMail") = Session("cad_email")
  Response.Cookies("CooKie_EMail").Expires = DateAdd("m", 2, Date())

O método MoveFirst é um método de navegação do Recordset. Além deste método temos mais três métodos que são: MoveLast (vai para o último registro) , MoveNext (vai para o próximo registro)  , MovePrevious (vai para o registro anterior). 

Tenha em mente que nem todos os Recordsets suportam todos estes métodos. Isto vai depender de como o Recordset é preparado para ser usado. Assim ao usar um cursor Forward-Only em um recordset não podemos usar os métodos MovePrevious ou MoveLast.

Feito tudo isto podemos fechar o recordset  (Close) e ir para página de compras (Response.Redirect "compras").

  'Fecha o Recordset e conexao e vai para pagina de compras
   rsClientes.Close 
   Set rsClientes = Nothing
   Fecha_ConexaoBD
   Response.Redirect "comprar.asp"

Se o cadastro já existir, atribuímos a variável de sessão Cad_Erro o valor 1 , e ,  fechamos o recordset , a conexão e redirecionamos o usuário para a página de cadastro.(Response.Redirect "Cadastra.asp")

Else 'já existe cadastro p/ o e-mail
   Session("Cad_Erro") = 1
   rsClientes.Close 
   Set rsClientes = Nothing
   Fecha_ConexaoBD
   Response.Redirect "Cadastra.asp"
End If

O redirecionamento é feito através do método Redirect que permite nos movermos para uma URL definida. Como este método usa o cabeçalho HTTP para avisar o Navegador , nenhuma saída deve ser executada antes de um instrução Response.Redirect.     


Copyright (c) 2000 - José Carlos Macoratti