none
Erro com Foreing Key RRS feed

  • 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 .

    quarta-feira, 9 de junho de 2010 12:34

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
    quarta-feira, 9 de junho de 2010 12:50
  • 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.

     

    quarta-feira, 9 de junho de 2010 13:04
  • 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
    quarta-feira, 9 de junho de 2010 13:39
  • 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ç,

    sexta-feira, 11 de junho de 2010 11:30
  • 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??

    terça-feira, 15 de junho de 2010 12:52