Ir para conteúdo

POWERED BY:

Arquivado

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

Carcleo

Tabelas no Dataset. Como fazer?

Recommended Posts

Tabelas no Dataset. Como fazer?

 

Preciso criar um dataset via código mas não vou usar tabelas do MySql nele.

Quero criar tabelas dinamicas nele.

Se eu colocar uma ferramenta Dataset da tollbox no Form, tem a propriedade Tables onde crio as tabelas do dataset la.

Como faço via código esse dataset e as tabelas dele?

Nesse código tenho um, funçao que retorna um dataset:

Como inserir uma tabela cientes com seus fileds ID e Nome nele?

 

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 = Conexao

da.SelectCommand = cmd

da.Fill(ds, tabela)

dt = ds.Tables(tabela)

da.Dispose()

Return ds

Catch ex As Exception

MsgBox(ex.Message)

End Try

Return ds

End Function

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sabe, descobri uma coisa.

Quando no banco vai uma linha em branco, essa linha é última linha do datagridview que sempre esta vazia.

Dessa forma, é mais prudente enviar os dados para uma tabela temporaria e dela para o banco.

Acontece que estou tendo dois problemas dessa forma.

Uma na hora de inserir registros e duas na hora de editar pedidos.

O problema da edição é que, quando salvo da Ok mas quando salvo outro pedido sem antes fechar e abrir o forme da um erro dizendo que não ha linha na posição tal e limpa a tabela.

eis o código:

E na hora de inmserir um, segundo pedido, da erro de indice:

