Visual Basic - Acessando uma base de dados MySQL com ADO


Ora , ora , cá estamos nós novamente falando em acessar uma base de dados no Visual Basic usando ADO. Desta vez o cenário será um pouco diferente, eu disse um pouco. Vamos mostrar como acessar uma fonte de dados MySQL no VB com ADO.

Vou partir do princípio que você não tem o MySQL instalado , então vou mostrar como fazer uma instalação simples no ambiente Windows 95/98 do MySQL , criar um banco de dados , criar uma tabela , incluir alguns dados e no final vamos acessar a  esta tabela no MySQL com ADO.

Preparando o ambiente

Você vai precisar ter o MySQL instalado . Isto não é problema , ele é um freeware e você pode fazer o download no endereço www.mysql.com . Escolha a versão para Windows - Mysql-3.23.43-win.zip - com 12 MB , e descompacte o arquivo para um diretório temporário ; em seguida instale o MySQL na sua máquina clicando no arquivo Setup.exe.(Instale o MySQL no diretório padrão X:MySQL)

Nota : O MySQL utiliza o TCP/IP para fazer a conexão Cliente/Servidor , logo , você tem que ter o TCP/IP instalado na sua Máquina. Além disto você vai precisar ter o Winsock 2 instalado. Se você ter uma cópia mais antiga do Windows 95 instalada vai precisar atualizar o Winsock. (http://www.microsoft.com/.)

Após a instalação, para ativar o servidor MySQL você pode digitar no prompt do DOS ou no menu Iniciar!Executar o seguinte comando:

c:\mysql\bin\mysqld --standalone

(O MySQL não pode ser iniciado como um serviço do Windows pois o Windows 95/98 não suporta isto.)

Para testar se o MySQL esta instalado corretamente , execute a seguinte linha no prompt do DOS:

c:\mysql\bin\mysql

Se tudo estiver nos seus devidos lugares você vai receber a seguinte mensagem.

Para sair digite Quit.(ou \q)

A próxima etapa será definir um usuário e uma senha para autorizar o acesso ao banco de dados. Você pode fazer isto no prompt do DOS em duas etapas :

1-) Excluir da tabela User do MySQL todos os usuários identificados:

Delete From User Where user='';

2-) Criar um usuário com senha para acessar o MySQL: Aqui estamos definindo a senha para o usuário root.

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('senha_secreta');

Obs: localhost indica onde esta localizado o servidor ; assim 'root'@'localhost' informa ao servidor MySQL , que o usuário root  irá fazer a conexão a partir de 'localhost'. (Não se preocupe , a senha será armazenada criptografada no banco de dados.)

Para testar a se a alteração realmente ocorreu , sai do MySQL digitando no prompt o comando: \q

A seguir digite a linha de comando abaixo:

c:\mysql\bin\mysql -u root -p

Você deverá ver a solicitação da senha para o usuário root: ( Enter Password: ). Digite a senha para se logar.

Além do MySQL instalado você vai precisar instalar também o MyObdc que permitira a conexão usando um driver OBDC . Faça o download no site www.mysql.com e a seguir instale o myobdc.

Criando o Banco de dados e a tabela Clientes.

Você não deve estar achando nada agradável ter que trabalhar no prompt do DOS , não é mesmo ? As tarefas de criar um banco de dados e uma tabela podem ser feitos também no prompt do DOS com os comandos apropriados , mas existem interfaces gráficas mais amigáveis onde tais tarefas são mais fácies de ver e visualizar . Vamos usar aqui o utilitário  Free Mascom (Existe também no site www.mysql.com um utilitário gráfico - mysqlgui-win32-static-1.7.5-2.zip - que pode ser usado para o mesmo fim) , que você pode baixar em www.scibit.com . (Descompacte o arquivo e siga as orientações para instalar.)

Após ter instalado o Free Mascom você tem que criar uma conexão com o MySQL. Vamos criar um conexão com o nome de MySQLRoot , onde estaremos fazendo a conexão como root , usando a senha definida acima:

  1. Abra o Free Mascon e selecione o menu File|New Connection. (figura 1.0 )
  2. Na janela Connection Properties informe os dados: (Figura 2.0)
    1. nome da conexão 
    2. nome ou endereço IP do servidor (Se estiver no servidor , o nome 'Localhost' estará sendo indicado )
    3. o nome de usuário e a senha
  3. Clique no botão - Test Connection . Você receberá o aviso - Connection Successful - se fez tudo direitinho.
Figura 1.0 - Criando um nova conexão com MySQL figura 2.0 - Configurando a conexão

Agora vamos criar um banco de dados com  o nome de Clientes. Vamos usar o prompt do DOS :

Criando o banco de dados Clientes no MySQL

Com o banco de dados já criado vamos agora criar a tabela clientes . A nossa tabela clientes terá a seguinte estrutura:

Para criar a tabela clientes poderíamos usar o prompt de comando , mas vamos mostrar como usar o Free Mascon para fazer isto. Infelizmente na versão free você não pode fazer isto diretamente na interface. Vamos contornar o problema usando uma instrução SQL.

