Procedure para incrementar campo e retornar valor
Olá, Gente.
Estou começando com SQL-Server 7 e estou apanhando em alguns detalhes.
Tenho em um banco de dados uma tabela que possui
um único campo (Val_Atual tipo Integer) com um único registro.
Preciso fazer uma procedure que incremente o valor deste campo e que me retorne o valor depois de atualizado.
Se puderem me ajudar agradeço desde já.
Estou começando com SQL-Server 7 e estou apanhando em alguns detalhes.
Tenho em um banco de dados uma tabela que possui
um único campo (Val_Atual tipo Integer) com um único registro.
Preciso fazer uma procedure que incremente o valor deste campo e que me retorne o valor depois de atualizado.
Se puderem me ajudar agradeço desde já.
Marcelo.l
Curtidas 0
Respostas
Aroldo Zanela
20/12/2003
Colega,
Por que você não utiliza Identity? Já que o tipo é inteiro.
Por que você não utiliza Identity? Já que o tipo é inteiro.
GOSTEI 0
Marcelo.l
20/12/2003
Olá, Aroldo.
Desculpe por responder agora, (estava viajando).
O problema com campos Identity (ou autoinc) é que vc precisa salvar a tabela Master, recuperar o valor do campo Autoinc (que no caso também é o campo de ligação com a tabela Detail) aplicar este valor para cada registro da tabela Detail e só então salvar a tabela Detail.
Para o cadastro que estou fazendo é INDISPENSAVEL salvar o ´pacote´ todo, ou seja, salvar Master e Detail ao mesmo tempo. Então estou simulando um Generator do Firebird numa base SQL-Server.
Se houver outro modo de fazer isto (salvar Master e Detail juntos) me avise.
Valeu. Um abraço.
Desculpe por responder agora, (estava viajando).
O problema com campos Identity (ou autoinc) é que vc precisa salvar a tabela Master, recuperar o valor do campo Autoinc (que no caso também é o campo de ligação com a tabela Detail) aplicar este valor para cada registro da tabela Detail e só então salvar a tabela Detail.
Para o cadastro que estou fazendo é INDISPENSAVEL salvar o ´pacote´ todo, ou seja, salvar Master e Detail ao mesmo tempo. Então estou simulando um Generator do Firebird numa base SQL-Server.
Se houver outro modo de fazer isto (salvar Master e Detail juntos) me avise.
Valeu. Um abraço.
GOSTEI 0
Fabricio_saldanha
20/12/2003
Marcelo,
a algum tempo atraz eu te mandei uma procedure que já fazia este incremento e depois recuperava o valor atual, agora se o objetivo é criar um relacionmento master detail não existe problem em utilizar o campo autoincremento o que precissa ser feito é retirar o controle de transação do sql e passar a controlar a transação dentro do delphi não existe problema algum nisso qualquer duvida estou a disposição.
Fabricio Saldanha.
a algum tempo atraz eu te mandei uma procedure que já fazia este incremento e depois recuperava o valor atual, agora se o objetivo é criar um relacionmento master detail não existe problem em utilizar o campo autoincremento o que precissa ser feito é retirar o controle de transação do sql e passar a controlar a transação dentro do delphi não existe problema algum nisso qualquer duvida estou a disposição.
Fabricio Saldanha.
GOSTEI 0
Marcelo.l
20/12/2003
Olá, Fabricio.
Deixa ver se eu entendi.
O que vc propoem é que eu abra uma transação, salve a tabela master, recupere o valor do campo Identity, aplique o valor para os registro da tabela detail, salve a tabela detail e só então feche a transação?
É isto?
Ah!!! Quanto a solução à aquela precedure funcionou perfeitamente.
Eu também estava errando em abrir a StoredProc com ExecProc e não com Open.
Novamente, muito obrigado.
Peace. Out.
Deixa ver se eu entendi.
O que vc propoem é que eu abra uma transação, salve a tabela master, recupere o valor do campo Identity, aplique o valor para os registro da tabela detail, salve a tabela detail e só então feche a transação?
É isto?
Ah!!! Quanto a solução à aquela precedure funcionou perfeitamente.
Eu também estava errando em abrir a StoredProc com ExecProc e não com Open.
Novamente, muito obrigado.
Peace. Out.
GOSTEI 0
Fabricio_saldanha
20/12/2003
É isso mesmo, você deve utilizar o controle de transação do ADO ou outra tecnologia qualquer que esteja utilizando para conectar ao banco de dados. Como já havia dito eu uso normalmente e funciona.
Qualquer coisa estou a disposição.
Qualquer coisa estou a disposição.
GOSTEI 0