O meu objetivo é mostrar como é fácil, seguro e rápido utilizar sistemas ASP 3.0 utilizando 3 camadas. Além das camadas ficarem desconectadas, caso houver mudanças em algumas das camadas, fica mais fácil altera-las mantendo assim um padrão específico de desenvolvimento de software. Em passos anteriores mostrei como criar as camadas para conectar no banco de dados, criptografia, module e muito mais. Caso queira acompanhar desde o início, acesse os sites indicados abaixo:
www.aspneti.com
www.juliobattisti.com.br
Informo também que todos os exemplos são explicados passo a passo e para melhor visualização, é mostrado uma figura de ilustração real do assunto falado. Os códigos foram testados e comprovados, favor tente seguir passo a passo. Esta primeira parte crio uma tabela de fornecedores bem comum e com dados reais, crio uma stored procedure para inserir os dados no banco de dados e o restante é mostrado no decorrer.
|
Requisitos:
- Ter visto os passos anteriores;
- Possuir um conhecimento VB 6.0 e ASP 3.0;
- Possuir conhecimento utilizando banco de dados;
Utilização e ferramentas:
- Microsoft Visual Studio InterDev 6.0;
- Microsoft Visual Basic 6.0
- Banco de dados SQL SERVER;
|
O primeiro de tudo é a criação do banco de dados junto à aplicação. Como informado anteriormente criei uma tabela de fornecedores junto ao banco de dados. (Referência Parte 1.1)

