Gilnet 0 Denunciar post Postado Janeiro 21, 2008 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
Gilnet 0 Denunciar post Postado Janeiro 22, 2008 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
Gilnet 0 Denunciar post Postado Janeiro 22, 2008 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