none
Inserir chave estrangeira RRS feed

  • Pergunta

  • Olá pessoal: Em um CRUD tenho o Form e um DataGridView. No Form tenho os campos da primeira tabela e no DataGrid os campos da segunda tabela. Como faço para inserir a chave estrangeira na segunda tabela. Desde já agradeço pela ajuda.
    sexta-feira, 27 de fevereiro de 2015 20:05

Respostas

  • Olá Paulo,

    Algumas perguntas:


    Sabemos que, se existem apenas duas tabelas, e vc deseja criar uma chave estrangeira desta "segunda tabela" vc tem que ter uma chave primária da "primeira tabela" certo? Acredito que até aqui esteja tudo certo.


    Você diz que" No Form tenho os campos da primeira tabela e no DataGrid os campos da 
    segunda tabela." estes campos já estão trazendo valores destas tabelas para aplicação?

    De acordo com o que você falou entendo dois possíveis cenários por enquanto, vamos ver se consigo te ajudar (Estou presumindo que vc está trabalhando com uma base SQL Server):



    1- Você já tem as tabelas criadas na base, já está trazendo os valores no form e no datagridview tudo funcionando. 
    Você quer garantir a integridade e consistência dos dados dessas duas tabelas.

    a. Se você não tem uma chave primaria em um campo id na primeira tabela, provavelmente deveria criar.
      Logo depois você pode criar uma chave estrangeira na segunda tabela referenciando esta primary key, 
      você pode executar este script na base substituindo o nome das colunas e tabelas (é claro):
    ex: 

    ALTER TABLE TABELA1 ADD PRIMARY KEY (ColunaXYZ)			
    --Esta é opcional
    ALTER TABLE DBO.PERSION ALTER COLUMN ColunaXYZ INT IDENTITY;  





    /*Se os nomes das colunas que você quer "amarrar" forem diferentes entre uma tabela 
    e outra você tem que especificar aqui, ou seja, em foreignkey vc especifica o nome 
    desta coluna na tabela2, e depois do references, vc referencia a "Tabela(ColunaPrimaryKey)"*/
    ALTER TABLE Tabela2			
    ADD CONSTRAINT FK_oNomeQueVocêQuiser FOREIGN KEY (ColunaXYZ)
    REFERENCES Tabela1(ColunaXYZ);

    
    




    2 - Você não está trazendo valores do banco de dados para sua aplicação. 
    Neste caso você deveria dar uma olhada em alguns tutoriais:

    https://msdn.microsoft.com/pt-br/library/vstudio/ms171890(v=vs.110).aspx

    http://www.devmedia.com.br/acesso-a-banco-de-dados-em-c-nivel-basico-parte-1/21695

    ou uma série de video aulas:

    https://www.youtube.com/watch?v=cDIIK_aQxyI







    sábado, 28 de fevereiro de 2015 06:09

Todas as Respostas

  • Cara, deixa eu ver se entendi. Você quer pegar o valor de um campo que esta no form e adicionar em um datagrid view ?

    Ou você quer pegar o campo de um formulario e adiconar na tabela do banco onde é mostrado no datagrid view ?

    Outra coisa, qual é o relacionamento da tabela 1x n ou n x n ?
    sexta-feira, 27 de fevereiro de 2015 20:43
  • Olá Paulo,

    Algumas perguntas:


    Sabemos que, se existem apenas duas tabelas, e vc deseja criar uma chave estrangeira desta "segunda tabela" vc tem que ter uma chave primária da "primeira tabela" certo? Acredito que até aqui esteja tudo certo.


    Você diz que" No Form tenho os campos da primeira tabela e no DataGrid os campos da 
    segunda tabela." estes campos já estão trazendo valores destas tabelas para aplicação?

    De acordo com o que você falou entendo dois possíveis cenários por enquanto, vamos ver se consigo te ajudar (Estou presumindo que vc está trabalhando com uma base SQL Server):



    1- Você já tem as tabelas criadas na base, já está trazendo os valores no form e no datagridview tudo funcionando. 
    Você quer garantir a integridade e consistência dos dados dessas duas tabelas.

    a. Se você não tem uma chave primaria em um campo id na primeira tabela, provavelmente deveria criar.
      Logo depois você pode criar uma chave estrangeira na segunda tabela referenciando esta primary key, 
      você pode executar este script na base substituindo o nome das colunas e tabelas (é claro):
    ex: 

    ALTER TABLE TABELA1 ADD PRIMARY KEY (ColunaXYZ)			
    --Esta é opcional
    ALTER TABLE DBO.PERSION ALTER COLUMN ColunaXYZ INT IDENTITY;  





    /*Se os nomes das colunas que você quer "amarrar" forem diferentes entre uma tabela 
    e outra você tem que especificar aqui, ou seja, em foreignkey vc especifica o nome 
    desta coluna na tabela2, e depois do references, vc referencia a "Tabela(ColunaPrimaryKey)"*/
    ALTER TABLE Tabela2			
    ADD CONSTRAINT FK_oNomeQueVocêQuiser FOREIGN KEY (ColunaXYZ)
    REFERENCES Tabela1(ColunaXYZ);

    
    




    2 - Você não está trazendo valores do banco de dados para sua aplicação. 
    Neste caso você deveria dar uma olhada em alguns tutoriais:

    https://msdn.microsoft.com/pt-br/library/vstudio/ms171890(v=vs.110).aspx

    http://www.devmedia.com.br/acesso-a-banco-de-dados-em-c-nivel-basico-parte-1/21695

    ou uma série de video aulas:

    https://www.youtube.com/watch?v=cDIIK_aQxyI







    sábado, 28 de fevereiro de 2015 06:09