ID do artigo: 210504 - Última revisão: quinta-feira, 23 de junho de 2005 - Revisão: 3.0

ACC2000: Apresentar para um campo no registro anterior ou próximo registro

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.
Avançadas: Requer especialista de codificação, interoperabilidade e habilidades de multiusuário.

Este artigo se aplica somente a um banco de dados do Microsoft Access (.mdb).

Nesta página

Expandir tudo | Recolher tudo

Sumário

Este artigo descreve dois métodos que você pode usar para obter valores da anterior ou o próximo registro para ser usado em cálculos. O primeiro método utiliza a função DLookup() em uma expressão; o segundo método usa duas funções definidas pelo usuário.

Observação : você pode ver uma demonstração da técnica é usada neste artigo no arquivo de exemplo Qrysmp00.exe. Para obter informações sobre como obter esse arquivo de exemplo, consulte o seguinte artigo na Base de dados de Conhecimento da Microsoft:
207626  (http://support.microsoft.com/kb/207626/EN-US/ ) ACC2000: Access 2000 Sample consultas disponíveis no Centro de download

Mais Informações

Método 1: Usar DLookup()

Observação : esta técnica pressupõe que você tenha uma tabela com um campo de identificação de um tipo de dados número e que os valores de ID não estão faltando qualquer número (ou números) em ordem seqüencial. Se sua tabela não atender a esses critérios, você deve usar o método "Com código" descrito posteriormente neste artigo.

Você pode usar expressões de DLookup() de exemplo a seguir para obter valores de um campo no registro anterior ou próximo de um formulário, um relatório ou uma consulta.
Observação : você deve inserir o campo de dados correto, tabela, formulário, relatório e identificação do campo nomes em expressões de exemplo a seguir.

Em um formulário

Para obter um valor de um campo no registro anterior, digite a seguinte linha para a propriedade OrigemDoControle da caixa de texto:
= DLookUp("[MyField]","MyTable","[ID]=Forms![MyForm]![ID]-1")
Para obter um valor de um campo no próximo registro, digite a seguinte linha para a propriedade OrigemDoControle da caixa de texto:
= DLookUp("[MyField]","MyTable","[ID]=Forms![MyForm]![ID]+1")

Em um relatório

Para obter um valor de um campo no registro anterior, digite a seguinte linha para a propriedade OrigemDoControle da caixa de texto:
= DLookUp("[MyField]","MyTable","[ID]=Reports![MyReport]![ID]-1")
Para obter um valor de um campo no próximo registro, digite a seguinte linha para a propriedade OrigemDoControle da caixa de texto:
= DLookUp("[MyField]","MyTable","[ID]=Reports![MyReport]![ID]+1")

Em uma consulta

Para obter um valor de um campo no registro anterior, digite a seguinte linha na linha campo da grade da consulta:
Expr1: DLookUp("[MyField]","MyTable","[ID]=" & [ID]-1)
Para obter um valor de um campo no próximo registro, digite a seguinte linha na linha campo da grade da consulta:
Expr1: DLookUp("[MyField]","MyTable","[ID]=" & [ID]+1)
Observação : nessas expressões de exemplo, a -1 e + 1 indicam os registros anteriores e posteriores. Quando o registro atual é o primeiro registro no conjunto de registros, o-1 retorna um valor Nulo porque não há nenhum registro anterior. Da mesma forma, quando o registro atual for o último registro no conjunto de registros, o + 1 retorna um Nulo . Se você desejar retornar um valor de um registro diferente do seguinte ou anterior, você pode especificar um número diferente, por exemplo,-3 para o terceiro registro anterior.

Método 2: Usando código

Microsoft fornece exemplos de programação apenas para ilustração, sem garantia expressa ou implícita. Isso inclui, mas não está limitado a, garantias implícitas de comercialização ou adequação para uma finalidade específica. Este artigo presume que você está familiarizados com a linguagem de programação que está sendo demonstrada e com as ferramentas que são usadas para criar e depurar procedimentos. Engenheiros de suporte podem ajudar a explicar a funcionalidade de um determinado procedimento, mas eles não modificarão esses exemplos para fornecer funcionalidades adicionais ou construir procedimentos para atender às suas necessidades. Observação : O código de exemplo neste artigo usa o Microsoft Data Access Objects. Para que este código seja executado corretamente, você deve fazer referência a Microsoft DAO 3.6 Object Library. Para fazer isso, clique em referências no menu Ferramentas no Editor do Visual Basic e veja que a caixa de seleção Microsoft DAO 3.6 Object Library está selecionada.

Para recuperar um valor em um campo do registro anterior ou seguinte em um formulário usando código, execute estas etapas:
  1. Crie um novo módulo e digite a seguinte linha na seção Declarações caso ainda não estiver lá:
    opção EXPLICIT
  2. Digite os seguintes procedimentos:
    '*************************************************************
    ' FUNCTION: PrevRecVal()
    ' PURPOSE: Retrieve a value from a field in the previous form
    '          record.
    ' PARAMETERS:
    '    F        - The form from which to get the previous value.
    '    KeyName  - The name of the form's unique key field.
    '    KeyValue - The current record's key value.
    '    FieldNameToGet - The name of the field in the previous
    '                     record from which to retrieve the value.
    ' RETURNS: The value in the field FieldNameToGet from the
    '          previous form record.
    ' EXAMPLE:
    '    =PrevRecVal(Form,"ID",[ID],"OdometerReading")
    '**************************************************************
    Function PrevRecVal(F As Form, KeyName As String, KeyValue, _
    FieldNameToGet As String)
       Dim RS As DAO.Recordset
    
    On Error GoTo Err_PrevRecVal
    
       ' The default value is zero.
       PrevRecVal = 0
    
       ' Get the form recordset.
       Set RS = F.RecordsetClone
    
       ' Find the current record.
       Select Case RS.Fields(KeyName).Type
          ' Find using numeric data type key value?
          Case DB_INTEGER, DB_LONG, DB_CURRENCY, DB_SINGLE, _
          DB_DOUBLE, DB_BYTE
             RS.FindFirst "[" & KeyName & "] = " & KeyValue
          ' Find using date data type key value?
          Case DB_DATE
             RS.FindFirst "[" & KeyName & "] = #" & KeyValue & "#"
          'Find using text data type key value?
          Case DB_TEXT
             RS.FindFirst "[" & KeyName & "] = '" & KeyValue & "'"
          Case Else
             MsgBox "ERROR: Invalid key field data type!"
             Exit Function
       End Select
    
       ' Move to the previous record.
       RS.MovePrevious
    
       ' Return the result.
       PrevRecVal = RS(FieldNameToGet)
    
    Bye_PrevRecVal:
       Exit Function
    Err_PrevRecVal:
       Resume Bye_PrevRecVal
    End Function
    
    '************************************************************
    ' FUNCTION: NextRecVal()
    ' PURPOSE: Retrieve a value from a field in the next form
    '          record.
    '*************************************************************
    Function NextRecVal(F As Form, KeyName As String, KeyValue, _
    FieldNameToGet As String)
       Dim RS As DAO.Recordset
    
    On Error GoTo Err_NextRecVal
    
       ' The default value is zero.
       NextRecVal = 0
    
       ' Get the form recordset.
       Set RS = F.RecordsetClone
    
       ' Find the current record.
       Select Case RS.Fields(KeyName).Type
          ' Find using numeric data type key value?
          Case DB_INTEGER, DB_LONG, DB_CURRENCY, DB_SINGLE, _
          DB_DOUBLE, DB_BYTE
             RS.FindFirst "[" & KeyName & "] = " & KeyValue
          ' Find using date data type key value?
          Case DB_DATE
             RS.FindFirst "[" & KeyName & "] = #" & KeyValue & "#"
          ' Find using text data type key value?
          Case DB_TEXT
             RS.FindFirst "[" & KeyName & "] = '" & KeyValue & "'"
          Case Else
             MsgBox "ERROR: Invalid key field data type!"
             Exit Function
       End Select
    
       ' Move to the next record.
       RS.MoveNext
    
       ' Return the result.
       NextRecVal = RS(FieldNameToGet)
    
    Bye_NextRecVal:
       Exit Function
    Err_NextRecVal:
       Resume Bye_NextRecVal
    End Function
    					
O exemplo a seguir demonstra como usar a função PrevRecVal() em um formulário para criar um log de quilometragem. A função personalizada retorna o odômetro anterior de leitura, que é usado para calcular milhas por galão (MPG) para um automóvel. Para usar a função PrevRecVal(), execute estas etapas:
  1. Crie a seguinte nova tabela e, em seguida, salve-o como quilometragem log:
    Nomes de campos: identificação
    Tipo de dados: AutoNumeração
    Indexados: Sim (duplicação não autorizada)

    Nome de campo: data
    Tipo de dados: Data/hora

    Nome de campo: odômetro
    Tipo de dados: número
    Tamanho do campo: duplo

    Nome de campo: galões
    Tipo de dados: número
    Tamanho do campo: duplo

    Chave primária: ID
  2. Exibir a tabela de log de quilometragem no modo folha de dados e insira os seguintes dados de exemplo:
       ID   Date      Odometer   Gallons
       ---------------------------------
       1    6/21/94   77917.8    10.2
       2    6/25/94   78254.7    9.6
       3    6/30/94   78582.3    10
       4    7/5/94    78918.4    10.4
       5    7/10/94   79223.4    9.4
    					
  3. Use o Assistente de formulário para criar um novo formulário tabular com base na tabela de log de quilometragem. Incluir todos os log quilometragem tabela campos, exceto a identificação de campo.
  4. Exibir o formulário no modo de design e adicione os seguintes controles caixa de três texto ao formulário:
    caixa de texto 1
    Nome: PrevOdometer
    OrigemDoControle: =PrevRecVal(Form,"ID",[ID],"Odometer")
    Formato: fixo

    caixa de texto 2
    Nome: MilesDriven
    OrigemDoControle: =iif([PrevOdometer]=0,0,[Odometer]-[PrevOdometer])
    Formato: fixo

    caixa de texto 3
    Nome: MPG
    OrigemDoControle: = [MilesDriven] / [galões]
    Formato: fixo
  5. Exiba o formulário no modo de formulário. Observe que o formulário exibe as seguintes informações:
       Date     Odometer   Gallons  PrevOdometer  MilesDriven  MPG
       -------------------------------------------------------------
       6/21/94  77917.8    10.2     0             0            0
       6/25/94  78254.7     9.6     77917.80      336.90       35.09
       6/30/94  78582.3    10.0     78254.70      327.60       32.76
       7/05/94  78918.4    10.4     78582.30      336.10       32.32
       7/10/94  79223.4     9.4     78918.40      305.00       32.45
    					

Referências

Para obter informações adicionais sobre como inserir dados automaticamente em um formulário usando valores de registro anterior, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
210236  (http://support.microsoft.com/kb/210236/EN-US/ ) ACC2000:Fill gravar automaticamente com dados do registro anterior

A informação contida neste artigo aplica-se a:
  • Microsoft Access 2000 Standard Edition
Palavras-chave: 
kbmt kbfaq kbhowto kbinfo KB210504 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: 210504  (http://support.microsoft.com/kb/210504/en-us/ )