VB - Usando classes de tratamento de registros
O Visual Basic é realmente uma ferramenta excepcional , quando você pensa que já tirou tudo que ela podia oferecer acaba descobrindo coisas novas; é apenas uma questão de pesquisar e estudar.
Em tempos de VB.NET os ventos da orientação a objeto estão soprando forte , e, as empresas de consultoria chegam a desenhar um cenário onde no futuro teremos apenas Java e .NET.
Se você ainda não conhece o VB.NET nem qualquer outra linguagem orientada a objetos pode estar se perguntando : "Mas o que eu tenho a ver com isto ? Afinal estou contente com o VB e ele me atende plenamente"
Tudo bem ! se você não precisa acompanhar o mercado ou usa o VB apenas como um hobby ou passatempo tudo bem; já se você for um desenvolvedor preocupado com o seu futuro eu diria que você realmente não deve se acomodar.
Mas como começar a assimilar os conceitos da orientação a objetos , classes , etc. se ainda uso o Visual Basic 5 ou 6 ?
Pois este artigo foi escrito justamente para mostrar que você pode ir se preparando para a migração para o VB.NET mesmo criando suas aplicações na versão 5 ou 6 do VB.
Muitos me escrevem a respeito dos conceitos usados na programação orientada a objetos e não conseguem entender como usar formulários com classes , como obter registros de dados de um banco de dados e exibí-los no formulário usando o conceito de classes no VB.
Vamos começar então dizendo que no VB5/6 você pode usar classes , interfaces, propriedades , métodos , etc. e com isto ir se preparando para a migração para o VB.NET.
Para tornar mais claro vou mostrar neste artigo um exemplo onde iremos abordar os seguintes conceitos:
Conexão com um banco de dados Access usando ADO
Acesso a tabela clientes usando o objeto Recordset
Criação de módulos de classes quer irá permitir lidar com os dados dos clientes de uma forma orientada a objetos
criação de propriedades e métodos para a classe
Vamos acessar a tabela clientes que por questão de simplicidade foi definida como tendo somente os campos:
Codigo - Autonumeração
Nome - Texto
Endereco - Texto
Email - Texto
Vamos criar a classe Clientes de forma a que o objeto instanciado desta classe tenha todas as propriedades de um cliente : codigo , nome, endereco e email que correspondem aos campos da tabela clientes.
A conexão com o banco de dados será feito usando um provedor OLEDB ADO cuja string de conexão foi definida como sendo :
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\teste\testes.mdb"
Vamos então ao trabalho. Inicie um novo projeto no VB do tipo StandardEXE , e , no menu Project selecione Add Class Module. A seguir altere o nome do formulário , da classe e do projeto conforme exibido abaixo:
O que você vê ? Você vê um projeto onde temos um formulário que irá fazer a interface com o usuário e uma classe chamada Clientes que irá fazer a interface com o objeto cliente.
Quando você pensa em um cliente quais propriedades lhe vem mente ? Muitas , não é mesmo ? Pois no nosso caso para não tornar o código muito extenso meu cliente foi concebido para ter somente as seguintes propriedades: Codigo, Nome , Endereco e Email.(Na vida real , em sistemas mais complexos o seu objeto clientes provavelmente deverá possuir muito mais propriedades.)
Então já podemos criar o código que irá definir a classe clientes. Lembre-se que a classe clientes irá gerar objetos para que você tenha acesso as propriedades do seu cliente. Aqui esta a grande diferença da programação orientada a objetos , quando você for desenvolver uma solução onde tenha que tratar com uma entidade clientes você não deve pensar em tabela nem em procedimentos e funções mas deve pensar em um cliente como sendo um objeto do mundo real que você deve implementar.
No módulo de classe Clientes.cls , na seção General Declarations devemos definir as propriedades que nosso objeto cliente deverá possuir:
Option Explicit Private mCodigo As Long Private mNome As String Private mEndereco As String Private mEmail As String Private acesso As acesso Private oConn As ADODB.Connection Const eNaoPodeRecuperarDados = vbObjectError + 512 + 2 Const eNaoPodeSalvarDados = vbObjectError + 512 + 3 |
Cada propriedade esta sendo definida como do tipo privada e portanto não poder ser acessada diretamente de fora da classe. Para tornar o acesso possível e encapsular o código vamos definir as propriedades para cada um dos itens declarados. Abaixo temos o código :
Public Property Let Nome(ByVal vNewValue As Variant) mNome = vNewValue End Property Public Property Get Endereco() As Variant Endereco = mEndereco End Property Public Property Let Endereco(ByVal vNewValue As Variant) mEndereco = vNewValue & "" End Property Public Property Get Email() As Variant Email = mEmail End Property Public Property Let Email(ByVal vNewValue As Variant) mEmail = vNewValue & "" End Property Public Property Get Codigo() As Variant Codigo = mCodigo End Property Public Property Let Codigo(ByVal vNewValue As Variant) mCodigo = vNewValue End Property |
Cada propriedade possui um LET que permite atribuir um valor a propriedade ; e possui um GET que permite acessar o valor da propriedade de fora da classe. Poderíamos ter feito a validação em uma das Propriedades GET mas somente incluímos um espaço vazio na atribuição dos valores para que valores nulos fossem suportados.
Até agora nossa classe tem somente propriedades mas vamos criar dois métodos.O primeiro é o método ObtemDados() descrito abaixo:
Public Sub ObtemDados(lngCodigo As Long) Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset If lngCodigo <> 0 Then rs.Source = "Select * from Clientes Where Codigo = " & lngCodigo rs.MaxRecords = 1 Set rs.ActiveConnection = oConn rs.Open If rs.EOF = True And rs.BOF = True Then Err.Raise eNaoPodeRecuperarDados, "Clientes", "Cliente nao localizado" rs.Close Set rs = Nothing Exit Sub Else Nome = rs!Nome & "" Codigo = lngCodigo Endereco = rs!Endereco Email = rs!Email rs.Close Set rs = Nothing End If Else Err.Raise eNaoPodeRecuperarDados, "Clientes", "Cliente nao encontrado." Exit Sub End If End Sub |
o código que representa o método da classe faz o seguinte :
O outro método é o método Salvar() que faz o seguinte :
Public Sub Salvar() Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset rs.LockType = adLockOptimistic rs.CursorType = adOpenKeyset Set rs.ActiveConnection = oConn rs.Source = "Select * from Clientes Where Codigo = " & Codigo rs.Open 'ADO não necessita do método edit para realizar atualizações If Codigo = 0 Then rs.AddNew End If rs.Fields("Nome") = Nome rs.Fields("Endereco") = Endereco rs.Fields("Email") = Email rs.Update rs.Close Set rs = Nothing End Sub |
A classe esta pronto para ser usada. Vamos então incluir no formulário frmclientes1 : 4 caixas de texto , 4 labels e três botões de comando conforme abaixo:
Na seção General Declarations do formulário vamos declarar a variável objeto clientes como sendo do tipo da classe Clientes:
Option
Explicit
Private cliente As clientes
A seguir no evento Load do formulário vamos criar uma instância da classe clientes
Private Sub Form_Load() Set cliente = New clientes End Sub |
Temos ao nosso dispor um objeto cliente que tem acesso a todas as propriedades e métodos da classe Clientes que definimos no módulo de classe. Para constatar isto digite o nome do objeto cliente e em seguida digite o ponto e você verá o que pode acessar via objeto cliente conforme a figura abaixo:
Vamos então mostrar como podemos recuperar dados da tabela cliente e exibir no formulário. O código que faz isto vem a seguir:
Private Sub Command1_Click() cliente.ObtemDados (CLng(Text1.Text)) Text2.Text = cliente.Nome Text3.Text = cliente.Endereco Text4.Text = cliente.Email End Sub |
Simples não é mesmo. Estou usando o objeto cliente para acessar o método ObtemDados passando o valor do código que eu informo no campo text1.text. O resultado irá carregar as propriedades do objeto que eu apenas atribuo as caixas de texto.
Para salvar dados usamos o método Salvar da classe Clientes. Note que antes de invocar o método eu tenho que atribuir os valores das caixas de texto as propriedades do objeto cliente.
Private Sub Command2_Click() If Text2.Text <> "" And Text3.Text <> "" Then cliente.Nome = Text2.Text cliente.Endereco = Text3.Text cliente.Email = Text4.Text cliente.Salvar MsgBox "Dados salvos com sucesso.", vbInformation End If End Sub |
Abaixo temos uma visão do formulário recuperando dados da tabela e exibindo nas caixas de texto:
O código do formulário ficou bem leve e toda a lógica esta na classe. Você poderia incrementar o exemplo criando uma classe para realizar a conexão . Vamos lá , exercite o seu potencial...
Pegue o código completo aqui : clientes.zip
Hasta la vista ...