Ir para conteúdo
Fórum Script Brasil
  • 0

Classe DBConnect


Carlos Rocha

Pergunta

Bom, no Delphi, o nome da "coisa" que quero é Data Module e em VB me parece ser Classe DBConnect.

Bom, eu criei um aplicação com Visual Basic 2008 e Mysql com acesso apenas pela Mysql.data.dll e o resto tudo no código.

Nem mesmo a paleta do MySql estou usando.

Criei um projeto no VB2008 e dei o nome de Vendas ao projeto e criei um formulario e o que chamei de menu.vb e coloquei ele como pai (isMDIContainer=True), puz tb uma classe DBContainer.vb (ainda não preenchi com nada) e um formulario dew cadastro de Clientes.

Só que meu projeto não terá apenas um formulario de cadastro. Dai, surge a nescessidade de criar um datamodule ou DBConnection para colocar a conexão com o banco lá e, estando nos forms de cadastro, fazer uma chamada ao DBConection.

Acontece, que li e re-li alguns ewxemplos que tem ai na internet mas não consegui nem entender nem muito menis adaptar ao meu código.

Se alguém puder me ajudar:

Eis aí o código que tenho agora:

Clientes.vb

Imports MySql.Data.MySqlClient
Public Class Clientes
    Dim dt As DataTable
    Dim da As MySqlDataAdapter
    Dim connBD As MySqlConnection
    Dim ds As DataSet
    Dim registro As Integer
    Dim strcon As String
    Public Sub habilita()
        For Each c As Control In Me.grpClientes.Controls
            If TypeOf c Is TextBox Then
                c.Enabled = True
            End If
        Next
    End Sub
    Public Sub desabilita()
        For Each c As Control In Me.grpClientes.Controls
            If TypeOf c Is TextBox Then
                c.Enabled = False
            End If
        Next
    End Sub
    Private Sub Clientes_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        strcon = "server=localhost;user id=root;password=;database=vendas"
        Dim strSQL As String = "Select * from clientes order by clienteID"
        Try
            'cria um dataset , preenche e carrega a tabela clientes
            Dim conBD As New MySqlConnection(strcon)
            ds = New DataSet
            da = New MySqlDataAdapter(strSQL, strcon)
            da.Fill(ds, "Clientes")
            dt = ds.Tables("Clientes")
            desabilita()
            If dt.Rows.Count > 0 Then
                registro = 0
                Primeiro_Click(Nothing, Nothing)
            Else
                registro = -1
                Atualizar.Enabled = False
                Eliminar.Enabled = False
            End If
        Catch ex As Exception
            MessageBox.Show("Erro: " & ex.Message, "Sem conexão", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End Try
    End Sub

    Private Sub Primeiro_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Primeiro.Click
        registro = 0
        exibirDados(registro)
    End Sub

    Private Sub Anterior_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Anterior.Click
        registro = registro - 1
        If registro < 0 Then registro = 0
        exibirDados(registro)
    End Sub

    Private Sub Proximo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Proximo.Click
        Dim i As Integer = dt.Rows.Count - 1
        registro = registro + 1
        If registro > i Then registro = i
        exibirDados(registro)
    End Sub

    Private Sub Ultimo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Ultimo.Click
        registro = dt.Rows.Count - 1
        exibirDados(registro)
    End Sub
    Private Sub atribuirDados(ByVal dr As DataRow)
        'dr("clienteID") = Codigo.Text
        dr("Nome") = Nome.Text
        dr("Endereco") = Endereco.Text
        dr("Email") = Email.Text
    End Sub

    Private Sub exibirDados(ByVal m As Integer)
        Dim i As Integer = dt.Rows.Count - 1
        If m < 0 OrElse i < 0 Then Exit Sub
        Dim dr As DataRow = dt.Rows(m)

        Codigo.Text = dr("clienteID")
        Nome.Text = dr("Nome")
        Endereco.Text = dr("endereco")
        Email.Text = dr("Email")

        Atualizar.Enabled = True
        Eliminar.Enabled = True
    End Sub

    Private Sub Novo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Novo.Click
        If Novo.Text = "Novo" Then
            For Each c As Control In Me.grpClientes.Controls
                If TypeOf c Is TextBox Then
                    c.Text = ""
                End If
            Next
            Atualizar.Enabled = False
            Eliminar.Enabled = False
            Encerrar.Text = "Cancela"
            Novo.Text = "Incluir"
            Nome.Focus()
            habilita()
            Codigo.Enabled = False
        ElseIf Novo.Text = "Incluir" Then
            Dim dr As DataRow = dt.NewRow
            incluirRegistro(dr)
            Novo.Text = "Novo"
            Encerrar.Text = "Encerrar"
            Atualizar.Enabled = True
            Eliminar.Enabled = True
            desabilita()
        End If
    End Sub
    Private Sub incluirRegistro(ByVal dr As DataRow)

        Dim sqlInclui As String

        Dim reg As Integer
        Dim sqlComando As MySqlCommand

        atribuirDados(dr)
        sqlInclui = "INSERT INTO Clientes (Nome,Endereco,Email)VALUES ('" & Nome.Text & "','" & Endereco.Text & "','" & Email.Text & "')"

        connBD = New MySqlConnection(strcon)
        sqlComando = New MySqlCommand(sqlInclui, connBD)
        da.InsertCommand = sqlComando

        Try
            connBD.Open()
            reg = sqlComando.ExecuteNonQuery
            If reg > 0 Then
                MsgBox("Incluido com sucesso.")
                da.Update(ds, "Clientes")
                ds.Tables("Clientes").Reset()
                da.Fill(ds, "Clientes")
                dt = ds.Tables("Clientes")
            End If
        Catch ex As Exception
            MessageBox.Show("Erro : " & vbCrLf & ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            connBD.Close()
        End Try

    End Sub

    Private Sub Atualizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Atualizar.Click
        If Atualizar.Text = "Atualizar" Then
            Novo.Enabled = False
            Eliminar.Enabled = False
            Encerrar.Text = "Cancela"
            Atualizar.Text = "Salvar Alteração"
            Nome.Focus()
            habilita()
            Codigo.Enabled = False
        ElseIf Atualizar.Text = "Salvar Alteração" Then
            Codigo.Enabled = False
            If registro < 0 OrElse registro > dt.Rows.Count - 1 Then Exit Sub
            Dim dr As DataRow = dt.Rows(registro)
            atualizarRegistro(dr)
            Atualizar.Text = "Atualizar"
            Encerrar.Text = "Encerrar"
            Novo.Enabled = True
            Eliminar.Enabled = True
            desabilita()
        End If
    End Sub
    Private Sub atualizarRegistro(ByVal dr As DataRow)
        '    Private Sub Atualizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Atualizar.Click
        Dim sqlAltera As String
        Dim reg As Integer
        Dim sqlComando As MySqlCommand

        atribuirDados(dr)

        sqlAltera = "UPDATE Clientes SET Nome = '" & Nome.Text & "',Endereco= '" & Endereco.Text & "',Email = '" & Email.Text & "' where clienteID='" & dr("clienteID") & "'"

        connBD = New MySqlConnection(strcon)
        sqlComando = New MySqlCommand(sqlAltera, connBD)
        'define o sql para atualizar os dados
        da.UpdateCommand = sqlComando

        Try
            connBD.Open()
            reg = sqlComando.ExecuteNonQuery

            If reg > 0 Then
                MsgBox("Registro alterado com sucesso.")
                da.Update(ds, "Clientes")
                da.Fill(ds, "Clientes")
                dt = ds.Tables("Clientes")
            End If
        Catch ex As Exception
            MessageBox.Show("Erro : " & vbCrLf & ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            connBD.Close()
        End Try
    End Sub


    Private Sub Eliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Eliminar.Click
        If registro < 0 OrElse registro > dt.Rows.Count - 1 Then
            Exit Sub
        Else
            If MessageBox.Show("Deseja Excluir esse registro", "Excluir", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
                Dim codigo As Integer
                Dim dr As DataRow = dt.Rows(registro)
                codigo = dr("clienteID")
                codigo = CType(codigo.ToString, Integer)
                eliminarRegistro(codigo)
            End If
        End If
    End Sub

    Private Sub eliminarRegistro(ByVal codigo As Integer)
        Dim sqlElimina As String
        Dim reg As Integer
        Dim sqlComando As MySqlCommand

        sqlElimina = "DELETE FROM Clientes WHERE clienteID = " & codigo
        connBD = New MySqlConnection(strcon)
        sqlComando = New MySqlCommand(sqlElimina, connBD)
        da.DeleteCommand = sqlComando

        Try
            connBD.Open()
            reg = sqlComando.ExecuteNonQuery
            If reg > 0 Then
                MsgBox("Registro Excluído com sucesso.")
                da.Update(ds, "Clientes")
                ds.Tables("Clientes").Reset()
                da.Fill(ds, "Clientes")
                dt = ds.Tables("Clientes")
            End If
        Catch ex As Exception
            MessageBox.Show("Erro : " & vbCrLf & ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            connBD.Close()
        End Try
    End Sub

    Private Sub Encerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Encerrar.Click
        If Encerrar.Text = "Encerrar" Then
            If MessageBox.Show("Deseja encerrar a aplicação", "Encerrar", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
                If ds.HasChanges Then
                    ds.AcceptChanges()
                End If
                Me.Close()
            End If
        ElseIf Encerrar.Text = "Cancela" Then
            desabilita()
            Encerrar.Text = "Encerrar"
            Atualizar.Enabled = True
            Eliminar.Enabled = True
            Novo.Text = "Novo"
            Novo.Enabled = True
            Atualizar.Text = "Atualizar"
            Anterior_Click(Nothing, Nothing)
        End If
    End Sub
End Class
E o desenho do form: http://www.carcleo.com/Clientes.vb.jpg Menu.vb (só tem o menu mesmo com uma chamada só para o Cadastro de clientes
Public Class Menu

    Private Sub Menu_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For Each ctl As Control In Me.Controls
            If TypeOf ctl Is MdiClient Then
                ctl.BackColor = Me.BackColor
            End If
        Next ctl
    End Sub

    Private Sub ClientesToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ClientesToolStripMenuItem.Click
        My.Forms.Clientes.MdiParent = Me
        My.Forms.Clientes.Show()
    End Sub
End Class

E o projeto para download esta em

http://www.carcleo.com/Vendas.zip

Classe DBConnect

Como adaptar a esse código?

Se aguem puder ajudar

Editado por Carlos Rocha
Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Gente, isso no Delphi é moleza mas em VB.Net ninguém responde?

Para voces terem uma ideia, até um outro problema que eu tinha anterior a esse ninguém respondeu:

Tenho o form pai e os forms filhos, todos abrindo com maximizados na proprioedade porem só o Pai abre maximizado e os filhos abrem restaurados. Por que?

Outro problema que to enfentando é com comentarios.

Para comentar 1 linha, coloco o ' e linha comentada.

Agora, e para comentar varias linhas ao mesmo tempo, tenho que por um ' em todas as linhas?

Link para o comentário
Compartilhar em outros sites

  • 0

Pessoal, desculpe-me se estou sendo chato ou até mesmo enjoado. Mas, ainda não obtive reposta as minhas duvidas.

Minhas duvidas não são duvidas complexas (avançadas) e sim duividas de iniciantes (básicas).

Não sei se estou postando a dúvida no fórum correto.

Eu quero é comentar um bloco de texto.

Por exemplo, um comentário que gastaria umas 5 linhas ou um bloco de código de 20 linhas.

O que eu to querendo é por um sinal de comentário no inicio da primeira linha e outro sinal de comentário no final da ultima linha.

No Delphi comentário de uma linha só é assim:

// comentário de uma linha só
No VB comentário de uma linha só é assim:
' comentário de uma linha só
No Delphi comentário de um bloco de linhas é assim:
{
..
bloco

de

comentários

..
}
E no VB, comentário de um bloco de linhas como seria?:
???????????????

E, com relação ao código, eu quero criar uma classe de conexão com o banco MySql só para conectar o banco de dados sem conectar a tabela.

La no formulario de cadastro ou pesquiza, faria mensão à classe de conexão com o banco e faria a conexão com a tabela.

Coisa basica mesmo só que estou comessando agora em VB.Net e ainda não conesgui nada que eu consiga entender nas minhas pesquisas na internte. Por enquanto é só isso que preciso.

Fui mais claro agora?

Editado por Carlos Rocha
Link para o comentário
Compartilhar em outros sites

  • 0

Acho que consegui e jaja posto aqui.

Por enquanto + uma dúvida:

Criei uma classe cham,ada DBConnection. Quero, no formulario de cadastro de clientes fazer uso de uma variavel da classe DBConection como faço? Não quero acessar à função alguma só a propriedade stringconnection da variavel de conexão para preencher uma função de iserrt que esta lego abaixo desse código. Como faço?

DBConnection.vb

Imports MySql.Data.MySqlClient
'Comentando varias linhas Ctrl + K + C
'Descomentando varias linhas Ctrl + K + U
Public Class DBConnection
    Dim mSqlConexao As MySqlConnection
    Dim cmd As MySqlCommand = New MySqlCommand()
    Public Sub New()
        mSqlConexao = New MySqlConnection()
    End Sub

    Public Sub OpenConnection()
        Dim strConnString As String = "server=localhost;userid=root;password=;database=Vendas"

        If mSqlConexao Is Nothing Or mSqlConexao.State = ConnectionState.Broken Or mSqlConexao.State = ConnectionState.Closed Then
            mSqlConexao = New MySqlConnection()
            mSqlConexao.ConnectionString = strConnString
            mSqlConexao.Open()
        End If

    End Sub

    Public Sub CloseConnection()
        If mSqlConexao.State = ConnectionState.Open Then
            mSqlConexao.Close()
            mSqlConexao.Dispose()
            mSqlConexao = Nothing
        End If
    End Sub

    Public Function ExecuteDS(ByVal sql As String, ByRef tabela As String) As DataSet
        Dim ds As New DataSet
        Dim da As MySqlDataAdapter = New MySqlDataAdapter()

        Try
            OpenConnection()
            cmd.CommandType = CommandType.Text
            cmd.CommandText = sql
            cmd.Connection = mSqlConexao
            da.SelectCommand = cmd
            da.Fill(ds, tabela)
            da.Dispose()
            Return ds
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
        Return ds
    End Function

End Class
Clientes.v
...
  Private Sub incluirRegistro(ByVal dr As DataRow)

        Dim sqlInclui As String

        Dim reg As Integer
        Dim sqlComando As MySqlCommand

        atribuirDados(dr)
        sqlInclui = "INSERT INTO Clientes (Nome,Endereco,Email)VALUES ('" & Nome.Text & "','" & Endereco.Text & "','" & Email.Text & "')"
        Dim connBD As MySqlConnection = New MySqlConnection
        sqlComando = New MySqlCommand(sqlInclui, connBD)  <<<<<<<<<<<--- aqui que eu preciso
        da.InsertCommand = sqlComando

        Try
            connBD.Open()
            reg = sqlComando.ExecuteNonQuery
            If reg > 0 Then
                MsgBox("Incluido com sucesso.")
                da.Update(ds, tabela)
                ds.Tables(tabela).Reset()
                da.Fill(ds, tabela)
                dt = ds.Tables(tabela)
            End If
        Catch ex As Exception
            MessageBox.Show("Erro : " & vbCrLf & ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            connBD.Close()
        End Try

    End Sub
...

Ta dando o seguinte erro:

Object reference not set to an instance of an object.

parece que aqui a conexão não esta sendo feita

Editado por Carlos Rocha
Link para o comentário
Compartilhar em outros sites

  • 0

Bom, to indo bem mas ainda preciso da ajuda de voces.

Seguinte.

Criei a Classe dbconection com o código abaixo.

Imports MySql.Data.MySqlClient
'Comentando varias linhas Ctrl + K + C
'Descomentando varias linhas Ctrl + K + U
Public Class DBConnection
    Dim Conexao As MySqlConnection
    Dim cmd As MySqlCommand = New MySqlCommand()
    Public Sub New()
        Conexao = New MySqlConnection()
    End Sub

    Public Sub OpenConnection()
        Dim strConnString As String = "server=localhost;userid=root;password=;database=Vendas"

        If Conexao Is Nothing Or Conexao.State = ConnectionState.Broken Or Conexao.State = ConnectionState.Closed Then
            Conexao = New MySqlConnection()
            Conexao.ConnectionString = strConnString
            Conexao.Open()
        End If

    End Sub
...
Agora, preciso adaptar o código do cadastro de clientes para pegar a variavel conexao que esta na classe dbconection assim:
Private Sub incluirRegistro(ByVal dr As DataRow)
        'Dim Conexao As MySqlConnection
        'Dim comando As MySqlCommand
        'Conexao = New MySqlConnection("server=localhost;uid=root;pwd=;database=vendas")
        'Conexao.Open()
        'comando = New MySqlCommand("INSERT INTO Clientes (Nome,Endereco,Email)VALUES ('" & Nome.Text & "','" & Endereco.Text & "','" & Email.Text & "')", Conexao)
        'comando.ExecuteNonQuery()
        'Conexao.Close()
        ' Dim Conexao As MySqlConnection
        Dim comando As MySqlCommand
        Conexao = New MySqlConnection("server=localhost;uid=root;pwd=;database=vendas")
        Conexao.Open()
        comando = New MySqlCommand("INSERT INTO Clientes (Nome,Endereco,Email)VALUES ('" & Nome.Text & "','" & Endereco.Text & "','" & Email.Text & "')", Conexao)
        comando.ExecuteNonQuery()
        Conexao.Close()
    End Sub

E agora, como faz isso?

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...