Imports MySql.Data.MySqlClient
Public Class Pedidos
	'INICIO DAS DECLARAÇÕES DAS VARIAVEIS GLOBAIS
	Dim accDb As New DBConnection
	Dim registrocliente As Integer
	Dim registroproduto As Integer
	Dim registroitem As Integer
	Dim registropedido As Integer
	Dim registropedidos As Integer
	Dim I As Integer = 0
	Dim O As Integer = 0
	Dim W As Integer = 0
	Dim Proximopedido As New Integer
	Dim ds As DataSet = Nothing
	Dim ds_itens As DataSet = Nothing
	Dim ds_itens_temp As DataSet = Nothing
	Dim dt As DataTable
	Dim dr As DataRow
	Dim TabelaClientes As String = "clientes"
	Dim TabelaProdutos As String = "produtos"
	Dim TabelaPedidos As String = "pedidos"
	Dim TabelaDetalhesPedidos As String = "detalhespedidos"

	'FIM DAS DECLARAÇÕES DAS VARIAVEIS GLOBAIS
	''''''''''''''''''''''''''''''''''''''''''
	'INICIO DO BLOCO DE FUNÇÕES
	Private Sub exibirDados(ByVal m As Integer)
		Dim i As Integer = dt.Rows.Count - 1
		If m < 0 OrElse i < 0 Then Exit Sub
		dr = dt.Rows(m)
		LabelCodigoPed.Visible = True
		codigoped.Visible = True
		codigoped.Text = dr("pedidoID")
		codigocli.Text = dr("clienteID")
		cliente.Text = dr("nome")
		data.Text = dr("data")
	End Sub
	Private Sub atribuirDados(ByVal dr As DataRow)
		dr("data") = data.Text
	End Sub
	Public Sub CarregaPagina()
		Dim sqlpedidos As String = "select p.pedidoID, p.clienteID, p.ativo, p.data, c.nome as nome from  pedidos p inner join clientes c ON  p.clienteID = c.clienteID  where p.ativo='S' order by pedidoID"
		ds = accDb.ExecuteDS(sqlpedidos, TabelaPedidos)
		dt = ds.Tables(tabelapedidos)
		registropedidos = dt.Rows.Count - 1
		' com primarykey
		dt.PrimaryKey = New DataColumn() {dt.Columns(0)}
		dr = dt.Rows.Find(registropedidos)
		registropedidos = dt.Rows.IndexOf(dr)
		' com primarykey
		desabilita()
		If dt.Rows.Count = 0 Then
			Primeiro.Enabled = False
			Anterior.Enabled = False
			Proximo.Enabled = False
			Ultimo.Enabled = False
			Atualizar.Enabled = False
			Eliminar.Enabled = False
		End If
		If dt.Rows.Count > 0 Then
			registropedidos = 0
			Primeiro_Click(Nothing, Nothing)
		Else
			registropedidos = -1
		End If
	End Sub
	Private Sub listaitens()
		'carrega ítens pedidos
		Dim sqlitens As String = "Select * from " & TabelaDetalhesPedidos & " where pedidoID=" & dr("pedidoID")
		ds_itens = accDb.ExecuteDS(sqlitens, TabelaDetalhesPedidos)
		DGWPedidos.DataSource = ds_itens.Tables(0).DefaultView
		mostracolunas()
		total.Text = 0.0
		For Each linha As DataGridViewRow In DGWPedidos.Rows
			total.Text += linha.Cells(6).Value
			total.Text = FormatCurrency(total.Text, "0.00")
		Next
	End Sub
	Public Sub entrega_item_item()
		Dim Sqlitens As String = "Select * from detalhespedidos where pedidoID=" & codigoped.Text
		ds_itens_temp = accDb.ExecuteDSTEMP(Sqlitens)
		For Each linha As DataRow In ds_itens.Tables(0).Rows
			ds_itens_temp.Tables(0).Rows.Add(linha(0), linha(1), linha(2), linha(3), linha(4), linha(5), linha(6))
		Next linha
	End Sub
	Public Sub desabilita()
		For Each c As Control In Me.gritens.Controls
			If TypeOf c Is TextBox OrElse TypeOf c Is Button Then
				c.Enabled = False
			End If
		Next
		For Each c As Control In Me.grpitens.Controls
			If TypeOf c Is TextBox OrElse TypeOf c Is Button Then
				c.Enabled = False
			End If
		Next
	End Sub
	Public Sub habilita()
		For Each c As Control In Me.gritens.Controls
			If TypeOf c Is Button OrElse TypeOf c Is DataGridView Then
				c.Enabled = True
			End If
		Next
		For Each c As Control In Me.grpitens.Controls
			If TypeOf c Is Button OrElse TypeOf c Is DataGridView Then
				c.Enabled = True
			End If
		Next
	End Sub
	Public Sub limpacampos()
		For Each c As Control In Me.grpitens.Controls
			If TypeOf c Is TextBox Then
				c.Text = ""
			End If
		Next
	End Sub
	Public Sub limpagrid()
		If DGWPedidos.DataSource IsNot Nothing Then
			DGWPedidos.DataSource = Nothing
			refazer_dgw()
		Else
			DGWPedidos.Rows.Clear()
			refazer_dgw()
		End If
	End Sub
	Private Sub mostracolunas()
		DGWPedidos.Columns.Item(0).HeaderText = "CODIGO PEDIDO"
		DGWPedidos.Columns.Item(1).HeaderText = "CODIGO PRODUTO"
		DGWPedidos.Columns.Item(2).HeaderText = "TIPO UNIDADE"
		DGWPedidos.Columns.Item(3).HeaderText = "DESCRIÇÃO"
		DGWPedidos.Columns.Item(4).HeaderText = "PREÇO UNITÁRIO"
		DGWPedidos.Columns.Item(5).HeaderText = "QTDE"
		DGWPedidos.Columns.Item(6).HeaderText = "SUBTOTAL"
	End Sub
	Public Sub ProximoRegistro()
		Dim sqlUltimoIDPedido As String = "select max(pedidoID) from " & TabelaPedidos & " order by pedidoID"
		Dim dsUltimoIDPedido As DataSet = accDb.ExecuteDS(sqlUltimoIDPedido, TabelaPedidos)
		Dim drUltimoIDPedido As DataRow

		If dsUltimoIDPedido.Tables(0).Rows.Count = 0 Then
			Proximopedido = 1
		Else
			For Each drUltimoIDPedido In dsUltimoIDPedido.Tables(TabelaPedidos).Rows
				If IsDBNull(drUltimoIDPedido.Item(0)) Then
					Proximopedido = 1
				Else
					Proximopedido = drUltimoIDPedido.Item(0) + 1
				End If
			Next drUltimoIDPedido
		End If
	End Sub
	Public Sub refazer_dgw()
		If DGWPedidos.Columns.Count = 0 Then
			DGWPedidos.AutoGenerateColumns = False
			Dim txt1 As New DataGridViewTextBoxColumn()
			Dim txt2 As New DataGridViewTextBoxColumn()
			Dim txt3 As New DataGridViewTextBoxColumn()
			Dim txt4 As New DataGridViewTextBoxColumn()
			Dim txt5 As New DataGridViewTextBoxColumn()
			Dim txt6 As New DataGridViewTextBoxColumn()
			Dim txt7 As New DataGridViewTextBoxColumn()
			DGWPedidos.SelectionMode = DataGridViewSelectionMode.FullRowSelect
			txt1.HeaderText = "CODIGO PEDIDO"
			txt2.HeaderText = "CODIGO PRODUTO"
			txt3.HeaderText = "TIPO UNIDADE"
			txt4.HeaderText = "DESCRIÇÃO"
			txt5.HeaderText = "PREÇO UNITÁRIO"
			txt6.HeaderText = "QTDE"
			txt7.HeaderText = "SUBTOTAL"

			txt1.DataPropertyName = "pedidoID"
			txt2.DataPropertyName = "produtoID"
			txt3.DataPropertyName = "unidade"
			txt4.DataPropertyName = "descricao"
			txt5.DataPropertyName = "preco"
			txt6.DataPropertyName = "quantidade"
			txt7.DataPropertyName = "subtotal"

			DGWPedidos.Columns.Add(txt1)
			DGWPedidos.Columns.Add(txt2)
			DGWPedidos.Columns.Add(txt3)
			DGWPedidos.Columns.Add(txt4)
			DGWPedidos.Columns.Add(txt5)
			DGWPedidos.Columns.Add(txt6)
			DGWPedidos.Columns.Add(txt7)
		End If
	End Sub
	Private Sub incluirRegistro()
		Dim sqlpedidos As String = "INSERT INTO " & TabelaPedidos & " (clienteID,ativo,data)VALUES ('" & codigocli.Text & "','S','" & Format(Date.Today, "yyyy-MM-dd") & "')"
		Dim ds_pedidos As DataSet = accDb.ExecuteDS(sqlpedidos, TabelaPedidos)
		For Each linha As DataGridViewRow In DGWPedidos.Rows
			Dim sqlitens As String = "INSERT INTO " & TabelaDetalhesPedidos & " (pedidoID,produtoID,unidade,descricao,preco,quantidade,subtotal) VALUES ('" & DGWPedidos.Rows(I).Cells(0).Value & "','" & DGWPedidos.Rows(I).Cells(1).Value & "','" & DGWPedidos.Rows(I).Cells(2).Value & "','" & DGWPedidos.Rows(I).Cells(3).Value & "','" & DGWPedidos.Rows(I).Cells(4).Value & "','" & DGWPedidos.Rows(I).Cells(5).Value & "','" & DGWPedidos.Rows(I).Cells(6).Value & "')"
			accDb.ExecuteDS(sqlitens, TabelaDetalhesPedidos)
			I = I + 1
		Next linha

		Try
			MessageBox.Show("Pedidos incluido com sucesso.")
			DGWPedidos.DataSource = Nothing
			CarregaPagina()
		Catch ex As Exception
			MessageBox.Show("Erro ao efetuar a conexão com a base de dados : " + ex.Message)
		End Try
	End Sub
	Private Sub atualizarRegistro(ByVal dr As DataRow)
		Dim sqlpedidos As String = "UPDATE " & TabelaPedidos & " SET clienteID='" & codigocli.Text & "' where pedidoID='" & dr("pedidoID") & "'"
		Dim sqlitensdeletaitens As String = "delete from " & TabelaDetalhesPedidos & "  where pedidoID='" & dr("pedidoID") & "'"
		accDb.ExecuteDS(sqlitensdeletaitens, TabelaDetalhesPedidos)
		accDb.ExecuteDS(sqlpedidos, TabelaPedidos)
		For Each linha As DataRow In ds_itens_temp.Tables(0).Rows
			Dim sqlitens As String = "INSERT INTO " & TabelaDetalhesPedidos & " (pedidoID,produtoID,unidade,descricao,preco,quantidade,subtotal) VALUES ('" & ds_itens_temp.Tables(0).Rows(I).Item(0) & "','" & ds_itens_temp.Tables(0).Rows(I).Item(1) & "','" & ds_itens_temp.Tables(0).Rows(I).Item(2) & "','" & ds_itens_temp.Tables(0).Rows(I).Item(3) & "','" & ds_itens_temp.Tables(0).Rows(I).Item(4) & "','" & ds_itens_temp.Tables(0).Rows(I).Item(5) & "','" & ds_itens_temp.Tables(0).Rows(I).Item(6) & "')"
			accDb.ExecuteDS(sqlitens, TabelaDetalhesPedidos)
			I = I + 1
		Next linha

		Try
			MessageBox.Show("Pedidos atualizado com sucesso.")
			DGWPedidos.DataSource = Nothing
			CarregaPagina()
		Catch ex As Exception
			MessageBox.Show("Erro ao efetuar a conexão com a base de dados : " + ex.Message)
		End Try
	End Sub
	Private Sub eliminarRegistro(ByVal dr As DataRow)
		Dim sql As String = "UPDATE " & TabelaPedidos & " SET ativo = 'N' where pedidoID = " & dr("pedidoID")
		ds = accDb.ExecuteDS(sql, TabelaPedidos)
		Proximo_Click(Nothing, Nothing)
		Try
			MessageBox.Show("Pedido excluido com sucesso.")
		Catch ex As Exception
			MessageBox.Show("Erro ao efetuar a conexão com a base de dados : " + ex.Message)
		End Try
	End Sub
	'FIM DO BLOCO DE FUNÇÕES
	''''''''''''''''''''''''''''''
	'INICIO DO BLOCO DE PROCIDURES
	Private Sub Pedidos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
		'carrega pedidos
		CarregaPagina()
	End Sub
	Private Sub Primeiro_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Primeiro.Click
		registropedidos = 0
		exibirDados(registropedidos)
		listaitens()
	End Sub

	Private Sub Anterior_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Anterior.Click
		registropedidos = registropedidos - 1
		If registropedidos < 0 Then registropedidos = 0
		exibirDados(registropedidos)
		listaitens()
	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
		registropedidos = registropedidos + 1
		If registropedidos > i Then registropedidos = i
		exibirDados(registropedidos)
		listaitens()
	End Sub

	Private Sub Ultimo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Ultimo.Click
		registropedidos = dt.Rows.Count - 1
		exibirDados(registropedidos)
		listaitens()
	End Sub
	Private Sub bcliente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bcliente.Click
		Dim dialogo As New frmClientes
		dialogo.ShowDialog()
		If dialogo.DialogResult = Windows.Forms.DialogResult.OK Then
			Dim sql As String = "Select * from " & TabelaClientes & " where clienteID = '" & dialogo.registrocliente & "'"
			ds = accDb.ExecuteDS(sql, TabelaClientes)
			Dim dr As DataRow
			For Each dr In ds.Tables(0).Rows
				codigocli.Text = dr.Item("clienteID")
				cliente.Text = dr.Item("nome")
				registrocliente = dr.Item("clienteID")
			Next dr
		Else
			MsgBox("Não foi selecionado nenhum cliente.")
			codigocli.Text = ""
			cliente.Text = ""
		End If
	End Sub
	Private Sub bproduto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bproduto.Click
		Dim dialogo As New frmProdutos
		dialogo.ShowDialog()
		If dialogo.DialogResult = Windows.Forms.DialogResult.OK Then
			Dim sql As String = "Select * from " & TabelaProdutos & " where produtoID = '" & dialogo.registroproduto & "'"
			ds = accDb.ExecuteDS(sql, TabelaProdutos)
			Dim dr As DataRow
			For Each dr In ds.Tables(0).Rows
				codigoprod.Text = dr.Item("produtoID")
				produto.Text = dr.Item("descricao")
				preco.Text = dr.Item("preco")
				unidade.Text = dr.Item("unidade")
				registroproduto = dr.Item("produtoID")
			Next dr
		Else
			MsgBox("Não foi selecionado nenhum cliente.")
			codigocli.Text = ""
			cliente.Text = ""
		End If
	End Sub

	Private Sub Novo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Novo.Click
		If Novo.Text = "Novo" Then
			limpacampos()
			limpagrid()
			ProximoRegistro()
			codigoped.Text = Proximopedido
			habilita()
			data.Text = Date.Today
			Primeiro.Enabled = False
			Proximo.Enabled = False
			Anterior.Enabled = False
			Ultimo.Enabled = False
			Atualizar.Enabled = False
			Eliminar.Enabled = False
			Encerrar.Text = "Cancela"
			Novo.Text = "Incluir"
			bcliente.Enabled = True
			bproduto.Enabled = True
			Incluir.Enabled = True
			Excluir.Enabled = True
			qtde.Enabled = True
			bcliente_Click(Nothing, Nothing)
		ElseIf Novo.Text = "Incluir" Then
			incluirRegistro()
			desabilita()
			Novo.Text = "Novo"
			Encerrar.Text = "Encerrar"
			Primeiro.Enabled = True
			Proximo.Enabled = True
			Anterior.Enabled = True
			Ultimo.Enabled = True
			Atualizar.Enabled = True
			Eliminar.Enabled = True
		End If
	End Sub
   
	Private Sub Atualizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Atualizar.Click
		If Atualizar.Text = "Atualizar" Then
			habilita()
			entrega_item_item()
			DGWPedidos.DataSource = Nothing
			DGWPedidos.DataSource = ds_itens_temp.Tables(0).DefaultView
			mostracolunas()
			Novo.Enabled = False
			Primeiro.Enabled = False
			Proximo.Enabled = False
			Anterior.Enabled = False
			Ultimo.Enabled = False
			Eliminar.Enabled = False
			Encerrar.Text = "Cancela"
			Atualizar.Text = "Salvar"
			bcliente.Enabled = True
			bproduto.Enabled = True
			Incluir.Enabled = True
			Excluir.Enabled = True
			qtde.Enabled = True
			cliente.Focus()
			codigoped.Enabled = False
			codigoped.Visible = True
			LabelCodigoPed.Visible = True
		ElseIf Atualizar.Text = "Salvar" Then
			codigoped.Enabled = False
			If registropedidos < 0 OrElse registropedidos > dt.Rows.Count - 1 Then Exit Sub
			Dim dre As DataRow = dt.Rows(registropedidos)
			atualizarRegistro(dre)
			Atualizar.Text = "Atualizar"
			Encerrar.Text = "Encerrar"
			Novo.Enabled = True
			Eliminar.Enabled = True
			desabilita()
			Primeiro.Enabled = True
			Proximo.Enabled = True
			Anterior.Enabled = True
			Ultimo.Enabled = True
		End If
	End Sub
	
	Private Sub Incluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Incluir.Click
		'a propriedade SelectionMode deve ser igual a FullRowSelect para deletar linhas
		If cliente.Text = String.Empty Then
			MsgBox("Escolha o clientes...")
			bcliente_Click(Nothing, Nothing)
			Exit Sub
		ElseIf produto.Text = String.Empty Then
			MsgBox("Escolha o produto.")
			bproduto_Click(Nothing, Nothing)
			Exit Sub
		ElseIf qtde.Text = String.Empty Then
			MsgBox("Informe a quantidade requerida...")
			qtde.Focus()
			Exit Sub
		End If
		If IsDBNull(DGWPedidos.Rows.Count) Or DGWPedidos.Rows.Count = 0 Then W = 0
		If Novo.Text = "Incluir" Then
			DGWPedidos.Rows.Add(Convert.ToInt32(Proximopedido), registroproduto, unidade.Text, produto.Text, preco.Text, Convert.ToInt32(qtde.Text), preco.Text * Convert.ToInt32(qtde.Text))
		Else
			Dim rowNew As DataRow = ds_itens_temp.Tables(0).NewRow
			rowNew("pedidoID") = codigoped.Text
			rowNew("produtoID") = codigoprod.Text
			rowNew("unidade") = unidade.Text
			rowNew("descricao") = produto.Text
			rowNew("preco") = preco.Text
			rowNew("quantidade") = qtde.Text
			rowNew("subtotal") = preco.Text * qtde.Text
			ds_itens_temp.Tables(0).Rows.Add(rowNew)
			ds_itens_temp.AcceptChanges()
		End If
		total.Text = 0.0
		For Each linha As DataGridViewRow In DGWPedidos.Rows
			total.Text += linha.Cells(6).Value
			total.Text = FormatCurrency(total.Text, "0.00")
		Next linha
	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
			DGWPedidos.DataSource = Nothing
			DGWPedidos.DataSource = ds_itens.Tables(0).DefaultView
			desabilita()
			Encerrar.Text = "Encerrar"
			Primeiro.Enabled = True
			Proximo.Enabled = True
			Anterior.Enabled = True
			Ultimo.Enabled = True
			Atualizar.Enabled = True
			Eliminar.Enabled = True
			codigoped.Visible = True
			LabelCodigoPed.Visible = True
			If dt.Rows.Count = 0 Then
				Atualizar.Enabled = False
				Eliminar.Enabled = False
			End If
			Novo.Text = "Novo"
			Novo.Enabled = True
			Atualizar.Text = "Atualizar"
			Anterior_Click(Nothing, Nothing)
		End If
	End Sub

	Private Sub Eliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Eliminar.Click
		If registropedidos < 0 OrElse registropedidos > dt.Rows.Count - 1 Then
			Exit Sub
		Else
			If MessageBox.Show("Deseja Excluir esse registro", "Excluir", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
				If registropedidos < 0 OrElse registropedidos > dt.Rows.Count - 1 Then Exit Sub
				Dim dre As DataRow = dt.Rows(registropedidos)
				eliminarRegistro(dre)
			End If
		End If
	End Sub
	Private Sub Excluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Excluir.Click
		'a propriedade SelectionMode deve ser igual a FullRowSelect para deletar linhas
		'verifica se a linha a ser excluida é valida
		Dim registro As DataRowView = TryCast(DGWPedidos.CurrentRow.DataBoundItem, DataRowView)
		' Existe algum registro selecionado? 
		If registro IsNot Nothing Then
			' Sim... Então apaga;) 
			registro.Delete()
		End If
	End Sub
	'FIM DO BLOCO DE PROCIDURES
End Class

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.