Makale numarası: 210504 - Son Gözden Geçirme: 23 Haziran 2005 Perşembe - Gözden geçirme: 3.0

ACC2000: önceki kaydı veya sonraki kayıttaki bir alan başvuran

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.
Gelişmiş: Uzman kodlama, birlikte çalışabilirlik ve çok kullanıcılı becerileri gerektirir.

Bu makale yalnızca Microsoft Access veritabanı (.mdb) için geçerlidir.

Bu Sayfada

Hepsini aç | Hepsini kapa

Özet

Bu makalede, önceki veya sonraki kaydı hesaplamalarda kullanılacak değerleri almak için kullanabileceğiniz iki yöntem açıklanır. Ilk yöntem DLookup() işlevi bir ifadede kullanır; ikinci yöntem, iki kullanıcı tanımlı işlevleri kullanır.

Not:, bu makalenin Qrysmp00.exe örnek dosyada kullanılan bir teknik gösterimini görebilirsiniz. Bu örnek dosyayı edinme hakkında daha fazla bilgi için lütfen Microsoft Knowledge Base'de aşağıdaki makaleye bakın:
207626  (http://support.microsoft.com/kb/207626/EN-US/ ) ACC2000: Access 2000 örnek sorgular kullanılabilir Yükleme Merkezi'ndeki

Daha fazla bilgi

Yöntem 1: DLookup() kullanma

Not: Bu tekniği bir KIMLIĞI alanını sayı veri türü içeren bir tablo varsa ve KOD değerleri herhangi numarasını (veya numaralarını) eksik olduğunu değil sırayla varsayar. Tablonuzu bu ölçütleri karşılamıyorsa, bu makalenin sonraki bölümlerinde açıklanan "Kodu kullanma" yöntemini kullanmanız gerekir.

Form, rapor veya sorguda, önceki veya sonraki kayıttaki bir alandan değerleri almak için aşağıdaki örnek DLookup() ifadeler kullanabilirsiniz.
Not: doğru veri alanı eklemeniz gerekir, bu tablo, form, rapor ve KIMLIĞI, aşağıdaki örnek ifadelerde adları alan.

Bir form içinde

Önceki kayıttaki bir alana bir değer elde etmek için <a0></a0>, metin kutusunun ControlSource özelliği için aşağıdaki satırı yazın:
DLookUp("[MyField]","MyTable","[ID]=Forms![MyForm]![ID]-1") =
Sonraki kayıttaki bir alana bir değer elde etmek için <a0></a0>, metin kutusunun ControlSource özelliği için aşağıdaki satırı yazın:
DLookUp("[MyField]","MyTable","[ID]=Forms![MyForm]![ID]+1") =

Bir rapor içinde

Önceki kayıttaki bir alana bir değer elde etmek için <a0></a0>, metin kutusunun ControlSource özelliği için aşağıdaki satırı yazın:
DLookUp("[MyField]","MyTable","[ID]=Reports![MyReport]![ID]-1") =
Sonraki kayıttaki bir alana bir değer elde etmek için <a0></a0>, metin kutusunun ControlSource özelliği için aşağıdaki satırı yazın:
DLookUp("[MyField]","MyTable","[ID]=Reports![MyReport]![ID]+1") =

Sorguda

Önceki kayıttaki bir alana bir değer elde etmek için <a0></a0>, sorgu tasarım kılavuzuna alan satırında aşağıdaki satırı yazın:
Deyim1 : DLookUp("[MyField]","MyTable","[ID]=" & [ID]-1)
Sonraki kayıttaki bir alana bir değer elde etmek için <a0></a0>, sorgu tasarım kılavuzuna alan satırında aşağıdaki satırı yazın:
Deyim1 : DLookUp("[MyField]","MyTable","[ID]=" & [ID]+1)
Not: Bu örnek deyimler içinde -1 ve + 1 önceki ve sonraki kayıtları gösterir. Recordset içindeki ilk kayıt geçerli kayıttır yok bir önceki kayıttaki olduğundan -1 bir değeri döndürür. Kümesindeki son kayıt geçerli kayıttır benzer şekilde, + 1 arası bir Null döndürür. Sonraki veya önceki dışındaki bir kayıttaki bir değer dönmek isterseniz, üçüncü bir önceki kayıttaki için -3 gibi başka bir sayı belirtebilirsiniz.

Yöntem 2: Kod kullanma

Microsoft, programlama örneklerini yalnızca gösterim amacıyla sağlar; örtülü veya açık garanti vermez. Buna satılabilirlik veya belirli bir amaca uygunluk zımni garantileri de dahildir, ancak bunlarla sınırlı değildir. Bu makale, gösterilen programlama dilini ve yordamları oluşturmak ve hata ayıklamak amacıyla kullanılan araçları kullanmayı bildiğinizi varsayar. Microsoft destek mühendisleri, belirli bir yordamın işlevselliğinin açıklanmasına yardımcı olabilir, ancak gereksinimlerinizi karşılamaya yönelik olarak ek işlevsellik sağlamak veya yordamlar geliştirmek amacıyla bu örnekleri değiştirmezler. Not: Bu makaledeki örnek kod Microsoft Data Access Objects kullanır. Bu kodun düzgün çalışması için Microsoft DAO 3.6 Nesne Kitaplığı'na başvurmalısınız. Bunu yapmak için <a0></a0>, Visual Basic Düzenleyicisi'nde Araçlar menüsünden Başvurular ' ı tıklatın ve sonra Microsoft DAO 3.6 Nesne Kitaplığı</a0> onay kutusunun seçili olduğundan emin olun.

Kod kullanarak formda önceki veya sonraki kayıttaki bir alana bir değer almak için aşağıdaki adımları izleyin:
  1. Yeni bir modül oluşturun ve zaten orada değilse, Tanımlamalar bölümüne aşağıdaki satırı yazın:
    Seçenek Belirtik
  2. Aşağıdaki yordamlar yazın:
    '*************************************************************
    ' 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
    					
Aşağıdaki örnek PrevRecVal() işlevi bir formda bir harcırah günlüğü oluşturmak için nas?l kullan?laca??n? gösterir. Özel işlevi bir otomobil için galon (MPG) başına mili hesaplamak için kullanılan okuma, bir önceki odometer döndürür. PrevRecVal() işlevini kullanmak için aşağıdaki adımları izleyin:
  1. Aşağıdaki yeni bir tablo oluşturmak ve harcırah günlüğü kaydedin:
    Ad alanı: KIMLIK
    Veri türü: OtomatikSayı
    Dizini: Evet (yineleme yok)

    Ad alanı: tarih
    Veri türü: Tarih/saat

    Ad alanı: Odometer
    Veri türü: sayı
    FieldSize: çift

    Ad alanı: galon
    Veri türü: sayı
    FieldSize: çift

    Birincil anahtar: KIMLIK
  2. Harcırah günlük tablosu, veri sayfası görünümünde ve aşağıdaki örnek veri girin:
       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. Harcırah Kütüğü tablosuna dayalı yeni bir sekmeli form oluşturmak için Form Sihirbazı'nı kullanın. Tüm harcırah Kütüğü tablosundaki alanları, dışında bir KIMLIK alanı.
  4. Formu Tasarım görünümünde görüntüleyin ve aşağıdaki üç metin kutusu denetimleri forma ekleyin:
    Metin kutusu 1
    Ad: PrevOdometer
    ControlSource: =PrevRecVal(Form,"ID",[ID],"Odometer")
    Biçim: sabit

    Metin kutusu 2
    Ad: MilesDriven
    ControlSource: =iif([PrevOdometer]=0,0,[Odometer]-[PrevOdometer])
    Biçim: sabit

    Metin kutusu 3
    Ad: MPG
    ControlSource: [MilesDriven] = / [galon]
    Biçim: sabit
  5. Formu Form görünümünde görüntüleyin. Not formu, aşağıdaki bilgileri görüntüler:
       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
    					

Referanslar

Veri, bir önceki kayıttaki değerleri kullanarak bir forma otomatik olarak girme hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
210236  (http://support.microsoft.com/kb/210236/EN-US/ ) ACC2000:Fill kayıt önceki kayıt verilerden ile otomatik olarak

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Access 2000 Standard Edition
Anahtar Kelimeler: 
kbmt kbfaq kbhowto kbinfo KB210504 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:210504  (http://support.microsoft.com/kb/210504/en-us/ )