文章編號: 210504 - 上次校閱: 2005年6月23日 - 版次: 3.0

ACC2000: 指的前一筆記錄或下一筆記錄中的欄位

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
進階: 須具備專家編碼、 互通性,與多使用者技能。

本文只適用於 Microsoft Access 資料庫 (.mdb)。

在此頁中

全部展開 | 全部摺疊

結論

本文將告訴您可用來取得值,從前一個] 或 [下一筆記錄,在計算中使用的兩個方法。第一種方法在運算式中使用 DLookup() 函式 ; 第二種方法使用兩個使用者自訂函數。

注意: 您所見的範例檔案 Qrysmp00.exe 中這份文件中使用的技巧示範。如需有關如何取得這個範例檔案,請參閱下列文 「 Microsoft 知識庫 」 中的資訊:
207626? (http://support.microsoft.com/kb/207626/EN-US/ ) ACC2000: Access 2000 範例使用中的查詢下載中心

其他相關資訊

方法 1: 使用 DLookup()

注意: 這項技術循序假設您有一個資料表的數字資料型別的一個 [識別碼] 欄位,而且任何數字 (或數字) 未遺漏 ID 值。如果您的資料表不符合這些準則,您應該使用本文稍後所述的使用的程式碼 」 方法。

您可以使用下列的範例 DLookup() 運算式來取得值,從一個表單、 一個報表或查詢的前一張或下一筆記錄中的欄位。
注意: 您必須插入正確的資料欄位、 資料表、 表單、 報表及識別碼] 欄位中下列的範例運算式的名稱。

在表單中

要從上一筆記錄中的欄位取得一個值中, 輸入下列行為文字方塊的 控制項資料來源] 屬性:
DLookUp("[MyField]","MyTable","[ID]=Forms![MyForm]![ID]-1") =
要從下一筆記錄中的欄位取得一個值中, 輸入下列行為文字方塊的 控制項資料來源] 屬性:
DLookUp("[MyField]","MyTable","[ID]=Forms![MyForm]![ID]+1") =

在報表中

要從上一筆記錄中的欄位取得一個值中, 輸入下列行為文字方塊的 控制項資料來源] 屬性:
DLookUp("[MyField]","MyTable","[ID]=Reports![MyReport]![ID]-1") =
要從下一筆記錄中的欄位取得一個值中, 輸入下列行為文字方塊的 控制項資料來源] 屬性:
DLookUp("[MyField]","MyTable","[ID]=Reports![MyReport]![ID]+1") =

在查詢中

若要取得值,從上一筆記錄之中的欄位,輸入下列命令在查詢格線的 [欄位] 列中:
Expr1: DLookUp("[MyField]","MyTable","[ID]="& [ID]-1)
從下一筆記錄中的欄位取得一個值,請查詢格線的 [欄位] 列中輸入下列命令:
Expr1: DLookUp("[MyField]","MyTable","[ID]="& [ID]+1)
注意: 在這些範例] 運算式-1 及 + 1 表示前一個和下一個記錄。當目前的記錄資料錄集內第一筆記錄-1 會傳回 Null 值,因為沒有上一筆記錄。同樣地,當目前的記錄資料錄集內最後一筆記錄 + 1 傳回一個 Null。若想從資料錄不是下一個或上一個傳回值,您可以指定其他數值,例如-3 第三個前一筆記錄。

方法 2: 使用程式碼

Microsoft 僅,為了說明提供程式設計範例,不提供任何明示或默示的保證。這包括,但不限於適售性或適合某特定用途之默示擔保責任。本文假設您已熟悉使用我們所示範的程式設計語言以及建立和偵錯程序所使用的工具。Microsoft 技術支援工程師可以協助解釋特定程序的功能,但它們不會修改這些範例以提供附加功能或建構程序,以符合您特定需求。注意: 本文中的範例程式碼會使用 Microsoft 資料存取物件。這個程式碼正常執行,您必須參考 Microsoft DAO 3.6 物件程式庫。以執行這項操作,按一下 引用項目 在 [工具] 功能表中 Visual Basic 編輯器] 中,請確定已選取 Microsoft DAO 3.6 物件程式庫] 核取方塊。

如果要使用的程式碼,從上一個或下一個資料錄,在表單中擷取欄位中的值,請依照下列步驟執行:
  1. 新的模組,然後輸入下列行,如果它已經不存在的宣告區段:
    外顯的選項
  2. 鍵入下列程序:
    '*************************************************************
    ' 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
    					
下列範例示範如何在表單中使用 PrevRecVal() 函數來建立里程數記錄檔。自訂函式會傳回用來計算每加侖 (MPG) 的汽車英哩先前 odometer 讀取。若要將 PrevRecVal() 函式請依照下列步驟執行:
  1. 建立下列新的資料表,然後將它儲存成里程數記錄檔:
    欄位名稱: 識別碼
    資料型別: [自動編號
    建立索引: [是 (不可重複)

    欄位名稱: 日期
    資料型別: 日期/時間

    欄位名稱: odometer
    資料類型: 數字
    fieldSize: 雙

    欄位名稱: 加侖
    資料類型: 數字
    fieldSize: 雙

    主索引鍵: 識別碼
  2. 在 [資料工作表] 檢視中檢視里程數記錄資料表並輸入下列的範例資料:
       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. 使用 「 表單精靈 」 來建立里程數記錄資料表為基礎的新表格式表單。加入所有里程數記錄的資料表欄位,除了 [識別碼] 欄位。
  4. 在 [設計] 檢視中檢視表單,並將下列三個文字方塊控制項加入至表單:
    文字方塊 1
    名稱: PrevOdometer
    控制項資料來源: =PrevRecVal(Form,"ID",[ID],"Odometer")
    格式: 固定

    文字方塊 2
    名稱: MilesDriven
    控制項資料來源: =iif([PrevOdometer]=0,0,[odometer]-[PrevOdometer])
    格式: 固定

    文字方塊 3
    名稱: MPG
    控制項資料來源: = [MilesDriven] / [加侖]
    格式: 固定
  5. 在 [表單檢視] 中檢視表單。請注意表單會顯示下列資訊:
       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
    					

?考

取得更多資訊有關資料會自動將輸入表單的使用前一筆記錄的值按一下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
210236? (http://support.microsoft.com/kb/210236/EN-US/ ) ACC2000:fill 自動記錄來自前一筆記錄的資料

這篇文章中的資訊適用於:
  • Microsoft Access 2000 Standard Edition
關鍵字:?
kbmt kbfaq kbhowto kbinfo KB210504 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:210504? (http://support.microsoft.com/kb/210504/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。