ID Artikel: 210504 - Kajian Terakhir: 19 September 2011 - Revisi: 2.0

ACC2000: Mengacu pada sebuah Field di rekor sebelumnya atau catatan berikutnya

Tips SistemThis article applies to a different operating system than the one you are using. Article content that may not be relevant to you is disabled.
Lanjutan: Memerlukan ahli coding, interoperabilitas, dan keterampilan multiuser.

Artikel ini hanya berlaku untuk Microsoft Access database (.mdb).

Pada Halaman ini

Perbesar semua | Perkecil semua

RINGKASAN

Artikel ini menjelaskan dua metode yang dapat Anda gunakan untuk mendapatkan nilai dari sebelumnya atau catatan berikutnya untuk digunakan dalam perhitungan. Metode pertama menggunakan DLookup() fungsi dalam ekspresi; Metode kedua menggunakan dua user-defined functions.

CATATAN: Anda dapat melihat demonstrasi teknik yang digunakan dalam artikel ini dalam sampel file Qrysmp00.exe. Untuk informasi tentang cara mendapatkan file sampel ini, silakan lihat artikel berikut di Microsoft Basis Pengetahuan:
207626  (http://support.microsoft.com/kb/207626/EN-US/ ) ACC2000: Akses 2000 sampel Queries tersedia di Pusat Download

INFORMASI LEBIH LANJUT

Metode 1: Menggunakan DLookup()

CATATAN: Teknik ini mengasumsikan bahwa Anda memiliki meja dengan bidang ID jenis data, dan bahwa nilai-nilai ID yang tidak hilang setiap nomor (atau nomor) di berurutan. Jika meja Anda tidak memenuhi kriteria ini, Anda harus menggunakan metode "Menggunakan kode" yang dijelaskan nanti dalam artikel ini.

Anda dapat menggunakan contoh berikut DLookup() ekspresi untuk mendapatkan nilai dari bidang dalam catatan sebelumnya atau yang berikutnya dari bentuk, laporan, atau permintaan.
CATATAN: Anda harus memasukkan kolom benar data, tabel, bentuk, laporan, dan nama field ID dalam ekspresi contoh berikut.

Dalam bentuk

Untuk mendapatkan nilai dari sebuah field di rekor sebelumnya, ketik berikut baris untuk kotak teks ControlSource Properti:
= DLookUp("[MyField]","MyTable","[ID] = Bentuk![MyForm]![ID]-1")
Untuk mendapatkan nilai dari bidang dalam catatan berikutnya, ketik baris berikut untuk kotak teks ControlSource Properti:
= DLookUp("[MyField]","MyTable","[ID] = Bentuk![MyForm]![ID]+1")

Dalam laporan

Untuk mendapatkan nilai dari sebuah field di rekor sebelumnya, ketik berikut baris untuk kotak teks ControlSource Properti:
= DLookUp("[MyField]","MyTable","[ID] = Laporan![MyReport]![ID]-1")
Untuk mendapatkan nilai dari bidang dalam catatan berikutnya, ketik baris berikut untuk kotak teks ControlSource Properti:
= DLookUp("[MyField]","MyTable","[ID] = Laporan![MyReport]![ID]+1")

Dalam permintaan

Untuk mendapatkan nilai dari sebuah field di rekor sebelumnya, ketik berikut baris dalam Lapangan baris grid permintaan:
Expr1: DLookUp ("[MyField]","MyTable","[ID]=" & [ID]-1)
Untuk mendapatkan nilai dari bidang dalam catatan berikutnya, ketik baris berikut dalam Lapangan baris grid permintaan:
Expr1: DLookUp ("[MyField]","MyTable","[ID]=" & [ID] + 1)
CATATAN: Dalam ekspresi sampel ini,-1 dan + 1 menunjukkan catatan sebelumnya dan berikutnya. Ketika rekor saat ini adalah catatan pertama dalam recordset,-1 kembali Null nilai karena tidak ada catatan yang sebelumnya. Demikian pula, ketika rekor saat ini adalah catatan terakhir dalam recordset, + 1 kembali Null. Jika Anda ingin mengembalikan nilai dari catatan lain selain yang berikutnya atau sebelumnya, Anda dapat menentukan nomor yang berbeda, misalnya,-3 untuk ketiga rekor sebelumnya.

Metode 2: Menggunakan kode

Microsoft menyediakan contoh pemrograman hanya sebagai ilustrasi, tanpa jaminan apa pun baik tersurat maupun tersirat. Termasuk, namun tidak terbatas pada, jaminan tersirat mengenai kelayakan untuk diperdagangkan atau kesesuaian untuk keperluan tertentu. Artikel ini mengasumsikan bahwa Anda telah terbiasa dengan bahasa pemrograman yang ditunjukkan dan dengan alat yang digunakan untuk membuat dan mendebug prosedur. Teknisi dukungan Microsoft dapat membantu menjelaskan fungsionalitas prosedur tertentu, namun mereka tidak akan memodifikasi contoh untuk memberikan fungsionalitas tambahan atau menyusun prosedur untuk memenuhi persyaratan khusus Anda. CATATAN: Kode contoh dalam artikel ini menggunakan Microsoft Data akses objek. Untuk kode ini untuk menjalankan dengan benar, Anda harus referensi perpustakaan objek Microsoft DAO 3,6. Untuk melakukannya, klik Referensi pada Alat menu di Editor Visual Basic, dan memastikan bahwa Perpustakaan objek Microsoft DAO 3,6 kotak centang dipilih.

Untuk mengambil nilai di bidang dari rekor sebelumnya atau yang berikutnya dalam bentuk dengan menggunakan kode, ikuti langkah berikut:
  1. Membuat modul baru dan ketik baris berikut di bagian Deklarasi jika tidak sudah ada:
    Option Explicit
  2. Jenis prosedur berikut:
    '*************************************************************
    ' 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
    					
Contoh berikut menunjukkan cara menggunakan fungsi PrevRecVal() dalam bentuk untuk membuat log jarak tempuh. Fungsi kustom kembali odometer sebelumnya membaca, yang digunakan untuk menghitung mil per galon (MPG) untuk sebuah mobil. Untuk menggunakan fungsi PrevRecVal(), ikuti langkah berikut:
  1. Membuat tabel baru berikut, dan kemudian menyimpannya sebagai jarak tempuh Log:
    Bidang Nama: ID
    Tipe data: AutoNumber
    Diindeks: Ya (tidak duplikat)

    Bidang Nama: tanggal
    Data ketik: Tanggal/waktu

    Bidang Nama: Odometer
    Tipe data: nomor
    FieldSize: ganda

    Bidang Nama: galon
    Tipe data: nomor
    FieldSize: ganda

    Primary Key: ID
  2. Melihat tabel Mileage Log dalam Datasheet pandangan dan masukkan berikut sampel data:
       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. Gunakan Wisaya bentuk untuk membuat bentuk tabular baru berdasarkan tabel Mileage Log. Termasuk semua Mileage Log tabel bidang, kecuali ID lapangan.
  4. Melihat bentuk dalam desain tampilan dan menambahkan kotak tiga teks berikut kontrol untuk bentuk:
    Kotak teks 1
    Nama: PrevOdometer
    ControlSource: =PrevRecVal(Form,"ID",[ID],"Odometer")
    Format: tetap

    Kotak teks 2
    Nama: MilesDriven
    ControlSource: =iif([PrevOdometer]=0,0,[Odometer]-[PrevOdometer])
    Format: tetap

    Kotak teks 3
    Nama: MPG
    ControlSource: = [MilesDriven] / [galon]
    Format: tetap
  5. Melihat bentuk dalam bentuk tampilan. Perhatikan bahwa bentuk menampilkan berikut informasi:
       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
    					

REFERENSI

Untuk informasi tambahan tentang memasukkan data secara otomatis ke dalam bentuk dengan menggunakan nilai-nilai dari rekor sebelumnya, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
210236  (http://support.microsoft.com/kb/210236/EN-US/ ) ACC2000:fill merekam dengan Data dari rekor sebelumnya secara otomatis

Berlaku bagi:
  • Microsoft Access 2000 Standard Edition
Kata kunci: 
kbhowto kbinfo kbmt KB210504 KbMtid
Penerjemahan MesinPenerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:210504  (http://support.microsoft.com/kb/210504/en-us/ )