Olá pessoal! Após um tempo sem escrever para o iMasters, é com grande satisfação que disponibilizo uma nova matéria. Dessa vez, vamos falar de algo atualmente pouco usado (após o lançamento do .NET), porém de grande utilidade, o COM+.
Usando DLL como camada de regra de negócios, é possível garantir melhor a integridade dos dados, e do código fonte, tornando sua aplicação mais segura.
O COM+ também oferece maior velocidade às transações, principalmente as que usam banco de dados.
Nesta matéria, vou exemplificar o uso do ASP/COM+/Sql Server para inserir um usuário no sistema. As DLLs do COM+ serão feitas no VB 6.0.
A princípio, vamos começar criando o banco com uma Tabela TB_USUARIO com os seguintes campos:

Agora vamos criar a procedure que irá inserir os dados no banco:
CREATE PROCEDURE INSERE_USUARIO
@NOME VARCHAR(50),
@EMAIL VARCHAR(50),
@MSG VARCHAR(254) OUTPUT
AS
IF EXISTS(SELECT EMAIL FROM TB_USUARIO WHERE EMAIL = @EMAIL)
BEGIN
SET @MSG = 'ER Usuário ja existe!!'
END
ELSE
BEGIN
INSERT INTO TB_USUARIO(NOME, EMAIL)VALUES(@NOME,@EMAIL)
SET @MSG = 'OK Usuário inserido com sucesso!'
END
GO
Esta procedure verifica se já existe o e-mail cadastrado. Se não existir, ele insere os dados passados como parâmetro.
Reparem que foi criada uma variável @MSG que irá retornar para a aplicação uma mensagem de erro ou de sucesso.
Vamos abrir o VB e adicionar um novo projeto de ActiveX DLL:

Nosso projeto irá se chamar Usuário.vbp. Reparem que, na aba de projetos, ele criou um projeto de uma classe:

Vamos chamar essa classe de Executa e criar um módulo chamado ModuloInsere.
Dentro do ModuloInsere vamos colocar o seguinte código:
Option Explicit
Public objAcessoDB As Object
Public objConexao As Object
Public objCmd As Object
Public objFuncaoRs As Object
Public strConexao As String
Public cmd As Object
'
Public Function AbrirConnADO() As ADODB.Connection
'Variável de Conexao
Dim vConnectionString As String
'Variável de Login '
Dim vLogin As String
vLogin = ""
'Variável de Senha '
Dim vSenha As String
vSenha = ""
Dim Conexao As Object 'ADODB.Connection
' Instancia o Objeto
Set Conexao = CreateObject("ADODB.Connection")
strConexao = "Driver={SQL Server};Server=LOCALHOST;Database=DATABASE;Uid=;Pwd=;"
' Define tratamento de processo '
Conexao.CursorLocation = adUseClient
' Define o timeout
Conexao.ConnectionTimeout = 150
' Abre Conexão
Conexao.Open strConexao, vLogin, vSenha
' Retorna Objeto '
Set AbrirConnADO = Conexao
' Destrói Instancia da Conexão '
Set Conexao = Nothing
End Function
Percebam que, no código acima, definimos as variáveis públicas da Classe e criamos a função AbrirConnADO de acesso ao banco de dados.
Na classe executa, vamos inserir o seguinte código:
Public Function IncluirUsuario(ByVal pNome As String, ByVal pEmail As String) As String
'Tratamento de Parametros
Dim sRetorno As String
pNome = UCase(pNome)
pEmail = LCase(pEmail)
'Abre conexão
Set objConexao = AbrirConnADO()
Set objCmd = CreateObject("ADODB.Command")
'Roda procedure
With Cmd
.ActiveConnection = objConexao
.CommandText = "INSERE_USUARIO"
.CommandType = adCmdStoredProc
.Parameters.Append .CreateParameter("NOME", adVarChar, adParamInput, 50, pNome)
.Parameters.Append .CreateParameter("EMAIL", adVarChar, adParamInput, 50, pEmail)
.Parameters.Append .CreateParameter("pRetorno", adVarChar, adParamOutput, 250, sRetorno)
.Execute
sRetorno = .Parameters("pRetorno").Value
End With
'Retorna mensagem
IncluirUsuario = sRetorno
End Function
No código acima nós criamos uma função IncluirUsuario que recebe os parâmetros pNome e pEmail como string.
Abrimos a conexão usando a função AbrirConnADO.
Após isso, usamos o objeto command para passar os parâmetros para a procedure INSERE_USUARIO.
Retornamos para a variável sRetorno, a mensagem de retorno da Procedure e retribuímos essa mensagem para a função IncluirUsuario.
Vamos salvar o projeto e criar a dll do mesmo:

Agora que a dll está criada, vamos registrá-la dentro do COM+.

Entre em Administrative Tools.

Entre em Component Services.

Vamos criar um novo pacote de aplicações.

Vamos criar uma aplicação vazia, conforme destacado em vermelho na imagem.

Vamos chamar nossa aplicação de USUARIO. Percebam que a nova aplicação foi criada com sucesso!
Vamos adicionar nossa dll dentro da aplicação criada:


Vamos localizar nossa DLL e adicioná-la.

Nosso componente registrado ficará assim:

Agora que já temos a DLL criada e registrada, vamos criar um novo projeto no VB para testarmos a DLL.
Crie um projeto Standard.EXE.

Crie um formulário com um campo para nome do usuário (txtNome), um campo para e-mail (txtEmail) do usuário e um botão salvar (cmdIncluirUsuario).

Dentro do botão salvar, adicione o seguinte código:
Private Sub cmdIncluirUsuario_Click()
Dim objUsuario As Object
Dim tipoMsg As String
‘Seta o objeto objUsuario como uma instância da Classe Usuário
Set objUsuario = CreateObject("Usuario.Executa")
Dim Retorno As String
‘Instancia a classe Usuario
Retorno = objUsuario.IncluirUsuario(txtNome.Text, txtEmail.Text)
tipoMsg = Mid(Retorno, 1, 2)
‘Faz o tratamento de erros
If tipoMsg = "ER" Then
MsgBox (Replace(Retorno, "ER", ""))
Else
MsgBox (Replace(Retorno, "OK", ""))
End If
Set objUsuario = Nothing
End Sub
No código acima nós instânciamos a dll Usuario com o método Executa.
Passamos por parâmetro o valor dos campos txtNome e txtEmail e retornamos para a variável Retorno, a mensagem retornada da procedure, por fim, exibimos a mensagem de retorno.
Na próxima matéria vou exemplificar como se instancia essa classe através do ASP.
- Gostaria de dedicar esta matéria à toda equipe que trabalha e já trabalhou comigo e sempre me ajudam quando preciso.
- A minha namorada pelo incentivo que me dá para sempre continuar escrevendo no iMasters.
- E a toda equipe iMasters pela oportunidade.
Até a próxima!
Veronica Gravino
Otimo tópico!
hoje em dia aplicações em 3 camadas são bem mais eficientes e seguras!
2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.