Inquiridor
Erro com Foreing Key

Pergunta
-
foreach (DSMobile.PedidosRow Row in DTPedido.Rows) { ClienteId = Row.cliente_id; UsuarioId = Row.usuario_id; Descricao = Row.descricao; Data = Row.data; Valor = Row.valor; WS.InsertPedidos(ClienteId, UsuarioId, Descricao, Data, Valor, 1); // "1" status do pedido /*foreach (DSMobile.PedidosVendaRow RowVenda in DTPedidoVenda.Rows) { if (RowVenda.pedido_id == Row.pedido_id) { WS.InsertPedidosVenda(RowVenda.pedido_id, RowVenda.produto_id, RowVenda.quantidade, RowVenda.PrecoUnit); PVTA.Delete(RowVenda.Item_id); // PVTA PedidosVendaTableAdpters } }*/ PTA.Delete(Row.pedido_id); //PTA PedidosTableAdpters
Está dando Erro com Foreing Key quando está inserindo a parte de PedidosVenda Comentada.
Explicando o sistema:
Existem Pedidos no Mobile que ao inserir faz a comunicação com o WebService e grava no database local so que esta dando essa violação.
A instrução INSERT conflitou com a instrução FOREING KEY "FK_PedidosVenda_Pedidos", ocorreu no bando de dados "VENDAS". tabela [dbo.Pedidos], column [pedido_id].A instrução foi finalizada.
No Sistema Windowns Forms estava acontecendo mesma coisa, funcionou após eu adicionar o autoincremento na tabela de Pedidos
só que no Dataset do Mobile fiz a alteração e na hora de enviar o Pedido não ta posicionado.
Não sei se esclareci bem, alguma ajuda sera bem vinda .
Todas as Respostas
-
essa sua FK_PedidosVenda_Pedidos associa a tabela pedidoVendas certo. Mas quem seria a tabela "Pai" nesse DER? Ao que me parece esta errado o associação entre as tabelas, ou não foi entendido a sua solicitação.
Posta ai seu modelo ER.
att
Roberto de Carvalho Coelho -
Eu estou seguindo umas video aulas para pockt pc 2005// so q eu apliquei as video aulas no Windows Mobile 6.1 que é praticamente mesma coisa não fiz nenhum modificação drastica.
A tabela Pai é a Pedidos [dbo.Pedidos] [dbo.PedidosVenda] (pk)item_id (pk)pedido_id <-------- pedido_id cliente_id Produto_id usuario_id quantidade descricao PrecoUnit data valor status
no windos forms, ele insere da mesma forma só que não via WebServices, ao só foi adicionar o autoincremento no Dataset da tabela pedidos ao quadno vc
incluir um novo registro ele sabe que os PedidosVenda são dos Pedidos Ex: (1)
so que no mobile o pedido vem como EX: (-1) sem seleção por isso do erro.
-
Bom, se estiver relacionado dessa maneira que você passou esta correto.
Verifica se os dados que você esta inserindo não estão em duplicidade. Talvez o erro estourado não esta condizendo com o verdadeiro erro, verifica isso nas duas tabelas.
att
Roberto de Carvalho Coelho -
O problema parece bem óbvio....
Você tem um chave primária no seu device. Essa, está associada ao "pedido vendas".
Só que ao instanciar o WS você está fazendo um insert sem passar essa chave primária local do device e sim deixando o banco do WS fazer com autoincrement. Logo após, você insere o "pedido vendas" informando a chave primária local sendo que no banco do WS não necessariamente foi "gerada" a mesma chave para pedido_id que a que você está enviando em RowVenda.Pedido_id.
Ou você insere o pedido com o pedido_id do device, ou você insere e retorna (do WS) do pedido_id criado remoto. Daí sim você envia o pedido vendas.
Pelo código, creio que seja isso.
Abç,
- Sugerido como Resposta AndreAlvesLimaModerator sexta-feira, 11 de junho de 2010 22:57
- Não Sugerido como Resposta AndreAlvesLimaModerator sexta-feira, 25 de junho de 2010 16:11
-
eu entendi o porque do erro voce explicou direitinho a situação, como eu disse estava acontecendo isso no sistema de windows forms, mas no mobile e no web service n sei como resolver isto
axo que o certo eh passar o incremento no web service memso pq o do mobile não iria fechar com o do banco fisico.
tem como demonstrar um exemplo??