O nome da tabela do banco de dados é: CPETB042_FORNECEDOR. Note que os campos são formados por um padrão de nomenclatura e são comuns, ou seja, sem nenhum segredo.
O próximo passo é criar uma procedure genérica onde possa fazer update ou insert utilizando o mesmo arquivo. Já que para um fornecedor, o CNPJ nunca deve ser o mesmo, tive a idéia de verificar se o CNPJ já existe, caso não exista o mesmo faz um insert na tabela, caso exista automaticamente a procedure entenderá que deve ser feito um UPDATE nos campos informados. Essa idéia economiza um pouco de tempo e também anula o fato de utilizar outra apenas para fazer update. (Referência Parte 1.2)
|
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
CREATE PROCEDURE [dbo].[CPESP097_INSERIR_FORNECEDOR]
@FOR_NOME nvarchar(100),
@FOR_CNPJ nvarchar(28),
@FOR_OPTANTE_SIMPLES char(1),
@FOR_IE nvarchar(100),
@FOR_TELEFONE nvarchar(20),
@FOR_TELEFONE1 nvarchar(20),
@FOR_FAX nvarchar(20),
@FOR_CONTATO nvarchar(100),
@FOR_ENDERECO text,
@FOR_BAIRRO nvarchar(100),
@FOR_CIDADE nvarchar(100),
@FOR_ESTADO char(2),
@FOR_CEP numeric,
@FOR_BANCO nvarchar(100),
@FOR_AGENCIA nvarchar(20),
@FOR_CONTA nvarchar(70),
@FOR_EMAIL nvarchar(200)
AS
DECLARE @FOR_NU_SEQUENCIAL AS INT
/************************************************************************************
INICIANDO TRANSACAO
*************************************************************************************/
BEGIN TRANSACTION
SET NOCOUNT ON
-- BUSCA PRIMEIRO ANTES DE INSERIR OU ATUALIZAR
SELECT
@FOR_NU_SEQUENCIAL = FOR_NU_SEQUENCIAL
FROM
CPETB042_FORNECEDOR
WHERE
FOR_CNPJ = @FOR_CNPJ
IF (@@rowcount = 0)
BEGIN
INSERT INTO CPETB042_FORNECEDOR (
--FOR_NU_SEQUENCIAL,
FOR_NOME,
FOR_CNPJ,
FOR_OPTANTE_SIMPLES,
FOR_IE,
FOR_TELEFONE,
FOR_TELEFONE1,
FOR_FAX,
FOR_CONTATO,
FOR_ENDERECO,
FOR_BAIRRO,
FOR_CIDADE,
FOR_ESTADO,
FOR_CEP,
FOR_BANCO,
FOR_AGENCIA,
FOR_CONTA,
FOR_EMAIL
)
VALUES
(
--@FOR_NU_SEQUENCIAL,
@FOR_NOME,
@FOR_CNPJ,
@FOR_OPTANTE_SIMPLES,
@FOR_IE,
@FOR_TELEFONE,
@FOR_TELEFONE1,
@FOR_FAX,
@FOR_CONTATO,
@FOR_ENDERECO,
@FOR_BAIRRO,
@FOR_CIDADE,
@FOR_ESTADO,
@FOR_CEP,
@FOR_BANCO,
@FOR_AGENCIA,
@FOR_CONTA,
@FOR_EMAIL
)
END
--- ATUALIZAR TABELA
ELSE
BEGIN
UPDATE CPETB042_FORNECEDOR SET
FOR_NOME = @FOR_NOME,
FOR_CNPJ = @FOR_CNPJ,
FOR_OPTANTE_SIMPLES = @FOR_OPTANTE_SIMPLES,
FOR_IE = @FOR_IE,
FOR_TELEFONE = @FOR_TELEFONE,
FOR_TELEFONE1 = @FOR_TELEFONE1,
FOR_FAX = @FOR_FAX,
FOR_CONTATO = @FOR_CONTATO,
FOR_ENDERECO = @FOR_ENDERECO,
FOR_BAIRRO = @FOR_BAIRRO,
FOR_CIDADE = @FOR_CIDADE,
FOR_ESTADO = @FOR_ESTADO,
FOR_CEP = @FOR_CEP,
FOR_BANCO = @FOR_BANCO,
FOR_AGENCIA = @FOR_AGENCIA,
FOR_CONTA = @FOR_CONTA,
FOR_EMAIL = @FOR_EMAIL
WHERE
FOR_NU_SEQUENCIAL = @FOR_NU_SEQUENCIAL
END
COMMIT TRANSACTION
|
Referência: Parte 1.2
Explicação:
É simples e fácil a criação e utilização da procedure. No começo espero parâmetros necessários para o insert ou update, logo após inicio a transação com o comando BEGIN TRANSACTION e antes de inserir faço obrigatoriamente um select na tabela passando o número do CNPJ do fornecedor. (Referência Parte 1.3).
|
BEGIN TRANSACTION
SET NOCOUNT ON
-- BUSCA PRIMEIRO ANTES DE INSERIR OU ATUALIZAR
SELECT
@FOR_NU_SEQUENCIAL = FOR_NU_SEQUENCIAL
FROM
CPETB042_FORNECEDOR
WHERE
FOR_CNPJ = @FOR_CNPJ
|
Referência: Parte 1.3
Caso haja algum valor retornado para a variável @FOR_NU_SEQUENCIAL, é feito um IF mais abaixo para verificar se o @@rowcount é igual a zero (0). Sendo o mesmo faz insert, senão faz update.
Passando para a parte interessante, criei um projeto do tipo ACTIVEX DLL (caso de dúvidas na criação, verifique os passos anteriores indicado no começo), adicionei o módulo criado anteriormente ao projeto e por final criei uma classe chamada clsFornecedor responsável pelas transações com de fornecedor. O nome do método responsável para inserir é: InserirFornecedor cujo recebe alguns parâmetros necessários. (Referência Parte 1.4)
|
Public Function InserirFornecedor(ByVal FOR_NOME As String, _
ByVal FOR_CNPJ As String, _
ByVal FOR_OPTANTE_SIMPLES As String, _
ByVal FOR_IE As String, _
ByVal FOR_TELEFONE As String, _
ByVal FOR_TELEFONE1 As String, _
ByVal FOR_FAX As String, _
ByVal FOR_CONTATO As String, _
ByVal FOR_ENDERECO As String, _
ByVal FOR_BAIRRO As String, _
ByVal FOR_CIDADE As String, _
ByVal FOR_ESTADO As String, _
ByVal FOR_CEP As String, _
ByVal FOR_BANCO As String, _
ByVal FOR_AGENCIA As String, _
ByVal FOR_CONTA As String, _
ByVal FOR_EMAIL As String) As Boolean
Static sSql As String
Static bRetorno As Boolean
Static bConexao As Boolean
On Error GoTo error
‘ abre a conexao com o banco de dados
bConexao = AbreConexao("open")
If bConexao Then
‘executa a stored procedure criada anteriormente passando os parâmetros
‘necessários
sSql = " CPESP097_INSERIR_FORNECEDOR '" & FOR_NOME & "', '" & FOR_CNPJ & "', " & _
" '" & FOR_OPTANTE_SIMPLES & " ', '" & FOR_IE & "', " & _
" '" & FOR_TELEFONE & "', '" & FOR_TELEFONE1 & "', " & _
" '" & FOR_FAX & "', '" & FOR_CONTATO & "', " & _
" '" & FOR_ENDERECO & "', '" & FOR_BAIRRO & "', " & _
" '" & FOR_CIDADE & "', '" & FOR_ESTADO & "', " & _
" '" & FOR_CEP & "', '" & FOR_BANCO & "', " & _
" '" & FOR_AGENCIA & "', '" & FOR_CONTA & "', " & _
" '" & FOR_EMAIL & "'"
‘ executa o comando utilizando o método da model passando a string SQL
bRetorno = ExecutaSQL(sSql)
End If
error:
‘ caso haja erro, o mesmo gera o log
If Err.Number <> 0 Then
GerarLog "InserirFornecedor", DescricaoErro(1)
End If
‘por fim é retornado ao objeto ou página que chamou um valor do tipo boolean
InserirFornecedor = bRetorno
‘fechando a conexão do banco de dados.
If bConexao Then
AbreConexao "close"
End If
End Function
|
Referência: Parte 1.4
O método é simples depois que entende a utilização do módulo criado em passos anteriores. Essa é a vantagem de se criar um módulo genérico com funções ou métodos, várias classes podem utilizá-lo sem qualquer tipo de problema.
Explicação:
Recebo as variáveis com seus tipos respectivos, mais abaixo abro a conexão com o banco de dados, verifico se a conexão foi realmente aberta, atribuo os valores para a variável sSQL responsável para passar os valores a serem executados. Depois da atribuição, chamo a função ou método, como preferir chamada ExecutaSQL passando a sSQL. Essa função é responsável em fazer todo o trâmite utilizando a stored procedure indicada. Por fim retorno o valor ao objeto ou página que o chamou. (Referência Parte 1.5)

Lembre-se que o componente deve estar registrado no COM PLUS.
Utilizando página ASP 3.0
Esta parte de utilizando da camada de apresentação é bem simples e prático. No momento não se preocupe com layout ou estilo da tela, estou focando no funcionamento utilizando camadas e não no layout. (Referência Parte 1.6)
A figura (referência Parte 1.6) mostra como ficou a página ASP 3.0 responsável por cadastrar o fornecedor no banco de dados. O código HTML é simples e fácil, porém com alguns códigos diferentes. (Referência Parte 1.7)
|
<form action="frmManterFornecedor.asp" method="post" name="form">
<!-- hidden -->
<input type="hidden" name="hdNuSequencial" value="<%=hdNuSequencial%>">
<table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%">
<!--#include file="../includes/barra_titulo.asp"-->
<tr align="center">
<td bgcolor="white" id="td_Left"></td>
<td bgcolor="white" valign="top" width="780px" id="td_Center">
<table border="1" cellpadding="0" class="formulario" WIDTH="90%" >
<tr>
&nb | |