ID do artigo: 221931 - Última revisão: quarta-feira, 24 de janeiro de 2007 - Revisão: 3.3

Como retornar o valor de AutoNumeração do registro inserido para o banco de dados do Access

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Recolher tudo

Sumário

Quando um novo registro é adicionado a um Recordset de ActiveX Data Objects (ADO) que contém um campo AutoNumeração, relatórios imediatamente o valor do campo AutoNumeração para o registro inserido retorna um valor de 0.

Este artigo descreve como recuperar o valor gerado automaticamente de um campo AutoNumeração de um registro inserido em um banco de dados Access com o ADO AddNew() e métodos Update(). O exemplo usa VBScript em uma página Active Server Pages (ASP).

Mais Informações

O código a seguir pressupõe que você tenha o banco de dados Adventure Works no seu computador e você tem um nome de fonte de dados ODBC (DSN) chamado AdvWorks apontando para ele.

O exemplo também inclui o arquivo Adovbs.inc, que pode ser encontrado no \Program Files\Common Files\System\Ado.

Esse código não solicita a qualquer entrada do usuário. Ele insere um registro na tabela Customers do banco de dados Adventure Works e exibe o valor do campo AutoNumeração (CustomerID) do novo registro.

A seguir estão alguns elementos chaves observar:
  • O CursorLocation deve ser adUseClient. Acesso não dá suporte a um cursor do lado do servidor.
  • A consulta para preencher o campo AutoNumeração com o valor gerado automaticamente, o conjunto de registros deve ser repetido usando o método Requery.
  • O método Requery redefine absolutePosition (indicador) do registro recém-inserido, para o primeiro registro do conjunto de registros requeried. Como resultado, o absolutePosition deve ser salvo antes de chamar RepetirConsulta e restaurado para o registro recém-inserido após ter sido chamada RepetirConsulta.
<%@ Language=VBScript %>
<HTML>
<BODY>

<!--#include file=adovbs.inc -->

<% 
Set objConn = CreateObject("ADODB.Connection")
Set objRS = CreateObject("ADODB.Recordset")

objConn.Open "DSN=advworks;"

'Access does not support a cursor engine so a client cursor must be used
objRS.CursorLocation = adUseClient

objRS.Open "SELECT * FROM Customers", objConn, adOpenStatic, adLockOptimistic

     ' when you invoke the method AddNew it adds a new record to the end of           
     ' your current recordset and places your cursor on that record.
     
objRS.AddNew
	objRS("CompanyName") = "Microsoft"
	objRS("ContactFirstName") = "Bob"
	objRS("ContactLastName") = "Smith"
objRS.Update

     ' when you invoke the method Update, it updates the database with the
     ' values of the new record that we just created.  To retrieve the 
     ' value of the Autonumber field we need to update the ADO recordset that
     ' currently have.

     ' When you do a Requery on your recordset, you lose your cursor.  So
     ' we need to store the location before we do the Requery, then reset
     ' it after the Requery.

'before the requery, the Autonumber field shows as 0
Response.Write "<br>ID before Requery = " & objRS("CustomerID")   

bookmark = objRS.absolutePosition  ' First, store the location of you cursor
objRS.Requery                      ' Next, update your recordset with the data from the database

'after the requery, the absolutePosition is the first record of the recordset
Response.Write "<br>ID before setting absolutePosition = " & objRS("CustomerID")

objRS.absolutePosition = bookmark  ' Finally, change your cursor back

'now we have the Autonumber value
Response.Write "<P>Added ID = " & objRS("CustomerID")

objRS.Close
objConn.Close
set objConn = nothing
set objRS = nothing
%>
</BODY>
</HTML>

				

Referências

Para obter informações adicionais sobre como usar campos AutoIncrement e ADO, consulte o seguinte artigo na Base de dados de Conhecimento da Microsoft:
195910  (http://support.microsoft.com/kb/195910/EN-US/ ) INFO: Colunas de identidade (AutoIncrement) em ADO ou RDS

A informação contida neste artigo aplica-se a:
  • Microsoft ActiveX Data Objects 1.5
  • Microsoft ActiveX Data Objects 2.0
  • Microsoft Internet Information Server 3.0
  • Microsoft Internet Information Server 4.0
  • Microsoft Internet Information Services 5.0
  • Microsoft Access 2.0 Standard Edition
  • Microsoft Access 95 Standard Edition
  • Microsoft Access 97 Standard Edition
Palavras-chave: 
kbmt kbdatabase kbfaq kbhowto kbinetdev KB221931 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 221931  (http://support.microsoft.com/kb/221931/en-us/ )