none
Gravar Dados em Varias tabelas Banco de Dados RRS feed

  • Pergunta

  • Olá

    Tenho um formulário em uma aplicação e dividi-o em 4 partes, que serão gravadas em 4 tabelas diferentes do banco e essas tabelas deverão fazer referencias entre si.

    Minha dúvida é, como gravar os dados nas tabelas sem que aja erro. Por exemplo: O cliente preenche a primeira parte do formulário e clica em avançar. Esses dados preenchidos deverão ser gravados na tabela 1 do banco. No segundo formulário, o cliente continua preenchendo e ao clicar em avançar, esse dados deverão ser gravados na tabela 2 e assim sucessivamente. Porém, como fazer para que os dados sejam gravados sem erros, por exemplo, os dados da linha 1 da tabela 1 devem corresponder aos dados da linha 1 da tabela 2 e assim por diante. E se por acaso houver um problema depois de o cliente salvar os dados na tabela 1, como manter os dados consistentes? Espero que alguém possa me ajudar. Obrigado.


    Edinho

    quarta-feira, 2 de janeiro de 2013 10:43

Respostas

  • Edinhorod,

    Utilize o BEGIN TRANSACTION e dê COMMIT apenas quando tiver os inserts todos prontos, ou ROLLBACK caso ocorra alguma falha no cadastramento, segue um exemplo:

    BEGIN TRANSACTION @TranName;
    
    USE @BDName;
    
    INSERT 1;
    INSERT 2;
    INSERT 3;
    
    COMMIT TRANSACTION @TranName;
    GO

    Mais informações em:

    http://msdn.microsoft.com/en-us/library/ms188929.aspx


    Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quarta-feira, 2 de janeiro de 2013 11:04
  • Edinhorod,

    Para associar os registros que estão sendo inseridos utilize chaves estrangeiras, você pode fazer um select MAX no valor da coluna que identifica a tabela1, o novo registro a ser inserido será o valor retornado pela consulta +1, passe esse valor para uma variável e  depois passe a variável para os demais inserts como chaves estrangeiras.

    Segue exemplo:

    Tabela 1:

    |codigo  | descricao|

    |03        | joazinho  |

    Quando você fizer:

    Select (MAX(codigo)+1) as novo_valor from tabela1

    Encontrará o valor 4, é só passar esse valor para os outros inserts como valor da chave que ligará as tabelas, como abaixo.

    Declare @novo_valor int
    Set @novo_valor = Select (max(codigo)+1 from tabela1)
    
    Insert into tabela2 (codigo_tabela1) values (@novo_valor)


    Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quarta-feira, 2 de janeiro de 2013 11:17

Todas as Respostas

  • Edinhorod,

    Utilize o BEGIN TRANSACTION e dê COMMIT apenas quando tiver os inserts todos prontos, ou ROLLBACK caso ocorra alguma falha no cadastramento, segue um exemplo:

    BEGIN TRANSACTION @TranName;
    
    USE @BDName;
    
    INSERT 1;
    INSERT 2;
    INSERT 3;
    
    COMMIT TRANSACTION @TranName;
    GO

    Mais informações em:

    http://msdn.microsoft.com/en-us/library/ms188929.aspx


    Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quarta-feira, 2 de janeiro de 2013 11:04
  • Edinhorod,

    Para associar os registros que estão sendo inseridos utilize chaves estrangeiras, você pode fazer um select MAX no valor da coluna que identifica a tabela1, o novo registro a ser inserido será o valor retornado pela consulta +1, passe esse valor para uma variável e  depois passe a variável para os demais inserts como chaves estrangeiras.

    Segue exemplo:

    Tabela 1:

    |codigo  | descricao|

    |03        | joazinho  |

    Quando você fizer:

    Select (MAX(codigo)+1) as novo_valor from tabela1

    Encontrará o valor 4, é só passar esse valor para os outros inserts como valor da chave que ligará as tabelas, como abaixo.

    Declare @novo_valor int
    Set @novo_valor = Select (max(codigo)+1 from tabela1)
    
    Insert into tabela2 (codigo_tabela1) values (@novo_valor)


    Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quarta-feira, 2 de janeiro de 2013 11:17