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:
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: