Numéro d'article: 210504 - Dernière mise à jour: jeudi 23 juin 2005 - Version: 3.0

ACC2000 : Référence à un champ dans l'enregistrement précédent ou suivant

A noterCet article s'applique à un système d'exploitation différent de celui que vous utilisez. Le contenu de l'article qui ne vous concerne peut-être pas est désactivé.
Avancé : Nécessite une matière de programmation, l'interopérabilité et compétences multi-utilisateur.

Cet article s'applique uniquement à une base de données Microsoft Access (.mdb).

Sommaire

Agrandir tout | Réduire tout

Résumé

Cet article décrit deux méthodes que vous pouvez utiliser pour obtenir les valeurs à partir de la précédente ou l'enregistrement suivant à utiliser dans des calculs. La première méthode utilise la fonction DLookup() dans une expression ; la deuxième méthode utilise deux fonctions définies par l'utilisateur.

Remarque : vous pouvez voir une démonstration de la technique utilisée dans cet article dans l'exemple de fichier Qrysmp00.exe. Pour savoir comment obtenir cet exemple de fichier, consultez l'article suivant dans la base de connaissances Microsoft :
207626  (http://support.microsoft.com/kb/207626/EN-US/ ) ACC2000 : Exemples de requêtes Access 2000 disponibles au centre de téléchargement

Plus d'informations

Méthode 1: Utilisation DLookup()

Remarque : cette technique suppose que vous disposez d'une table avec un champ ID d'un type de données numérique, et que les valeurs d'ID ne manque n'importe quel nombre (ou nombres) dans un ordre séquentiel. Si votre table ne respecte pas ces critères, vous devez utiliser la méthode "Utilisation de code" décrite plus loin dans cet article.

Vous pouvez utiliser les exemples d'expressions DLookup() suivantes pour obtenir des valeurs d'un champ de l'enregistrement précédent ou suivant d'un formulaire, d'un rapport ou d'une requête.
Remarque : vous devez insérer le champ de données correctes, table, formulaire, rapport et ID de champ noms dans les exemples d'expressions suivants.

Dans un formulaire

Pour obtenir une valeur à partir d'un champ de l'enregistrement précédent, tapez la ligne suivante pour la propriété ControlSource de la zone de texte :
= DLookUp("[MyField]","MyTable","[ID]=Forms![MyForm]![ID]-1")
Pour obtenir une valeur à partir d'un champ de l'enregistrement suivant, tapez la ligne suivante pour la propriété ControlSource de la zone de texte :
= DLookUp("[MyField]","MyTable","[ID]=Forms![MyForm]![ID]+1")

Dans un rapport

Pour obtenir une valeur à partir d'un champ de l'enregistrement précédent, tapez la ligne suivante pour la propriété ControlSource de la zone de texte :
= DLookUp("[MyField]","MyTable","[ID]=Reports![MyReport]![ID]-1")
Pour obtenir une valeur à partir d'un champ de l'enregistrement suivant, tapez la ligne suivante pour la propriété ControlSource de la zone de texte :
= DLookUp("[MyField]","MyTable","[ID]=Reports![MyReport]![ID]+1")

Dans une requête

Pour obtenir une valeur à partir d'un champ de l'enregistrement précédent, tapez la ligne suivante dans la ligne champ de la grille de requête :
Expr1 : DLookUp("[MyField]","MyTable","[ID]=" & [ID]-1)
Pour obtenir une valeur à partir d'un champ de l'enregistrement suivant, tapez la ligne suivante dans la ligne champ de la grille de requête :
Expr1 : DLookUp("[MyField]","MyTable","[ID]=" & [ID]+1)
Remarque : dans ces exemples d'expressions, la valeur -1 et + 1 indiquent les enregistrements précédents et suivants. Lorsque l'enregistrement actif est le premier enregistrement dans le jeu d'enregistrements, la valeur -1 retourne une valeur null comme enregistrement précédent. De même, lorsque l'enregistrement actif est le dernier enregistrement dans le jeu d'enregistrements, le + 1 retourne une valeur NULL. Si vous souhaitez retourner une valeur à partir d'un enregistrement différent de celui suivant ou précédent, vous pouvez spécifier un numéro différent, par exemple, -3 du troisième enregistrement précédent.

Méthode 2: Utilisation de code

Microsoft fournit des exemples de programmation à des fins d'illustration uniquement, sans garantie expresse ou implicite. Cela inclut, mais n'est pas limité à, les garanties implicites de qualité marchande ou d'adéquation à un usage particulier. Cet article suppose que vous connaissez le langage de programmation présenté et les outils utilisés pour créer et déboguer des procédures. Les techniciens du support technique Microsoft peuvent vous aider à comprendre la fonctionnalité d'une procédure particulière, mais ils ne modifieront pas ces exemples pour fournir des fonctionnalités supplémentaires ou créer des procédures répondant à vos besoins spécifiques. Remarque : l'exemple de code dans cet article utilise Microsoft Data Access Objects. Pour ce code s'exécute correctement, vous devez référencer la bibliothèque d'objets Microsoft DAO 3.6. Pour ce faire, cliquez sur références dans le menu Outils dans Visual Basic Editor et assurez-vous que la case à cocher Bibliothèque d'objets Microsoft DAO 3.6 est activée.

Pour récupérer une valeur dans un champ à partir de l'enregistrement précédent ou suivant dans un formulaire à l'aide de code, procédez comme suit :
  1. Créer un nouveau module et tapez la ligne suivante dans la section Déclarations si elle n'est pas déjà :
    Option explicite
  2. Tapez les procédures suivantes :
    '*************************************************************
    ' 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
    					
L'exemple suivant montre comment utiliser la fonction PrécValEnr() dans un formulaire pour créer un journal kilométrique. La fonction personnalisée renvoie le compteur kilométrique précédent lecture, qui est utilisée pour calculer les miles par gallon (MPG) pour une automobile. Pour utiliser la fonction PrécValEnr(), procédez comme suit :
  1. Créez la table suivante et enregistrez-la en tant que Journal kilométrique :
    Field Name: ID
    Type de données : NuméroAuto
    Indexés : Oui (sans doublons)

    Field Name : date
    Des types de données : Date/heure

    Field Name : compteur
    Type de données : number
    Taille du champ : double

    Field Name : litres
    Type de données : number
    Taille du champ : double

    Clé primaire: ID
  2. Affichez la table Journal kilométrique en mode feuille de données et entrez les données d'exemple suivantes :
       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. Utilisez l'Assistant formulaire pour créer un nouveau formulaire sous forme de tableau basé sur la table Journal kilométrique. Inclure tous les Journal kilométrique table champs, sauf le code de champ.
  4. Affichez le formulaire en mode Création et ajoutez les contrôles de zone de trois texte suivant le formulaire :
    Texte boîte 1
    Nom : PrécCompteur
    SourceContrôle : =PrevRecVal(Form,"ID",[ID],"Odometer")
    Format : fixe

    Texte boîte 2
    Nom : MilesDriven
    SourceContrôle : =iif([PrevOdometer]=0,0,[Odometer]-[PrevOdometer])
    Format : fixe

    Zone de texte 3
    Nom: MPG
    SourceContrôle: = [MilesDriven] / [litres]
    Format : fixe
  5. Affichez le formulaire en mode formulaire. Notez que le formulaire affiche les informations suivantes :
       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
    					

Références

Pour plus d'informations sur l'entrée de données automatiquement dans un formulaire à l'aide des valeurs de l'enregistrement précédent, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
210236  (http://support.microsoft.com/kb/210236/EN-US/ ) ACC2000:Fill enregistre automatiquement avec des données à partir de l'enregistrement précédent

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Access 2000 Standard Edition
Mots-clés : 
kbmt kbfaq kbhowto kbinfo KB210504 KbMtfr
Traduction automatiqueTraduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 210504  (http://support.microsoft.com/kb/210504/en-us/ )
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.