Abra o utilitário Free Mascon e expanda a conexão MySQLRoot , selecionando o banco de dados Clientes. Na janela Database selecione a guia Tables. A seguir selecione a opção SQL . (figura 4.0)

Figura 4.0 - Criando a tabela Clientes 

Na janela SQL View , digite a instrução SQL ( figura 5.0 ) e a seguir , na opção SQL clique em Execute.

Figura 5.0 - A instrução SQL para cria a tabela Clientes

Pronto ! Acabamos de criar a tabela Clientes. Vamos inserir alguns dados usando a interface do Mascon. Expanda a conexão MySQLRoot e clique duas vezes no banco de dados clientes. Para inserir dados digite diretamente sobre a coluna a informação correspondente. (Ver figura 6.0)

Figura 6.0 - Inserindo alguns dados na tabela clientes.

Acessando o MySQL com ADO

Agora já temos tudo pronto !. Vamos entrar realmente no objetivo do artigo:Acessar a tabela clientes criada no MySQL no Visual Basic  usando ADO e exibir os registros.

A conexão será feita usando um Data Source Name . Para ver como criamos o DSN para a conexão clique no link :  Criando um DSN para o MySQL ).  Vamos usar o DSN criado com o nome de MySQLConexao.

1-) Inicie um novo projeto no Visual Basic e no formulário padrão insira os controles conforme o layout abaixo:

O formulário do projeto em tempo de desenho Temos as opções para : Incluir, Editar e Excluir Registros

Na seção General Declarations insira o seguinte código: Definimos as variáveis objetos visíveis em todo o formulário.

Option Explicit
Dim sql As String

Public myCon As New ADODB.Connection
Public myCmd As New ADODB.Command
Public myRS As New ADODB.Recordset

Agora o código associado ao evento Load do formulário :

Private Sub Form_Load()

On Error GoTo Error

sql = "SELECT * FROM clientes"
myCon.Open "DSN=MySQLConexao"

With myCmd
      Set .ActiveConnection = myCon
      .CommandType = adCmdText
      .CommandText = sql
End With

With myRS
   .LockType = adLockPessimistic
   .CursorType = adOpenKeyset
   .CursorLocation = adUseClient
   .Open myCmd
End With

myRS.MoveFirst
MostraNumeroRegistro
Mostra_dados

On Error GoTo 0

Form_Load_Exit:
Exit Sub

Error:
MsgBox Err.Number & vbCrLf & Err.Description, vbExclamation, "Erro em [Form_Load]"

End Sub

- Definimos a instrução Sql para selecionar todos os registros da tabela Clientes : sql = "SELECT * FROM clientes"

- Criamos uma conexão com o servidor MySQL usando o DSN criado anteriormente : myCon.Open "DSN=MySQLConexao"

- Definimos as propriedades do Recordset ( myRs ) e abrimos o recordset usando o objeto Command.

With myRS
   .LockType = adLockPessimistic
   .CursorType = adOpenKeyset
   .CursorLocation = adUseClient
   .Open myCmd
End With

- Invocamos a procedure MostraNumeroRegistro para exibir o número atual do registro e número total de registros no recordset. Isto é possível pois definimos o tipo do cursor como adOpenKeyset. O código da procedure é: 

Private Sub MostraNumeroRegistro()

lblStatus.Caption = "Registro: " & CStr(myRS.AbsolutePosition) & " de " & CStr(myRS.RecordCount)

End Sub

- Invocamos a procedure MostraDados para exibir os dados nas caixas de texto. O código é o seguinte:

Private Sub Mostra_dados()

On Error GoTo Error


Txtcodigo.Text = myRS("codigo")

If IsNull(myRS("nome")) Then
  Text1(0).Text = ""
Else
  Text1(0).Text = myRS("nome")
End If

If IsNull(myRS("endereco")) Then
   Text1(1).Text = ""
Else
   Text1(1).Text = myRS("endereco")
End If

If IsNull(myRS("nascimento")) Then
  Text1(2).Text = ""
Else
  Text1(2).Text = myRS("nascimento")
End If

MostraNumeroRegistro

On Error GoTo 0

Mostra_dados_Exit:
Exit Sub

Error:
MsgBox Err.Description, vbExclamation, "Erro em [Mostra_dados]"

End Sub

- A seguir o código para incluir e excluir registros na tabela Clientes usando os métodos Addnew e Delete da ADO:

Private Sub mnuincluiregistro_Click()
Dim iConta As Integer
Dim icodigo As String

On Error GoTo Error

Txtcodigo.Text = ""
For iConta = 0 To 2
Text1(iConta).Text = ""
Next

myRS.MoveLast
icodigo = Val(myRS("codigo")) + 1

myRS.AddNew

Txtcodigo.Text = CStr(icodigo)
Text1(0).SetFocus

On Error GoTo 0

mnuincluiregistro_Exit:
Exit Sub

Error:
MsgBox Err.Description, vbExclamation, "Erro em [mnuincluiregistro]"

