Se voce chegou até aqui é por que realmente esta interessado. Agora neste terceira parte vamos criar o componente no Visual Basic para acessar os dados e realizar as tarefas de incluir , alterar e excluir dados. Como estamos tratando a camada de dados vamos encapsular o código em uma DLL.
Criando um componente no Visual Basic para a camada de dados
Um
novo projeto será aberto como um módulo de
classe - Class1 . Altere o nome do projeto para Camada3 como exibido ao lado. Obs: Para criar uma instância da classe Clientes usaremos o código: Set Object = CreateObject("Camada3.Clientes") |
- Não esqueça de fazer a referência biblioteca - Microsoft ActiveX Data Object 2.X Library
- Na seção General Declarations defina a constante para conexão com o banco de dados Clientes e a tabela clientes do SQL Server 2000 criados na parte I deste artigo.
Option Explicit
Const Conexao = "Provider=SQLOLEDB.1;Persist Security Info=False;User_ ID=macoratti;Password=123456;Initial Catalog=Clientes;Data Source=MACORATI\MACORATTI"
- O código da função Acessa_Tabela é o seguinte:
Public Function Acessa_Tabela(Optional ByVal selecao As Variant, _ Optional ByVal DSN As Variant) As ADODB.Recordset On Error GoTo trata_erro Dim con As ADODB.Connection Dim rst As ADODB.Recordset If IsMissing(DSN) Then DSN = conexao End If Set con = New ADODB.Connection con.Open DSN Set rst = New ADODB.Recordset With rst .CursorLocation = adUseClient .LockType = adLockBatchOptimistic .CursorType = adOpenForwardOnly End With If IsMissing(selecao) Then rst.Open "Select * from Clientes", con Else rst.Open selecao, con End If Set rst.ActiveConnection = Nothing Set Acessa_Tabela = rst Exit Function trata_erro: Set rst = Nothing Set con = Nothing Err.Raise Err.Number & " | " & Err.Source & " - " & Err.Description End Function
A função Acessa_tabela trabalha com dois argumentos opcionais passados por valor : A seleção de registros e a string para conexão com a base de dados.
Definimos a constante conexão como :
Const Conexao = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=macoratti;Password=123456;Initial Catalog=Clientes;Data Source=MACORATI\MACORATTI"
Esta string foi definida usando os parâmetros para o meu servidor SQL Server e para a minha tabela Clientes.
Para acessar uma base de dados no SQL Server devemos definir o usuário e a senha que vai acessar o arquivo e qual banco de dados usar. Vamos então criar o nosso usuário: Macoratti ( no seu caso particular você define outro nome) e definir o banco de dados - Clientes - como sendo a fonte de dados que este usuário irá acessar. ( O banco de dados Clientes foi criado no SQL Server no artigo - Acessando dados no SQL Server com o VB )
Execute o EnterPrise Manager e abra a raiz hierárquica até o item Logins da pasta Security. (Veja abaixo)
Selecione o menu Action -> New Login ou clique com o botão direito do mouse e selecione a opção New Login do menu suspenso. A Janela - New Login - (Ver abaixo) deverá aparecer. Nela você preenche :
o campo Name com o nome do usuário : Macoratti ( no meu caso )
o campo Password com a senha para acesso ( minha senha será : 123456 - (para aplicações reais nunca use uma senha tão secreta assim...)
em Database selecione a tabela Clientes
lique em OK e a seguir confirme a Senha. Pronto o usuário Macoratti esta criado com acesso ao banco de dados Clientes. Veja abaixo:C
Agora tudo esta pronto: O SQL Server , O banco de dados e o usuário com a senha cadastrada... Continuemos...
A linha de código :
If IsMissing(DSN) Then DSN = conexao End If
Verifica se o parâmetro DSN , que é o parâmetro com a string de conexão foi informado. Se nada for informado será usado a constante conexao já definida.
A mesma coisa ocorre com o código a seguir:
If IsMissing(selecao) Then rst.Open "Select * from Clientes", con Else rst.Open selecao, con End If
Verificamos se foi passada uma string para seleção dos registros. Se nada foi informado então selecionamos todos os registros do banco de dados ( cuidado com seleções deste tipo...)
Encapsulando os procedimentos armazenados
Iremos encapsular o código que utiliza os procedimentos armazenados criados na parte II deste artigo. Vamos começar com o mais simples deles : A exclusão de registros feita pela função Exclui_Registro:
1-) Função para Excluir Registros da base de dados : Exclui_Registro
Public Function Exclui_Registro(ByVal cliente_ID As Long, _ Optional ByVal DSN As Variant) As Boolean On Error GoTo trata_erro Dim cmd As ADODB.Command Dim parametro As ADODB.Parameter Exclui_Registro = False If IsMissing(DSN) Then DSN = Conexao End If Set cmd = New ADODB.Command With cmd .ActiveConnection = DSN .CommandType = adCmdStoredProc .CommandText = "sp_excluir_clientes" End With Set parametro = cmd.CreateParameter("@ID", adInteger, adParamInput, 4, cliente_ID) cmd.Parameters.Append parametro cmd.Execute MsgBox " Registro excluido com sucesso ! " Exclui_Registro = True Exit Function trata_erro: Set cmd = Nothing Err.Raise Err.Number & " | " & Err.Source & " - " & Err.Description End Function |
A função Exclui_Registro utiliza o objeto command para executar o procedimento armazenado - sp_excluir_clientes ; esta é uma das melhores formas de executar um procedimento armazenado. Usamos dois parâmetro de entrada : O código de identificação do Cliente e a string para a conexão.
Os parâmetros de entrada são definidos usando o objeto command e sua coleção Parameters. Uma sequência para usar o objeto commando seria:
É claro que para funcionar o objeto command precisa de uma conexão atribuída para realizar o acesso ao banco de dados. Fazemos isto usando a instrução : cmd.ActiveConnection = DSN
Para passar os parâmetros de entrada atribuímos objetos Parameters ao objeto Command. Fazemos isto em duas etapas :
assim :
Set parametro =
cmd.CreateParameter("@ID", adInteger, adParamInput, 4,
cliente_ID)
cmd.Parameters.Append parametro
A sintaxe é a seguinte:
Set ObjParam = objCmd.CreateParameter(Name, Type, Direction , Size , Value )
2-) Função para Atualizar Registros da base de dados : Altera_Registro
Vamos atualizar os registros usando a instrução UPDATE . A seguir o código da função Altera_Registro :
Public Function Altera_Registro(ByVal nID As Long, _ ByVal strNome As String, _ ByVal strEndereco As String, _ ByVal dNascimento As Date, _ ByVal strObservacao As String, _ Optional ByVal DSN As Variant) As Boolean On Error GoTo trata_erro Dim con As ADODB.Connection Dim cmd As ADODB.Command Altera_Registro = False If IsMissing(DSN) Then DSN = Conexao End If Set con = New ADODB.Connection con.ConnectionString = DSN con.Open Set cmd = New ADODB.Command Set cmd.ActiveConnection = con cmd.CommandType = adCmdStoredProc cmd.CommandText = "sp_atualizar_clientes" cmd.Parameters.Append cmd.CreateParameter("@ID_1", adInteger, adParamInput, 4, nID) cmd.Parameters.Append cmd.CreateParameter("@Nome_2", adVarChar, adParamInput, 50, strNome) cmd.Parameters.Append cmd.CreateParameter("@Endereco_3", adVarChar, adParamInput, 50, strEndereco) cmd.Parameters.Append cmd.CreateParameter("@Nascimento_4", adDate, adParamInput, , dNascimento) cmd.Parameters.Append cmd.CreateParameter("@Observacao_4", adVarChar, adParamInput, 100, strObservacao) cmd.Execute Altera_Registro = True MsgBox "Alteração realizada com sucesso !" Exit Function trata_erro: Set cmd = Nothing Err.Raise Err.Number & " | " & Err.Source & " - " & Err.Description End Function |
- A função Altera_Registro recebe o seguintes parâmetros de entrada:
Os parâmetros são então atribuidos ao objeto Command via objetos Parameters :
cmd.Parameters.Append
cmd.CreateParameter("@ID_1", adInteger, adParamInput,
4, nID)
cmd.Parameters.Append cmd.CreateParameter("@Nome_2",
adVarChar, adParamInput, 50, strNome)
cmd.Parameters.Append
cmd.CreateParameter("@Endereco_3", adVarChar,
adParamInput, 50, strEndereco)
cmd.Parameters.Append
cmd.CreateParameter("@Nascimento_4", adDate,
adParamInput, , dNascimento)
cmd.Parameters.Append
cmd.CreateParameter("@Observacao_4", adVarChar,
adParamInput, 100, strObservacao)
Note que é informado: o nome do parâmetro o tipo , a direção , o tamanho e o valor.
A Alteração é efetivada com o comando execute do objeto command: cmd.Execute
3-) Função para Incluir Registros da base de dados : Inclui_Registro
Para encerrar as funções usadas em nosso componente , vamos encapsular o código relativo a stored procedure : sp_incluir_clientes . O código é o seguinte:
Public Function Inclui_Registro(ByVal strNome As String, _ ByVal strEndereco As String, _ ByVal dNascimento As Date, _ ByVal strObservacao As String, _ Optional ByVal DSN As Variant) As Boolean On Error GoTo trata_erro Dim con As ADODB.Connection Dim cmd As ADODB.Command Inclui_Registro = False If IsMissing(DSN) Then DSN = Conexao End If Set con = New ADODB.Connection con.ConnectionString = DSN con.Open Set cmd = New ADODB.Command Set cmd.ActiveConnection = con cmd.CommandType = adCmdStoredProc cmd.CommandText = "sp_incluir_clientes" cmd.Parameters.Refresh With cmd.Parameters .Item(1).Value = strNome .Item(2).Value = strEndereco .Item(3).Value = dNascimento .Item(4).Value = strObservacao End With cmd.Execute MsgBox "Registro incluido com sucesso !" Exit Function trata_erro: Set cmd = Nothing Err.Raise Err.Number & " | " & Err.Source & " - " & Err.Description End Function |
- A função Inclui_Registro recebe o seguintes parâmetros de entrada:
E o código do cliente ? Ora , se não falei antes vou falar agora . O campo ID da tabela Clientes deve ser definido como do tipo Identity sendo que a Identity seed deve ser igual a 1 e o incremento (Identity increment) também é igual a 1. Em outras palavras , este campo é um campo autonumeração que será incrementado de uma unidade quando da inclusão de um novo registro. Veja abaixo:
Obs: Uma coluna Autonumeração é referida como uma coluna Identity no SQL Server 2000
Portanto nao vamos incluir um código para o cliente , o banco de dados irá realizar esta tarefa.
Os valores são incluidos no objeto Commando assim:
With cmd.Parameters .Item(1).Value = strNome .Item(2).Value = strEndereco .Item(3).Value = dNascimento .Item(4).Value = strObservacao End With
Note que como item(0).value refere-se ao camo ID ( codigo do cliente ) , e, este campo é do tipo Identity , começamos a partir do item(1).value ate item(4).value.
Pronto ! já codificamos as 4 funções que compôem a nossa camada de dados e farão todo o tratamento dos dados :
Vamos compilar o nosso
projeto e gerar o arquivo DLL. Selecione no menu File a
opção Make CamadaDados.dll. Se não houver nenhum erro de sintaxe a compilação irá ocorrer com sucesso e o arquivo camadaDados.dll será gerado e estará pronto para ser usado no seu projeto Visual Basic |
Na última parte deste artigo (já estava na hora) vamos mostrar como usar o nosso componente. Veja a continuação em : Usando o componente da camada de dados
José Carlos Macoratti