INSERINDO VALORES NA CHAVE ESTRANGEIRA
Bom Dia Pessoal,
Estou com uma dúvida em relação a chave estrangeira...desculpem a dúvida que pode parecer meio óbvia, mas estou sem entender???
Estou trabalhando com 3 tabelas onde 2 delas possuem FK:
- cliente
- orçamento(ID_Cliente)
- aparelho(ID_Orcamento)
Ao inserir valores nas tabelas no IB Expert, os campos de FK ficam NULL...
Gostaria de saber se ao inserir corretamente os valores nas PK correspondente de cada tabela, não seria para ser inserido nos campos FK os valores das PK automaticamente, já que está referenciado no IB Expert??
Estou com uma dúvida em relação a chave estrangeira...desculpem a dúvida que pode parecer meio óbvia, mas estou sem entender???
Estou trabalhando com 3 tabelas onde 2 delas possuem FK:
- cliente
- orçamento(ID_Cliente)
- aparelho(ID_Orcamento)
Ao inserir valores nas tabelas no IB Expert, os campos de FK ficam NULL...
Gostaria de saber se ao inserir corretamente os valores nas PK correspondente de cada tabela, não seria para ser inserido nos campos FK os valores das PK automaticamente, já que está referenciado no IB Expert??
Não se for fk vc tera qe informar o numero a ser gravado a nao ser qe vc coloco o mesmo codigo do cliente no orcamento e no aparelho tipo
txtorcamento.text = txtcodcliente.text
txtaparelho.text = txtcodcliente.text
entendeu
txtorcamento.text = txtcodcliente.text
txtaparelho.text = txtcodcliente.text
entendeu
A FK serve para gerar a integridade entre as tabelas. Não há como incluir automaticamente esse valor. Caso os códigos das FK's não estiverem cadastrados, o registro não será incluÃdo. Se uma FK estiver NULL, sua integridade referencial não servirá pra nada!
GCPNUNES,
Quando trabalhamo com chave estrangeira FK, na hora de inserirmos um registro na tabela filho, temos de informar o valor que deverá ser armazenado nestam pois, como poderemos ter vários registros na tabela pai, o computador não tem como saber qual deles terá relação com o filho, temos de falar para ele.
Como exemplo veja o seguinte:
Tenho a tabela clientes:
codCli
Nome
Nesta tabela tenho os seguintes valores
1 Marco
2 André
Tenho uma tabela CompraCli:
codCompra
CodCli
Valor
Onde codCli seria o campo de ligação com a tabela cliente.
então o cliente marco fez uma compra. A chave da compra, ou seja o campo codCompra é um campo de preenchimento automático e ganhou o valor 1, o campo Valor, devo informar, sendo assim a compra foi de 100,00, agora como o computador irá saber se a compra foi feita pelo marco ou pelo André. como foi feita pelo Marco passaria o valor 1 para o campo CodCli e realizaria a inserção, criando o seguinte registro:
1 - codigo da compra
1 - codigo do cliente
100 - valor da compra.
Sendo assim as duas tabelas estão vinculadas pelo campo codCli. se fosse fazer um select onde quissese pegar todas as compras do Marco, mostrar seu Codigo e seu valor, criaria uma query assim
Select c.nome, cc.codcompra, cc.valor
from clientes c, CompraCli cc
where c.codcli = cc.codcli
Espero ter esclarecido melhor a sua dúvida.
Quando trabalhamo com chave estrangeira FK, na hora de inserirmos um registro na tabela filho, temos de informar o valor que deverá ser armazenado nestam pois, como poderemos ter vários registros na tabela pai, o computador não tem como saber qual deles terá relação com o filho, temos de falar para ele.
Como exemplo veja o seguinte:
Tenho a tabela clientes:
codCli
Nome
Nesta tabela tenho os seguintes valores
1 Marco
2 André
Tenho uma tabela CompraCli:
codCompra
CodCli
Valor
Onde codCli seria o campo de ligação com a tabela cliente.
então o cliente marco fez uma compra. A chave da compra, ou seja o campo codCompra é um campo de preenchimento automático e ganhou o valor 1, o campo Valor, devo informar, sendo assim a compra foi de 100,00, agora como o computador irá saber se a compra foi feita pelo marco ou pelo André. como foi feita pelo Marco passaria o valor 1 para o campo CodCli e realizaria a inserção, criando o seguinte registro:
1 - codigo da compra
1 - codigo do cliente
100 - valor da compra.
Sendo assim as duas tabelas estão vinculadas pelo campo codCli. se fosse fazer um select onde quissese pegar todas as compras do Marco, mostrar seu Codigo e seu valor, criaria uma query assim
Select c.nome, cc.codcompra, cc.valor
from clientes c, CompraCli cc
where c.codcli = cc.codcli
Espero ter esclarecido melhor a sua dúvida.
Acho q entendi...porém uma observação;
se eu quiser inserir valores para FK, devo fazer isso ao inserir os dados na tabela? por ex.:
strGravarAparelho = "INSERT INTO aparelho (marca, descricao, ID_cliente, ID_Orcamento) VALUES('" & marcatxt.Text & "', '" & descricaotxt.Text & "', " & codigoClientetxt.Text & "," & codigoOrcamentotxt.Text & ")"
CON.Execute (strGravarAparelho)
OBS: os campos de FK da tabela Aparelho são: (codigoOrcamentotxt.text e codigoClientetxt.text)
OBS: Se essa for uma das alternativas corretas de inserção de valores nas FK, esse campo não seria mais um campo comum igual aos outros, sem estar fazendo referencia de uma tabela a outra?
Desculpem a insistência, mas estou iniciando agora a utilizar VB com acesso a Banco de Dados...
se eu quiser inserir valores para FK, devo fazer isso ao inserir os dados na tabela? por ex.:
strGravarAparelho = "INSERT INTO aparelho (marca, descricao, ID_cliente, ID_Orcamento) VALUES('" & marcatxt.Text & "', '" & descricaotxt.Text & "', " & codigoClientetxt.Text & "," & codigoOrcamentotxt.Text & ")"
CON.Execute (strGravarAparelho)
OBS: os campos de FK da tabela Aparelho são: (codigoOrcamentotxt.text e codigoClientetxt.text)
OBS: Se essa for uma das alternativas corretas de inserção de valores nas FK, esse campo não seria mais um campo comum igual aos outros, sem estar fazendo referencia de uma tabela a outra?
Desculpem a insistência, mas estou iniciando agora a utilizar VB com acesso a Banco de Dados...
Tópico encerrado , respostas não são mais permitidas