Hoje já faz 4 dias que estou pelejando com um código aqui mas não consigo resolver.
Meu sistema é para uma clínica veterinária.
As tabelas envolvidas no erro são "tabela_produtoServico", "tabela_pedidoAoFornecedor" e "tabela_itensPedidoAoFornecedor".
A primeira possui todos os produtos cadastrados. A segunda, os pedidos feitos ao fornecedor e a última, todos os itens contidos em cada pedido realizado ao fornecedor.
Tenho um formulário onde o usuário poderá alterar uma ordem de pedido caso a mesma ainda não tenha sido finalizada.
No form, o usuário vai selecionar em um combobox, o nome do fornecedor para quem foi feito o pedido, num dataGridView abaixo, serão exibidos todos os pedidos já realizados a esse fornecedor selecionado e num segundo dataGridView mais abaixo, quando o usuário der dois cliques na linha correspondente ao pedido no primeiro dataGridView, nesse segundo serão listados todos os itens desse pedido em questão.
Voilà o problema: meu código sql INNER JOIN não está funcionando pois a chave estrangeira da tabela de itens que é a chave primaria da tabela de produtoServico não é descoberta, pois dá erro dizendo que ela não pertence a tabela.
Veja imagens das tabelas e relações:
Como podem perceber, a tabela de itens não possui chave primária mas isso não interfere pois já adicionei uma campo de chave primária pra ver se resolveria e o mesmo erro continuou.
Fiz também uma consulta com o mesmo código diretamente no access e o resultado foi satisfatório.
o código vb.net é o seguinte:
If dataGridPedidosAoFornecedor.Rows.Count > 0 Then
If dataGridPedidosAoFornecedor.CurrentRow.Cells(3).Value = "FINALIZADO" Then
MsgBox("O pedido selecionado já foi finalizado portanto, não é possível alterá-lo nem excluí-lo!", vbOKOnly, "PEDIDO JÁ FINALIZADO!")
Else
dataGridItensDoPedido.Rows.Clear()
conexao.ConnectionString = (caminho_banco)
conexao.Open()
Dim adaptadorItensPedido As New OleDbDataAdapter("SELECT * FROM tabela_itensPedidoAofornecedor INNER JOIN tabela_produtoServico ON tabela_itensPedidoAofornecedor.id_produtoServico=tabela_produtoServico.id_produtoServico WHERE id_pedidoAofornecedor=" & dataGridPedidosAoFornecedor.CurrentRow.Cells(0).Value, conexao)
Dim tabelaItensPedido As New DataTable
adaptadorItensPedido.Fill(tabelaItensPedido)
Como podem ver, o erro ocorre quando tento preencher o dataGridView de itens do pedido e faço referencia ao campo "id_produtoServico" da tabela.
O que mais acho estranho que é a união das tabelas funciona pois quando coloco um valor qualquer no lugar da referencia ao campo "id_produtoServico" para preencher o dataGridView de itens, o código funciona e dentre outros campos, também exibe o nome do produto que é um valor existente somente na tabela_produtoServico.
Pergunta
dragonsday
Boa tarde, pessoal!
Hoje já faz 4 dias que estou pelejando com um código aqui mas não consigo resolver.
Meu sistema é para uma clínica veterinária.
As tabelas envolvidas no erro são "tabela_produtoServico", "tabela_pedidoAoFornecedor" e "tabela_itensPedidoAoFornecedor".
A primeira possui todos os produtos cadastrados. A segunda, os pedidos feitos ao fornecedor e a última, todos os itens contidos em cada pedido realizado ao fornecedor.
Tenho um formulário onde o usuário poderá alterar uma ordem de pedido caso a mesma ainda não tenha sido finalizada.
No form, o usuário vai selecionar em um combobox, o nome do fornecedor para quem foi feito o pedido, num dataGridView abaixo, serão exibidos todos os pedidos já realizados a esse fornecedor selecionado e num segundo dataGridView mais abaixo, quando o usuário der dois cliques na linha correspondente ao pedido no primeiro dataGridView, nesse segundo serão listados todos os itens desse pedido em questão.
Voilà o problema: meu código sql INNER JOIN não está funcionando pois a chave estrangeira da tabela de itens que é a chave primaria da tabela de produtoServico não é descoberta, pois dá erro dizendo que ela não pertence a tabela.
Veja imagens das tabelas e relações:
Como podem perceber, a tabela de itens não possui chave primária mas isso não interfere pois já adicionei uma campo de chave primária pra ver se resolveria e o mesmo erro continuou.
Fiz também uma consulta com o mesmo código diretamente no access e o resultado foi satisfatório.
o código vb.net é o seguinte:
If dataGridPedidosAoFornecedor.Rows.Count > 0 Then
If dataGridPedidosAoFornecedor.CurrentRow.Cells(3).Value = "FINALIZADO" Then
MsgBox("O pedido selecionado já foi finalizado portanto, não é possível alterá-lo nem excluí-lo!", vbOKOnly, "PEDIDO JÁ FINALIZADO!")
Else
dataGridItensDoPedido.Rows.Clear()
conexao.ConnectionString = (caminho_banco)
conexao.Open()
Dim adaptadorItensPedido As New OleDbDataAdapter("SELECT * FROM tabela_itensPedidoAofornecedor INNER JOIN tabela_produtoServico ON tabela_itensPedidoAofornecedor.id_produtoServico=tabela_produtoServico.id_produtoServico WHERE id_pedidoAofornecedor=" & dataGridPedidosAoFornecedor.CurrentRow.Cells(0).Value, conexao)
Dim tabelaItensPedido As New DataTable
adaptadorItensPedido.Fill(tabelaItensPedido)
If tabelaItensPedido.Rows.Count > 0 Then
For i = 0 To tabelaItensPedido.Rows.Count - 1
dataGridItensDoPedido.Rows.Add(tabelaItensPedido.Rows(i).Item("id_produtoServico", tabelaItensPedido.Rows(i).Item("nome_produtoServico"), FormatCurrency(tabelaItensPedido.Rows(i).Item("valor_unidade").ToString, 2), tabelaItensPedido.Rows(i).Item("qtdd_pedidoAoFornecedor").ToString)
Next
End If
conexao.Close()
End If
End If
E finalmente, o print do erro:
Como podem ver, o erro ocorre quando tento preencher o dataGridView de itens do pedido e faço referencia ao campo "id_produtoServico" da tabela.
O que mais acho estranho que é a união das tabelas funciona pois quando coloco um valor qualquer no lugar da referencia ao campo "id_produtoServico" para preencher o dataGridView de itens, o código funciona e dentre outros campos, também exibe o nome do produto que é um valor existente somente na tabela_produtoServico.
Fico no aguardo por auxílio de alguém.
Obs.: O Access é 2007 e o Visual Studio é 2010.
Editado por dragonsdayLink para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.