Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Gilnet

Retornar o identity do SQLServer

Recommended Posts

Olá,

 

Preciso retornar o valor do campo identity do SQLServer. Alguém ajuda ????

 

Tenho a procedure abaixo no banco:

 

CREATE procedure iAgendaTelefone

(

@Operacao integer,

@idAgenda integer,

@Nome varchar(40),

@Contato varchar(30),

@EMail varchar(60),

@DataCadastro smalldatetime,

@DataAtualizacao smalldatetime

)

as

if(@Operacao = 1)

begin

insert into tbAgendaTelefone

(

Nome,

Contato,

EMail,

DataCadastro,

DataAtualizacao

)

values

(

upper(@Nome),

upper(@Contato),

upper(@EMail),

@DataCadastro,

@DataAtualizacao

)

select @@identity

return

end

 

end

 

No delphi:

 

pTelefone.Close;

pTelefone.Parameters.Clear;

pTelefone.Connection := dbConexao;

pTelefone.ProcedureName := 'iAgendaTelefone;1';

pAParametro;

pTelefone.Prepared := True;

pTelefone.Open; // Inclui o registro na tabela agenda de telefone

idAgenda := pTelefone.FieldByName('idAgenda').AsInteger;

 

Erro: idAgenda not found.

 

Obs.: pAParametro é um procedure onde está os campos que serão enviados ao banco através da stored procedure.

pTelefone é o TADOStoredProcedure.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

Fiz algumas mudanças e o problema agora é: Erro ao converter nulo para inteiro.

 

As mudanças foram:

 

na procedure foi acrescentado

@Agenda integer output

 

Após o insert(...) values(...)

select IDENT_CURRENT('tbAgendaTelefone') - dica do colega

ou

select @@identity as Agenda

return

 

no delphi:

 

pTelefone.Open;

ou

pTelefone.ExecProc;

pTelefone.Parameters.CreateParameter('Agenda', ftInteger, pdReturnValue, 0, 0);

idAgenda := pTelefone.Parameters.ParamValues['Agenda'];

 

em qualquer uma dessas siutações, ele retorna nulo.

 

Alguma dica ?????

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvido com a dica de um colega para eu usar o MAX ...A solução ficou:

 

CREATE procedure iAgendaTelefone

(

@Operacao integer,

@Nome varchar(40),

@Contato varchar(30),

@EMail varchar(60),

@DataCadastro smalldatetime,

@DataAtualizacao smalldatetime,

@idAgenda integer output

)

as

if(@Operacao = 1)

begin

insert into tbAgendaTelefone

(

Nome,

Contato,

EMail,

DataCadastro,

DataAtualizacao

)

values

(

upper(@Nome),

upper(@Contato),

upper(@EMail),

@DataCadastro,

@DataAtualizacao

)

select max(idAgenda) as idAgenda from tbAgendaTelefone

return

end

 

no Delphi:

pTelefone.Parameters.CreateParameter('idAgenda', ftInteger, pdReturnValue, 0, 0);

pTelefone.Open; //Como não estou usando @idAgenda e sim idAgenda para parâmetro, o método deve ser Open senão ele diz que não encontrou o campo idAgenda.

idAgenda := pTelefone.FieldByName('idAgenda').AsInteger;

 

Obrigado a todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.