VB e MySQL - Incluindo, Atualizando e Excluindo dados


Neste artigo iremos criar um aplicativo para gerenciar os dados de uma base de dados do MySQL. Iremos mostrar como acessar , incluir , alterar além de criar banco de dados no MySQL.

O projeto irá possui dois formulários : frmconectar.frm e frmPrincipal.frm e um módulo : mMainMySQL.bas

Para testar este exemplo você deverá esta com o MySQL instalado e ativo conforme já visto em artigos anteriores.

Abra o VB e crie um novo projeto do tipo StandardEXE e no formulário padrão altere o seu nome para : frmconectar

Adicione um módulo ao seu projeto e de insira nele as seguintes linhas de código:

Option Explicit
Public gConexao As ADODB.Connection
Public SQL As String

- A seguir insira os controles : TextBox , comboBox , Frame e commandButton conforme a figura abaixo:

Acima temos o formulário em tempo de desenho e em tempo de execução. Nele o usuário irá informar o nome do Host , o usuário a senha e o nome do banco de dados que deseja conectar. Podrá também criar um novo banco de dados clicando no botão Novo e informando o nome do banco de dados conforme acima. A rotina que cria o banco de dados é dada a seguir :

Sub CriaBancoDados()
Dim pConexao As ADODB.Connection
Dim strTemp As String

On Error GoTo trata_erro

On Error Resume Next
Set pConexao = New ADODB.Connection
pConexao.Open "DRIVER={MySQL ODBC 3.51 Driver};user=" & txtNomeUsuario & ";password=" & txtPassword & ";server=" & txtHost & ";option=20499"

If pConexao.State = 1 Then
     strTemp = InputBox("Informe o nome do novo Banco de dados :", "Cria Banco de Dados")
     If Trim$(strTemp) <> "" Then
         pConexao.Execute "Create Database " & Trim$(strTemp), , adExecuteNoRecords
         RefazerListaDB
         cmbBancoDados = strTemp
         cmbBancoDados.SetFocus
     End If
Else
    MsgBox "Não foi possível estabelecer comunicação com o Servidor. Verifique seu Host e sua chave/Senha.", vbCritical, "Impossível criar Banco de dados."
End If

Exit Sub

trata_erro:
MsgBox Err.Number & " " & Err.Description, vbCritical, "Erro durante a criação do banco de dados."
End Sub
A rotina RefazerListaDB verifica as tabelas disponíveis no banco de dados atual e as exibe na combo. O código é o seguinte:
Sub RefazerListaDB()

Dim pConexao As ADODB.Connection
Dim pRs As ADODB.Recordset
Dim strTemp As String
Dim TempArray() As String
Dim i As Long
Dim ValorAntigo As String
Dim ValorAntigoNaLista As Boolean

On Error Resume Next

ValorAntigo = cmbBancoDados.Text
cmbBancoDados.Clear
ValorAntigoNaLista = False

Set pConexao = New ADODB.Connection
pConexao.Open "DRIVER={MySQL ODBC 3.51 Driver};user=" & txtNomeUsuario & ";password=" & txtPassword & ";server=" & txtHost & ";option=20499"

If pConexao.State = 1 Then
       Set pRs = New ADODB.Recordset
       pRs.Open " Databases", pConexao, adOpenForwardOnly, adLockReadOnly, adCmdText
       If Not pRs.EOF Then
           strTemp = Trim$(pRs.GetString(adClipString, , "", vbCrLf))

        If strTemp <> "" Then
           TempArray = Split(strTemp, vbCrLf)
           For i = 0 To UBound(TempArray)
                If Trim$(TempArray(i)) <> "" And LCase$(Trim$(TempArray(i))) <> "mysql" And LCase$(Trim$(TempArray(i))) <> "temp" Then
                     cmbBancoDados.AddItem Trim$(TempArray(i))
                     If Trim$(TempArray(i)) = ValorAntigo Then ValorAntigoNaLista = True
                End If
           Next i
        End If
     End If
End If

If ValorAntigoNaLista Then cmbBancoDados.Text = ValorAntigo Else cmbBancoDados.Text = ""

End Sub
 
Após criar o banco de dados podemos criar a tabela Anotacoes e inserir alguns registros nela.O código é dado a seguir:
Sub CriaTabelas()
Dim pRs As ADODB.Recordset

SQL = "CREATE TABLE IF NOT EXISTS `Anotacoes` (" _
         & "`Nome` varchar(100) NOT NULL default '', " _
         & "`Local` varchar(100) NOT NULL default '', " _
         & "`Endereco` varchar(100) NOT NULL default '', " _
         & "`Observacao` text NOT NULL, " _
         & "PRIMARY KEY (`Nome`) " _
         & ") TYPE=MyISAM"

