Pergunta Relacionamento de tabelas

  • terça-feira, 27 de março de 2012 22:23
     
     

    Pessoal, help!!!

    Preciso descobrir onde que estou errando.

    Tenho duas tabelas: Pais e Filhos

    No MS-SQL Server management construo as tabelas da seguinte forma:

    IDpais: int (tipos de dados), 4 (comprimento), Não (permitir nulos), Não (Exclusivo), Sim (chave primária) --> True 1, 1 (identidade);

    Nome do pai: nvarchar (tipos de dados), 100 (comprimento), Sim (permitir nulos), Não (Exclusivo), Não (chave primária);

    Nome da mãe: nvarchar (tipos de dados), 100 (comprimento), Sim (permitir nulos), Não (Exclusivo), Não (chave primária);

    Na tabela filhos

    IDfilhos: int (tipos de dados), 4 (comprimento), Não (permitir nulos), Sim (Exclusivo), Sim (chave primária) --> True 1, 1 (identidade);

    IDpais: int (tipos de dados), 4 (comprimento), Não (permitir nulos), Não (Exclusivo), Sim (chave primária) --> False (identidade);

    Nome do filho: nvarchar (tipos de dados), 100 (comprimento), Sim (permitir nulos), Não (Exclusivo), Não (chave primária);

    Criei o relacionamento clicando em propriedades da tabela filhos: Relfilhopai - IDpais (coluna de tabela de Chaves Primárias) e IDpais (coluna de tabela de Chaves Estrangeiras)

    No VS2010

    Inseri Data Sources e na tabela Pais aparece o relacionamento filhos onde em pais selecionei Details e em filhos DataGridView. Arrastei os icones para a área do formulário. Ao executar o projeto, pedi para iserir novo e preenchi os campos. 

    Ao salvar o banco de dados, o VS2010 retorna o seguinte erro: O valor de uma chave estrangeira não pode ser inserido porque não existe um valor de chave primária correspondente. [ Foreign key constraint name = RelFilhoPai ]

    Alguém poderia me ajudar? Já tentei fazer várias combinações de chaves e não encontro a forma correta.

    Obrigado

    Caso ajude:

    Montagem da tabela no SQL

    Esquema do banco de dados

    Erro ao clicar no botão salvar:

    Erro ao salvar

    • Editado Adalci terça-feira, 27 de março de 2012 23:05
    •  

Todas as Respostas

  • terça-feira, 27 de março de 2012 23:01
    Moderador
     
     

    Olá Adalci,

    Tudo beleza?

    Pelo erro parece que não esta sendo inserido um Pai para depois ser inserido um respectivo Filho.

    Faça um teste, tente incluir registros sem que o DataSource de filhos esteja associado. Veja se os registros inserem corretamente, após isso faça o relacionamento para a tabela de Filho.

    Pode ser que o DataSource esteja inserindo o registro de Filhos antes do registro de Pai, por isso o erro.

    Tente fazer estes teste.

    Mas é bastante importante que o Filho seja inserido apenas depois do Pai, pois assim o valor da chave estrangeira será válido.

    obs.: eu particularmente prefiro escrever código a utilizar este tipo de ferramenta para fazer o CRUD dos dados. Se desejar posso lhe passar material para codificar isso manualmente, sem que seja necessário depender destas ferramentas de conexão com o banco de dados.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

  • terça-feira, 27 de março de 2012 23:24
     
     

    Oi Fernando, obrigado pela ajuda.

    Acertou em cheio!! Funcionou somente com a inclusão dos pais e depois quando fiz o relacionamento dos filhos.

    Ocorre que quando executo o programa novamente os dados inseridos ainda estão lá de forma correta, porém quando peço um novo registro ele volta a dar o mesmo erro. Como posso corrigir este problema? 

  • quarta-feira, 28 de março de 2012 01:59
    Moderador
     
      Contém Código

    Olá Adalci,

    Tente fazer assim:

    Me.Validate()
    Me.PaisBindingSource.EndEdit()
    Me.TableAdapterManager.Update(Me.AgoraDataSet.Tables(0))
    Me.TableAdapterManager.Update(Me.AgoraDataSet.Tables(1))

    []s!

    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    • Marcado como Resposta Adalci quarta-feira, 28 de março de 2012 02:54
    • Não Marcado como Resposta Adalci quarta-feira, 28 de março de 2012 03:00
    •  
  • quarta-feira, 28 de março de 2012 02:54
     
     

    Fernando, muito obrigado pela ajuda.

    Estou usando o Framework 4 e ele não reconhece o Update, apenas o updateall. Teria outra forma de salvar as tabelas?

    Obrigado


    • Editado Adalci quarta-feira, 28 de março de 2012 03:02
    •  
  • quarta-feira, 28 de março de 2012 12:22
    Moderador
     
     

    Ola Adalci,

    Isso é bastante estranho, pois a documentação mostra que ele existe (http://msdn.microsoft.com/en-us/library/ms171933%28v=vs.80%29.aspx)

    Vou procurar outra solução...

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

  • quinta-feira, 17 de maio de 2012 01:09
     
     

    Não reconhece, como se o método não existisse!? Qual o erro que ocorre agora?


    É ajudando os outros que nos ajudamos...


    • Editado Terra Jr quinta-feira, 17 de maio de 2012 01:10
    •  
  • terça-feira, 29 de maio de 2012 10:47
    Moderador
     
     

    Adalci,

    Novidades quanto a essa questao?


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima