Carcleo 4 Denunciar post Postado Outubro 24, 2008 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 Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Outubro 25, 2008 Gente, isso no Delphi é moleza mas em VB.Net ninguem responde? Para voces terem uma ideia, até um outro problema que eu tinha anterior a esse ninguem 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? Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Outubro 25, 2008 Cara Windows Appications não é minha área, ajuda no que posso e espero a contribuição de outros membros aqui também. Agora se ninguém respondeu, fazer o que. Pra comentar mais de uma linha ao mesmo tempo, mantenha o Control apertado, e pressione K e C. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Outubro 26, 2008 quintelab, desculpe-me se estou sendo chato ou até mesmo enjoado. Mas, pela tua resposta parece até que estou fazendo a pergunta só para você. Veja a resposta que você me deu: Cara Windows Appications não é minha área, ajuda no que posso e espero a contribuição de outros membros aqui também. Agora se ninguém respondeu, fazer o que?Pois é. A pergunta foi postada aos usuarios da comunidade Programação » Plataforma .NET » Windows Applications neste forum cadastrados. 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. Cara. Acho que, ou eu não estendi tua resposta ou voce não entendeu minha pergunta pois fiz o que você falou e não deu certo: Pra comentar mais de uma linha ao mesmo tempo, mantenha o Control apertado, e pressione K e C. 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? Compartilhar este post Link para o post Compartilhar em outros sites
PH_Nikit 0 Denunciar post Postado Outubro 26, 2008 Pow cara não sei se isso que você precisa ... mas dá uma olhada ai!!! O Código em VB eu não testei ... só coloquei em um tradutor de C# por isso não sei se vai funcionar direto mas o código em C# com certeza funciona. Esse código tá bem simples então vai de você incrementá-lo depois com novos métodos. VLW VB.NET: public Class Conexao Private conn As SqlConnection Private cmd As SqlCommand Private Sub open() Try conn = New SqlConnection("String de conexão") 'ex. Data Source=MyServer;Initial Catalog=Teste;Integrated Security=True conn.Open Catch As SqlException MessageBox.Show("Erro na conexão!") End Try End Sub Private Sub close() conn.Close End Sub Public Sub instrucao(ByVal s As String) Try open(); cmd = New SqlCommand(s, conn) cmd.ExecuteNonQuery close(); Catch As SqlException MessageBox.Show("Erro na conexão!") End Try End Sub Public Function queryDT(ByVal s As String) As DataSet open(); cmd = New SqlCommand(s, conn) cmd.CommandType = CommandType.Text Dim da As SqlDataAdapter = New SqlDataAdapter(cmd) Dim ds As DataSet = New DataSet da.Fill(ds) close(); Return ds End Function End Class C#: public class Conexao { private SqlConnection conn; private SqlCommand cmd; private void open() { try { conn = new SqlConnection("String de conexão"); //ex. Data Source=MyServer;Initial Catalog=Teste;Integrated Security=True conn.Open(); } catch (SqlException) { MessageBox.Show("Erro na conexão!"); } } private void close() { conn.Close(); } public void instrucao(string s) { try { open(); cmd = new SqlCommand(s, conn); cmd.ExecuteNonQuery(); close(); } catch (SqlException) { MessageBox.Show("Erro na conexão!"); } } public DataSet queryDT(string s) { open(); cmd = new SqlCommand(s, conn); cmd.CommandType = CommandType.Text; SqlDataAdapter da = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); da.Fill(ds); close(); return ds; } } Dentro do seu form: C#: Conexao con = new Conexao(); string query = "SELECT * FROM Test"; dataGridView1.DataSource = con.queryDT(query); //alimenta o datagrid //string s = "INSERT INTO Test (id, nome) VALUES ('" + txt2.Text + "','" + txt1.Text + "')"; //========================== //string s = "DELETE FROM Test WHERE (id = '" + txt2.Text + "')";......................................// Você pode usar qualquer um dos três //string s = "UPDATE Test SET nome = '" + txt1.Text + "'WHERE id = '" + txt2.Text + "'"; //========================== con.instrucao(s); Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Outubro 26, 2008 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 ClassClientes.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 Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Outubro 26, 2008 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 SubE agora, como faz isso? Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Outubro 27, 2008 Alguem se habilita? Será que a dúvuda foi posta em forum errado? Compartilhar este post Link para o post Compartilhar em outros sites