Ir para conteúdo

POWERED BY:

Arquivado

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

SerraVentura

Recuperando o ultimo ID de um INSERT...

Recommended Posts

sql = "INSERT INTO Pre_Carrinho_papelex (cep, email) VALUES ('',''); SELECT @@IDENTITY as idult"Set rs = Conn.Execute(sql)cok = rs("idult")
ERRO:

Item cannot be found in the collection corresponding to the requested name or ordinal.

ALGUÉM SABERIA DIZER O PQ DESSE ERRO?...O Q ESTOU FAZENDO DE ERRADO?VLW!

Compartilhar este post


Link para o post
Compartilhar em outros sites

sql = "SET NOCOUNT ON INSERT INTO Pre_Carrinho_papelex (cep, email) VALUES ('00000-000','email@email.com') SELECT @@IDENTITY as idult"Set rs = Conn.Execute(sql)cok = rs("idult")agora vai funfa!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para que serve esse NOCOUNT?Nesse SQl, ele INSERE os dados e faz a contagem, tudo junto?

Entaum cara, eu jah fazia esse esquema de inserir e jah retornar o id cadastrado na hora jah faz algum tempo, mas eu aprendi com um programador Senior de uma empresa que trabalhei faz algum tempo, eu nem perguntei o pq q tem que usar o SET NOCOUNT ON antes do insert pra funfa!mas este comando serve para o SQL na ora de executar qualquer comando naum retornar o número de registros afetados. ex:fiz um select e ele retorna no query analyzer 21 rows affected, se você colocar antes do select este SET NOCOUNT ON ele naum retorna isso....bom isto eh oq eu sei... se lguem quiser acrescentar... tb agradeço hehehehe http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

VLW Ratu!!vo colocar o que me responderam em outro forum...me deram a mesma solução... Assunto: Re: Recuperando o ultimo ID de um INSERT... erro 17/3/2006 7:46 Hora Oficial do Pacífico Por: Bruno Alexandre Em: microsoft.public.br.asp sei sim...o que encontras no Query Analyser e dizes que está certo, está errado :) pois o que vês na verdade é algo como:1 Row insertede depois o numero que é retornadoe é exactamente ISSO que o teu código apresenta e o SQL dá erro porque não encontra "1 row inserted"o que tens de fazer é retirar comentários antes de usares o código e voltar a activar os comentários depois da sua execução, e para isso modifica o teu código para:sql = "SET NOCOUNT ON; INSERT INTO Pre_Carrinho_papelex (cep, email) VALUES ('',''); SELECT @@IDENTITY as idult; SET NOCOUNT OFF;"mas ainda podes fazer melhor, ou seja, cirando uma função para te retornar sempre o numero que queres, como isto:function getIDfromDB( sSQL ) strQuery = "SET NoCount ON; " & sSQL & "; SELECT novoID = @@identity;SET NoCount OFF;" Set commInsert = Server.CreateObject("ADODB.Connection") commInsert.Open sConnection Set rsNewID = commInsert.Execute(strQuery) getIDfromDB = rsNewID("novoID") set commInsert = nothing end functione então em ves de:sql = "INSERT INTO Pre_Carrinho_papelex (cep, email) VALUES ('',''); SELECT@@IDENTITY as idult"Set rs = Conn.Execute(sql)cok = rs("idult")fazes sócok = getIDfromDB( "INSERT INTO Pre_Carrinho_papelex (cep, email) VALUES ('','');" )simples né? :-)Bruno Alexandre"a Portuguese in København, Denmark"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu cara!

Compartilhar este post


Link para o post
Compartilhar em outros sites

modo de fazer isso direto na procedure:

 

declare uma variável como INT e no final do insert, coloque:

 

SET @variável = (SELECT SCOPE_IDENTITY() novo_id)

 

e dê um RETURN dessa varíável.

 

Mas você tem que mudar o escopo da execução da procedure, seguindo o exemplo do W3C de execução de procedure em ASP e pedir declarar um parâmetro de retorno.

 

Funfa 100% e é seguro.

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.