Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carcleo

Classe DBConnect

Recommended Posts

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

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

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

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

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

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.