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
Erro ao clicar no botão 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:01Moderador
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:59Moderador
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 -
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:22Moderador
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:47Moderador
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

