VB - Acessando MySQL com RDO
Lembra do RDO - Remote Data Objects ??? Ele foi uma alternativa a DAO antes da ADO ser lançada e se consolidar e funcionou como um , vamos dizer, tampão, visto que geralmente na migração do RDO para a ADO o impacto era menor. Os objetos RDO eram um boa opção para acesso a dados remotos, especificamente a servidores SQL visto que a DAO é uma tecnologia mais adequada para comunicação com bases ISAM (dbase, Paradox, Access, etc.)
Os objetos RDO suportam o uso de cursores e a utilização de stored procedures e apresentam a seguinte correlação com a tecnologia DAO:
DAO/Jet | RDO |
DBEngine | rdoEngine |
Error | rdoError |
Workspace | rdoEnvironment |
DataBase | rdoConnection |
TableDef | rodTable |
Recordset | rdoResultset |
Field | rdoColumn |
QueryDef | rdoQuery |
Parameter | rdoParameter |
Como podemos notar o RDO foi praticamente um precursor da tecnologia ADO.
Neste artigo eu ressuscito o RDO mostrando como podemos usá-lo para acessar uma base de dados MySQL mostrando as tabelas de uma base de dados selecionada e a seguir mostrando os dados da tabela.
Para acompanhar o artigo você vai precisar ter os seguintes itens instalados:
1- VB6 no seu último service pack - http://msdn.microsoft.com/vstudio/downloads/updates/sp/vs6/sp5/
2- MySQL - www.mysql.com
Vamos ao trabalho: Crie um novo projeto no Visual Basic do tipo Standard Exe e em seguida acesse o diálogo References no menu Project. Localize a referência a "Microsoft Remote Data Object 2.0" e marque-a adicionando-a ao projeto , conforme figura abaixo:
Verifique se você possui o MySQL iniciando o administrador MySQL. Abaixo a tela exemplo para versão 5.0:
A seguir inclua no formulário padrão os seguintes controles:
conforme a figura abaixo:
No início do formulário digite as seguintes declarações
Option
Explicit
Public WithEvents db As rdoConnection
A seguir no evento Click do botão de comando Conectar inclua o seguinte código:
Private
Sub btnconectar_Click() On Error GoTo trataerro Dim cadeiaConexao As String cadeiaConexao = "DRIVER={MySQL ODBC 3.51 Driver}; SERVER=" & servidor & "; DATABASE=" & cboBancodeDados & " ;PWD=" & password & "; UID=" & usuario & ";OPTION=3" Set db = New rdoConnection db.Connect = cadeiaConexao db.CursorDriver = rdUseServer db.EstablishConnection Exit Sub trataerro: MsgBox Err.Number & " " & Err.Description, vbCritical End Sub |
O código efetua a conexão com a base de dados informada no combobox usando o objeto RDO.
O evento db_Connect deve possui o seguinte código:
Private
Sub db_Connect(ByVal ErrorOccurred As Boolean) On Error GoTo trataerro Dim tabela As rdoTable Dim existeTabela As Boolean existeTabela = False trocaBotoes True For Each tabela In db.rdoTables tabelas.AddItem tabela.Name existeTabela = True Next If Not existeTabela Then MsgBox "O banco de dados esta vazio." btndesconectar_Click End If Exit Sub trataerro: MsgBox Err.Number & " " & Err.Description, vbCritical End Sub |
O código acima verifica se existem tabelas na base de dados e inclui o nome de cada tabela no respectivo ListBox.
Ao clicar em uma tabela queremos exibir os dados da mesma no outro ListBox para isto inclua o código abaixo no evento Click do ListBox tabelas:
Private
Sub tabelas_Click() On Error GoTo trataerro Dim tabela As String Dim consulta As New rdoQuery Dim resultados As rdoResultset Dim conteudo_linha As String Dim coluna As rdoColumn conteudo.Clear tabela = tabelas.List(tabelas.ListIndex) Set consulta.ActiveConnection = db consulta.SQL = "SELECT * FROM " & tabela & " WHERE 1" consulta.Execute Set resultados = consulta.OpenResultset While Not resultados.EOF conteudo_linha = "" For Each coluna In resultados.rdoColumns conteudo_linha = conteudo_linha & coluna.Name & "=" & resultados(coluna.Name) & "; " Next conteudo.AddItem conteudo_linha resultados.MoveNext Wend resultados.Close Set resultados = Nothing Exit Sub trataerro: MsgBox Err.Number & " " & Err.Description, vbCritical End Sub |
Usando uma consulta via objeto rdoQuery estou gerando um recordset com os dados obtidos e exibindo no ListBox:
No evento Unload estou efetuando o fechamento do banco de dados conforme código a seguir:
Private
Sub Form_Unload(Cancel As Integer) If btnconectar.Enabled = False Then db.Close End If End Sub |
Abaixo uma amostra do resultado obtido para o banco de dados escola que possui 3 tabelas: alunos, conceitos e cursos. A clicar na tabela alunos os dados são exibidos conforme figura:
Até o próximo artigo VB...
José Carlos Macoratti