Array
(
)

Procedure para incrementar campo e retornar valor

Marcelo.l
   - 20 dez 2003

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á.

Aroldo Zanela
   - 14 jan 2004

Colega,

Por que você não utiliza Identity? Já que o tipo é inteiro.

Marcelo.l
   - 17 jan 2004

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.

Fabricio_saldanha
   - 18 jan 2004

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.

Marcelo.l
   - 18 jan 2004

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.

Fabricio_saldanha
   - 19 jan 2004

É 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.