Artigo: 221931 - Última revisão: quarta-feira, 24 de Janeiro de 2007 - Revisão: 3.3

Foram inseridos como devolver o valor de numeração automática do registo na base 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 | Reduzir tudo

Sumário

Quando um novo registo é adicionado a um conjunto de registos de ActiveX Data Objects (ADO) que contém um campo de numeração automática, relatório imediatamente o valor do campo Numeração automática para o registo inserido devolve um valor de 0.

Este artigo descreve como obter o valor de um campo Numeração automática de um registo inserido uma base de dados Access com os métodos de Update() e ADO AddNew() gerado automaticamente. O exemplo utiliza VBScript numa página ASP (Active Server Pages).

Mais Informação

O seguinte código assume que tiver a base de dados Adamastor no computador e tiver um nome de origem de dados ODBC (DSN, Data Source Name) AdvWorks a apontar para o nome.

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

Este código não solicita ao utilizador quaisquer. Insere um registo na tabela clientes da base de dados Adamastor e apresenta o valor do campo Numeração automática (CódigoDoCliente) do novo registo.

Seguem-se alguns elementos chaves ter em conta:
  • O CursorLocation tem de ser adUseClient. Acesso não suporta um cursor do lado do servidor.
  • Para preencher o campo de numeração automática com o valor gerado automaticamente, o conjunto de registos tem de ser consultado utilizando o método RepetirConsulta.
  • O método Requery repõe absolutePosition (marcador) do registo recém-inserido, o primeiro registo do conjunto de registos requeried. Como resultado, o absolutePosition deve ser guardado antes de chamar RepetirConsulta e restaurado para o registo recém-inserido depois RepetirConsulta foi chamada.
<%@ 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 utilizar 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) no 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
  • Serviços de informação Internet 5.0 da Microsoft
  • 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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/ )