End Sub
Private Sub mnuexcluiregistro_Click()
Dim Msg, Estilo, Titulo, Help, Ctxt, Resposta
Msg = "Confirma exclusão do registro atual ?"
Estilo = vbYesNo + vbCritical 
Titulo = "Confirma !" 

If myRS.RecordCount > 1 Then
  Response = MsgBox(Msg, Estilo, Titulo, Help, Ctxt)
  If Resposta = vbYes Then
  With myRS
       .Delete
       .MoveNext
      If .EOF Then
         .MovePrevious
          If .BOF Then
               MsgBox "Não há dados no arquivo !", vbInformation, "Sem Dados."
          End If
       End If
  End With
End If
Else
    MsgBox "Há somente 1 registro no arquivo!", vbInformation, "Excluir "
End If

Mostra_dados
End Sub
Incluir registros na tabela Clientes usando o método Addnew da ADO Excluir registros do arquivo usando o método Delete da ADO

- Agora o código para Editar e Salvar as alterações/Inclusões na tabela clientes

Private Sub mnueditaregistro_Click()
On Error GoTo Error

Text1(0).SetFocus

On Error GoTo 0

mnuEditaregistro_Exit:
Exit Sub

Error:
MsgBox Err.Description, vbExclamation, "Erro em [mnuEditaregistro]"

End Sub
Private Sub mnusalva_Click()

On Error GoTo Error

myRS("codigo") = "" & Txtcodigo.Text
myRS("nome") = "" & Text1(0).Text
myRS("endereco") = "" & Text1(1).Text
myRS("nascimento") = "" & Text1(2).Text
myRS.Update

MsgBox "Operação realizada com sucesso !", vbInformation, "Salvar Inclusão/Alteração"

MostraNumeroRegistro

On Error GoTo 0

mnusalva_Exit:
Exit Sub

Error:
MsgBox Err.Description, vbExclamation, "Erro em [mnuSalva]"
mnucancela_Click

End Sub
Código para editar registros. Observe que não usamos o método Edit da DAO. Código para Salvar alterações inclusões na tabela clientes usando o método Upadate da ADO

Agora o código  para navegar pelos registros usando os métodos movefirst, moveprevious, movelast e movenext da ADO. Cada código esta associado ao evento Click do botão de comando correspondente:

Private Sub cmdFirst_Click()

myRS.MoveFirst
Mostra_dados

End Sub
Private Sub cmdLast_Click()

myRS.MoveLast
Mostra_dados

End Sub
Vai para o primeiro registro  Vai para o último registro
Private Sub cmdNext_Click()

If Not myRS.EOF Then myRS.MoveNext

If myRS.EOF And myRS.RecordCount > 0 Then
   Beep
   myRS.MoveLast
End If

Mostra_dados

End Sub
Private Sub cmdPrevious_Click()

If Not myRS.BOF Then myRS.MovePrevious

If myRS.BOF And myRS.RecordCount > 0 Then
   Beep
   myRS.MoveFirst
End If

Mostra_dados

End Sub
Vai para o próximo registro Vai para o registro anterior

Finalmente o código para cancelar alterações/inclusões e para sair do projeto:

Private Sub mnucancela_Click()
On Error GoTo Error

myRS.CancelUpdate
cmdFirst_Click

On Error GoTo 0
mnucancela_Exit:
Exit Sub
Error:
MsgBox Err.Description, vbExclamation, "Erro em [mnucancela]"

End Sub
Private Sub mnusair_Click()

myRS.Close
myCon.Close
Set myCon = Nothing
Set myRS = Nothing
End


End Sub
Código para Cancelar alterações/inclusões usando o método CancelUpdate Código para Sair do sistema

Com isto acabamos por construir uma pequena aplicação onde podemos incluir/alterar/excluir registros de uma base de dados MySQL usando ADO.  Mais simples do que você pensava , não é mesmo ???

Obs: Ao apagar das luzes recebi uma dica do colega George L. Maluf que me indicou a possibilidade de usar um provedor OLEB(Projeto Collibri) para fazer a conexão com o MySQL.  No site http://www.mysql.com/downloads/os-win32.html faça o download dos arquivos MyOLEDB.exe ( 4,2 MB ) e MyOLEDB.chm (468 Kb - Ajuda). Ao descompactar o arquivo EXE você terá exemplos de conexão com o provedor usando ADO. (Nesta página há muitos utilitários e exemplos para o ambiente Windows.)

Nota: Um utilitário para você trabalhar com base de dados SQL é o MySQL - Front .  Basta você descompactar os arquivos para um diretório e criar um atalho na área de trabalho. Esta ferramenta sever para gerenciar um banco de dados MySQL. Tem diversas funções para criar, apagar e modificar tabelas e dados.Abaixo a tela de abertura para conexão e a tela principal.

Para fazer o download veja em : www.mysqlfront.de     É GRATIS .

Tela inicial para você efetuar a conexão com seu banco de dados MySQL.

Tela principal do MySQL-Front. 

Ficamos por aqui ...  

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti