VB 2010 ERRO ! AJUDEM!!
criei um formulario com consulta linq-to-sql onde ensiro um ou mais produtos na lista de compra de um determinado cliente, mas quando clico em salvar aparece a msg dizendo que o banco de dados gerou uma chave que ja estava em uso! não consigo axar a solução do problema! por favor ajudem
Sim, numeração automatica! vou checar só no update pois nao tenho certesa
amigo aqui esta o codigo do botao salvar onde ocorre o erro
Try
[ô]A expressão lambda a seguir devolve um objeto Cliente
[ô]Estamos usando o codigo do cliente para identificar unicamento o cliente
Dim Cli As tb_cliente = bd.tb_clientes.Single(Function(p) p.cod_cli = Me.txtCodigoCliente.Text)
[ô]-------------------------------------------------
[ô]Cria um novo objeto Pedido
[ô]-------------------------------------------------
Dim oPedido As New tb_pedido
oPedido.data = Date.Now
oPedido.cod_cli = Cli.cod_cli
oPedido.tb_cliente = Cli
[ô]--------------------------------------------------
[ô]Obtendo os detalhes do pedido
[ô]realizo a geração dos objetos Pedido
[ô]vou percorrer o array dos detalhes do pedido
[ô]----------------------------------------------------
For Each o As detalhesPedidos In ArrDetalhesPedidos
[ô]Instancio um objeto Produto selecionando pelo codigo do produto
Dim produto As tb_produto = bd.tb_produtos.Single(Function(a) a.codigo = codProduto.ToString())
[ô]Cria um novo detalhe do pedido
Dim detPedido As New tb_detalhespedido
detPedido.codigo = codProduto
detPedido.produto = produto.produto
detPedido.Quantidade = o.Quantidade
detPedido.preco = o.Preco
detPedido.Total = o.Subtotal
[ô]inclui os detalhes do pedido no pedido
oPedido.tb_detalhespedidos.Add(detPedido)
[ô]-altera a quantidade de estoque do produto
produto.estoque = produto.estoque - o.Quantidade
Next
[ô]------------------------------------------------------
[ô]Aqui atualizo a base de dados
bd.SubmitChanges()
MsgBox([Ô]Dados de Pedidos , Detalhes de Pedidos e Estoque atualizados com sucesso...[Ô])
Catch ex As Exception
MsgBox(ex.Message)
Finally
[ô]chama as rotinas para limpar clientes e produtos e vendas
limpar_cliente()
limpar_produto()
limpar_venda()
Me.calcular_total()
End Try
vai uma foto tentando explicar oque fiz. no numero 1 eh o grid onde eu coloco os itens. mas se eu adicionar mais de um item da o erro, mas se eu por sómente um item nao ocorre o erro, o numero 2 eh o meu dataset, onde eu só fiz um tratamento de relacionamento entre tabelas
Try
[ô]A expressão lambda a seguir devolve um objeto Cliente
[ô]Estamos usando o codigo do cliente para identificar unicamento o cliente
Dim Cli As tb_cliente = bd.tb_clientes.Single(Function(p) p.cod_cli = Me.txtCodigoCliente.Text)
[ô]-------------------------------------------------
[ô]Cria um novo objeto Pedido
[ô]-------------------------------------------------
Dim oPedido As New tb_pedido
oPedido.data = Date.Now
oPedido.cod_cli = Cli.cod_cli
oPedido.tb_cliente = Cli
[ô]--------------------------------------------------
[ô]Obtendo os detalhes do pedido
[ô]realizo a geração dos objetos Pedido
[ô]vou percorrer o array dos detalhes do pedido
[ô]----------------------------------------------------
For Each o As detalhesPedidos In ArrDetalhesPedidos
[ô]Instancio um objeto Produto selecionando pelo codigo do produto
Dim produto As tb_produto = bd.tb_produtos.Single(Function(a) a.codigo = codProduto.ToString())
[ô]Cria um novo detalhe do pedido
Dim detPedido As New tb_detalhespedido
detPedido.codigo = codProduto
detPedido.produto = produto.produto
detPedido.Quantidade = o.Quantidade
detPedido.preco = o.Preco
detPedido.Total = o.Subtotal
[ô]inclui os detalhes do pedido no pedido
oPedido.tb_detalhespedidos.Add(detPedido)
[ô]-altera a quantidade de estoque do produto
produto.estoque = produto.estoque - o.Quantidade
Next
[ô]------------------------------------------------------
[ô]Aqui atualizo a base de dados
bd.SubmitChanges()
MsgBox([Ô]Dados de Pedidos , Detalhes de Pedidos e Estoque atualizados com sucesso...[Ô])
Catch ex As Exception
MsgBox(ex.Message)
Finally
[ô]chama as rotinas para limpar clientes e produtos e vendas
limpar_cliente()
limpar_produto()
limpar_venda()
Me.calcular_total()
End Try
vai uma foto tentando explicar oque fiz. no numero 1 eh o grid onde eu coloco os itens. mas se eu adicionar mais de um item da o erro, mas se eu por sómente um item nao ocorre o erro, o numero 2 eh o meu dataset, onde eu só fiz um tratamento de relacionamento entre tabelas
Qual o tipo de dados de [Ô]pedido_id[Ô]?
o pedido id fica na tabela pedidos e é um int com numeração automaticA
Mesmo o campo sendo de numeração automática, o EF nem sempre consegue lidar com isso, coloque um valor [Ô]null[Ô] para esse campo ao inserir, isso deve resolver o problema.
eu ja tinha feito um projeto parecido com esse uma vez e não ocasionou este erro, o jeito é eu excluir o projeto e criar denovo, o chato é que levei uma tarde toda fazendo hahaha! preguiça de fazer denovo :(
Problema Resolvido!!!! tive que colocar um (o) ali depois do = e antes do codProduto.toSting
For Each o As detalhesPedidos In ArrDetalhesPedidos
[ô]Instancio um objeto Produto selecionando pelo codigo do produto
Dim produto As tb_produto = bd.tb_produtos.Single(Function(a) a.codigo = [txt-color=#e80000]o.[/txt-color]codProduto.ToString())
[ô]Cria um novo detalhe do pedido
Dim detPedido As New tb_detalhespedido
detPedido.codigo = codProduto
detPedido.produto = produto.produto
detPedido.Quantidade = o.Quantidade
detPedido.preco = o.Preco
detPedido.Total = o.Subtotal
[ô]inclui os detalhes do pedido no pedido
oPedido.tb_detalhespedidos.Add(detPedido)
[ô]-altera a quantidade de estoque do produto
produto.estoque = produto.estoque - o.Quantidade
Next
For Each o As detalhesPedidos In ArrDetalhesPedidos
[ô]Instancio um objeto Produto selecionando pelo codigo do produto
Dim produto As tb_produto = bd.tb_produtos.Single(Function(a) a.codigo = [txt-color=#e80000]o.[/txt-color]codProduto.ToString())
[ô]Cria um novo detalhe do pedido
Dim detPedido As New tb_detalhespedido
detPedido.codigo = codProduto
detPedido.produto = produto.produto
detPedido.Quantidade = o.Quantidade
detPedido.preco = o.Preco
detPedido.Total = o.Subtotal
[ô]inclui os detalhes do pedido no pedido
oPedido.tb_detalhespedidos.Add(detPedido)
[ô]-altera a quantidade de estoque do produto
produto.estoque = produto.estoque - o.Quantidade
Next
Tópico encerrado , respostas não são mais permitidas