gConexao.Execute SQL, , adExecuteNoRecords

Set pRs = New ADODB.Recordset
SQL = "Select Nome, Local, Endereco, Observacao From Anotacoes "
pRs.Open SQL, gConexao, adOpenStatic, adLockOptimistic, adCmdText
If pRs.EOF Then
     With pRs
        .AddNew
        .Fields("Nome") = "Jose C. Macoratti"
        .Fields("Local") = "Brasilia - DF"
        .Fields("Endereco") = "Av. do Exercito , 12345"
        .Fields("Observacao") = "Visite o site www.macoratti.net"
        .Update

        .AddNew
        .Fields("Nome") = "Jessica Naara Lang"
        .Fields("Local") = "São Paulo - SP"
       .Fields("Endereco") = "Al. Princesa Isabel , 120 - 4o. Andar"
        .Fields("Observacao") = "Estou esperando o meu presente."
        .Update

        .AddNew
        .Fields("Nome") = "Janice Rachel"
        .Fields("Local") = "Rio Grande do Sul - RS"
        .Fields("Endereco") = "Av. 12 de Janeiro , 754 "
        .Fields("Observacao") = "Não suporto mais este garoto."
        .Update

        .AddNew
        .Fields("Nome") = "Miriam S. Estela"
        .Fields("Local") = "Rio de Janeiro - RJ"
        .Fields("Endereco") = "R. dos Inconfidentes , 348"
        .Fields("Observacao") = "Esta bem legal ficar aqui sem fazer nada."
        .Update

        .AddNew
        .Fields("Nome") = "Jefferson A. Lara"
        .Fields("Local") = "Minas Gerais - MG"
        .Fields("Endereco") = "Av. do Aeroporto , 1209"
        .Fields("Observacao") = "Detesto fazer lição de casa."
        .Update

End With
End If
pRs.Close
Set pRs = Nothing
End Sub

Neste código estou usando os métodos ADO AddNew/Update para incluir novos registros no banco de dados

Uma rotina interessente é a rotina que faz a conexão com o MySQL mostrada abaixo:

Private Sub cmdConnect_Click()

On Error GoTo trata_erro

If Trim$(cmbBancoDados) = "" Then
    MsgBox "Você precisa selecionar um banco de dados.", vbCritical, "Informação Inválida"
   Exit Sub
End If

Me.MousePointer = vbHourglass

Set gConexao = New ADODB.Connection
gConexao.ConnectionTimeout = 60
gConexao.CommandTimeout = 400
gConexao.CursorLocation = adUseClient
gConexao.Open "DRIVER={MySQL ODBC 3.51 Driver};" _
                      & "user=" & txtNomeUsuario _
                      & ";password=" & txtPassword _
                      & ";database=" & cmbBancoDados _
                      & ";server=" & txtHost _
                      & ";option=" & (1 + 2 + 8 + 32 + 2048 + 16384)

Me.MousePointer = vbNormal
If gConexao.State = 1 Then
     SaveSetting App.Title, "Settings", "txtHost", txtHost
     SaveSetting App.Title, "Settings", "txtNomeUsuario", txtNomeUsuario
    SaveSetting App.Title, "Settings", "cmbBancoDados", cmbBancoDados
     CriaTabelas
     frmPrincipal.Show vbModal
     Unload Me
Else
   MsgBox "Não foi possível estabelecer a conexão. Verifique as configurações e tente novamente.", vbCritical, "Erro durante a conexão..."
End If

Exit Sub

trata_erro:
MsgBox Err.Number & " " & Err.Description, vbCritical, "Erro durante a conexão..."
End Sub

Após efetuar a conexão o formulário principal será exibido com os dados da tabela. Para selecionar um registro basta clicar na coluna Nome e o mesmo será exibido e estará pronto para ser gerenciado.

Estou usando um MSFlexGrid para exibir os dados. Ao clicar em um registro somente a coluna nome será usada para pesquisar os registros e exibir os dados nas caixas de texto. Agora você pode alterar, Deletar e Cancelar qualquer registro. Para incluir um registro basta você digitar os dados e clicar em Salvar.

Este formulário não possui nenhuma novidade em termos de código que você já não tenha visto no site.

Melhor do que ficar falando e disponibilizar o projeto pronto para que você mesmo faça os teste. Pegue aqui -> vbmysql.zip

Eu sei , é apenas Visual Basic , mas eu gosto !


José Carlos Macoratti