Carcleo 4 Denunciar post Postado Dezembro 2, 2008 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
quintelab 91 Denunciar post Postado Dezembro 2, 2008 As "tabelas" do DataSet acredito que são DataTables. De uma olhada nesse link: http://msdn.microsoft.com/pt-br/library/cc564910.aspx Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Dezembro 3, 2008 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