Page d'Accueil

Opérations Rapport-Basées

 

Fonctions globales de domaine

 

Introduction

Dans des leçons précédentes, nous avons vu quel rôle valable un rapport entre deux tables peut jouer, permettant à des données d'une d'être directement disponibles à l'autre. Dans certains cas, vous ne voudrez pas que des données d'une table soient accédées juste de toute façon d'une autre table. Pour contrôler l'écoulement, vous pouvez placer une condition qui doit être met. Ceci te permet également de limiter un disque spécifique au lieu de considérer tous les disques, simplement parce qu'ils s'avèrent justement avoir une valeur assortie dans la clef étrangère d'une table d'enfant. Pour placer la condition qui serait employée pour rechercher un disque spécifique, vous pouvez employer une des fonctions désignées sous le nom des agrégats de domaine.

 

Étude pratique Étude pratique : Présentation des fonctions globales de domaine

  1. Commencer le Microsoft Access et créer une base de données blanche appelée magasin de matériel de Sure Stuff
  2. Sur le menu principal, cliquer l'insertion - > Tableau
  3. Dans la nouvelle zone de dialogue de Tableau, double-cliquer la vue de conception
  4. Créer les champs suivants :
     
    Nom de champ Type de données Légende Taille de champ D'autres propriétés
    ItemID AutoNumber Identification d'article   Clef primaire
    ItemNumber   Article # 10  
    ItemName   Nom d'article 100  
    UnitPrice Nombre Prix unitaire Double Format : Fixe
  5. Économiser la forme comme StoreItems et le commuter à la vue de Datasheet
  6. Créer les articles suivants de magasin (laisser le Microsoft Access produisent des nombres d'identification d'article) :
     
    Identification d'article Article # Nom d'article Prix unitaire
    1 100001 Corde extérieure 25 ' 125V de prolongation 14.95
    2 100002 Téléphone sans fil avec le répondeur 85.95
    3 100003 Robinet de cuisine 64.95
    4 100004 Ongle 4Pack de maçonnerie 6.15
    5 100005 Ongle concret de vis 5.95
    6 100006 Calfeutrer le pistolet - 6 paquets 42.05
    7 100007 Plat de mur de deux commutateurs - 10 paquets 23.25
    8 100008 Bras 13 de prolongation de douche " 39.95
    9 100009 Arroseuse 6Pack d'oscillateur 38.95
    10 100010 Bec réglable de l'eau de pulvérisation - 12Pack 52.85
    11 100011 Ventilateur de plafond 175.95
    12 100012 Aspirateur de vapeur 225.55
    13 100013 Serrure maximum de Deadbolt de cylindre de double de sécurité - 4Pack 152.75
    14 100014 Heurtoir de porte 35.75
    15 100015 Clé réglable 22.95
    16 100016 Montage de plafond 9.45
    17 100017 Décapant bactérien de Drainpipe - 12Pack 105.15
    18 100018 Activateur septique de réservoir - 6Pack 68.95
    19 100019 Verre et chaises extérieurs de patio 745.85
    20 100020 Balai universel de maïs 62.95
  7. Fermer la table et la cliquer dans la section de Tableaux de la fenêtre de base de données pour s'assurer qu'elle est choisie
  8. Sur la base de données toolbar, cliquer la flèche du nouveau bouton d'objet et cliquer AutoForm
  9. Économiser la forme comme StoreItems et ajuster sa conception comme suit :
     
  10. Droit-cliquer la forme et cliquer l'en-tête bas de page de forme
  11. Employer le magicien de bouton de commande pour créer un bouton qui serait utilisé pour fermer la forme. Placer la légende du bouton à la fin et son nom au cmdClose
  12. Économiser la forme et la fermer
  13. Dans la section de Tableaux de la fenêtre de base de données, double-cliquer créent le Tableau dans la vue de conception
  14. Accomplir la table comme suit :
     
    Nom de champ Type de données Légende Taille de champ Format D'autres propriétés
    ReceiptID AutoNumber Reçu #      Clef primaire
    OrderDate   Date d'ordre   densité double-mmm-yyyy Masque d'entrée : 99 \ - >L<LL \ - 0000 ; 0 ; _
    Valeur par défaut : =Date ()
    Item1Number     10     
    Item1Name   100   
    Item1UnitPrice Nombre   Double Fixe  
    Item1Quantity Nombre   Nombre entier    
    Item1SubTotal Nombre   Double Fixe  
    Item2Number     10    
    Item2Name     100    
    Item2UnitPrice Nombre   Double Fixe  
    Item2Quantity Nombre   Nombre entier    
    Item2SubTotal Nombre   Double Fixe  
    Item3Number     10    
    Item3Name     100    
    Item3UnitPrice Nombre   Double Fixe  
    Item3Quantity Nombre   Nombre entier    
    Item3SubTotal Nombre   Double Fixe  
    Item4Number     10    
    Item4Name     100    
    Item4UnitPrice Nombre   Double Fixe  
    Item4Quantity Nombre   Nombre entier    
    Item4SubTotal Nombre   Double Fixe  
    Item5Number     10    
    Item5Name     100    
    Item5UnitPrice Nombre   Double Fixe  
    Item5Quantity Nombre   Nombre entier    
    Item5SubTotal Nombre   Double Fixe  
    Item6Number     10    
    Item6Name     100    
    Item6UnitPrice Nombre   Double Fixe  
    Item6Quantity Nombre   Nombre entier    
    Item6SubTotal Nombre   Double Fixe  
    ItemsTotal Nombre Total d'articles Double Fixe  
    SalesTaxRate Nombre Taux d'imposition fiscal Double Pour cent Valeur par défaut : 0.0775
    SalesTaxAmount Nombre Quantité d'impôts Double Fixe  
    OrderNetPrice Nombre Prix d'ordre Double Fixe  
  15. Économiser la table comme CustomersOrders et le clôturer
  16. Employer le nouvel objet : Le bouton d'AutoForm sur la base de données toolbar, produisent d'une forme et la sauvent comme CustomersOrders
  17. Changer sa conception comme suit :
     
  18. Économiser la forme
  19. Sur la forme, cliquer la boîte des textes sous l'étiquette de quantité
  20. Dans l'étiquette d'événements de la fenêtre de propriétés, double-cliquer sur le foyer perdu, et cliquer son bouton d'ellipses
  21. Créer un nouveau procédé et mettre en application l'événement comme suit :
     
    Private Sub EvaluateOrder()
        Dim dblItemsTotal As Double
        Dim dblTaxAmount As Double
        Dim dblNetPrice As Double
        
        dblItemsTotal = Val(Nz([Item1SubTotal]) + Nz([Item2SubTotal]) + _
                           Nz([Item3SubTotal]) + Nz([Item4SubTotal]) + _
                           Nz([Item5SubTotal]) + Nz([Item6SubTotal]))
        dblTaxAmount = CLng(dblItemsTotal * Nz([SalesTaxRate]) * 100) / 100
        dblNetPrice = dblItemsTotal + dblTaxAmount
        
        Me.ItemsTotal = dblItemsTotal
        Me.SalesTaxAmount = dblTaxAmount
        Me.OrderNetPrice = dblNetPrice
    End Sub
    
    Private Sub Item1Quantity_LostFocus()
        [Item1SubTotal] = Eval([Item1UnitPrice] * [Item1Quantity])
        EvaluateOrder
    End Sub
  22. Revenir au Microsoft Access et, sur la forme, cliquer la deuxième boîte des textes sous la quantité
  23. Dans l'étiquette d'événements de la fenêtre de propriétés, double-cliquer sur le foyer perdu et cliquer son bouton de points de suspension pour mettre en application l'événement comme suit :
     
    Private Sub Item2Quantity_LostFocus()
        [Item2SubTotal] = Eval([Item2UnitPrice] * [Item2Quantity])
        EvaluateOrder
    End Sub
  24. Revenir au Microsoft Access et, sur la forme, cliquer la troisième boîte des textes sous la quantité
  25. Dans l'étiquette d'événements de la fenêtre de propriétés, double-cliquer sur le foyer perdu et cliquer son bouton de points de suspension pour mettre en application l'événement comme suit :
     
    Private Sub Item3Quantity_LostFocus()
        [Item3SubTotal] = Eval([Item3UnitPrice] * [Item3Quantity])
        EvaluateOrder
    End Sub
  26. Revenir au Microsoft Access et, sur la forme, cliquer la quatrième boîte des textes sous la quantité
  27. Dans l'étiquette d'événements de la fenêtre de propriétés, double-cliquer sur le foyer perdu et cliquer son bouton de points de suspension pour mettre en application l'événement comme suit :
     
    Private Sub Item4Quantity_LostFocus()
        [Item4SubTotal] = Eval([Item4UnitPrice] * [Item4Quantity])
        EvaluateOrder
    End Sub
  28. Revenir au Microsoft Access et, sur la forme, cliquer la cinquième boîte des textes sous la quantité
  29. Dans l'étiquette d'événements de la fenêtre de propriétés, double-cliquer sur le foyer perdu et cliquer son bouton de points de suspension pour mettre en application l'événement comme suit :
     
    Private Sub Item5Quantity_LostFocus()
        [Item5SubTotal] = Eval([Item5UnitPrice] * [Item5Quantity])
        EvaluateOrder
    End Sub
  30. Revenir au Microsoft Access et, sur la forme, cliquer la sixième boîte des textes sous la quantité
  31. Dans l'étiquette d'événements de la fenêtre de propriétés, double-cliquer sur le foyer perdu et cliquer son bouton de points de suspension pour mettre en application l'événement comme suit :
     
    Private Sub Item6Quantity_LostFocus()
        [Item6SubTotal] = Eval([Item6UnitPrice] * [Item6Quantity])
        EvaluateOrder
    End Sub
  32. Revenir à la forme et la sauver

Employer une fonction d'agrégat de domaine

Une fonction d'agrégat de domaine a la syntaxe suivante :

DFunctionName (expression, domaine, critères)

Le facteur de DFunctionName est le nom de la fonction. L'argument d'expression peut être le nom d'une colonne sur laquelle la fonction agira. Ce peut également être une expression calcul-basée. L'argument de domaine peut être le nom d'une table ou de celle d'une question qui n'exige pas une valeur externe. Les critères d'argument est facultatif. Si passé, il peut indiquer la condition employée pour choisir un disque spécifique.

Considérer la table suivante :

Certaines des fonctions d'agrégat de domaine ressemblent aux fonctions globales de SQL que nous avons passées en revue dans la leçon précédente. Il y a autres additionnels :

  • DCount : La fonction de DCount () peut être employée pour compter le nombre de disques d'une table ou d'une question différente. En appelant cette fonction, le premier argument devrait toujours être le nom d'une colonne. Voici un exemple :
     
    =DCount("Title","Videos")

    Ce code renvoie tout le nombre de videos qui ont une valeur dans la colonne de titre. La fonction de DCount() ne compte pas les disques où la valeur d'expression est NULLE. Comme mentionné dans la syntaxe de l'agrégat de domaine fonctionne, vous pouvez employer un critère pour choisir les disques spécifiques. Voici un exemple :

    =DCount("Title","Videos","Rating = 'R'")

    Dans ce cas-ci, la fonction renverra le nombre de videos qui sont R évalués de notre table.
     

  • DSum : La fonction de DSum () peut calculer le total de valeurs (numériques) d'une colonne à une table (ou à la question). Voici un exemple qui renverra la quantité que nous avons dépensé acheter les videos de la table ci-dessus :
     
    =DSum("PriceBought","Videos")
  • DAvg : La fonction de DAvg () est employée pour calculer la moyenne de valeurs (numériques) d'une colonne d'une table. Voici un exemple qui produit le prix moyen des videos de la table ci-dessus :
     
    =DAvg("PriceBought","Videos")
  • DMin et DMax : Le DMin () (ou le DMax ()) la fonction est employée pour calculer le minimum (ou le maximum) des valeurs d'une colonne à une table ou à une question différente. S'il y a seulement une valeur dans le groupe, les deux fonctions renvoient la même valeur.
  • DFirst et DLast : Le DFirst () (ou le DLast ()) la fonction est employée pour obtenir la première (ou le bout) valeur d'une colonne à une table ou à une question. S'il y a seulement une valeur dans le groupe, les deux fonctions renvoient la même valeur.
  • DStDev et DStDevP : La fonction de StDev () est employée pour calculer l'écart type des valeurs numériques de l'les disques d'une table ou d'une question. La fonction de DStDevP () est employée pour calculer l'écart type d'un échantillon de population des valeurs numériques de l'les disques d'une table ou d'une question. S'il n'y a aucune valeur ou la même valeur dans le groupe considéré, cette NULLE de retours de fonction. Ceci signifie qu'il devrait y avoir au moins deux valeurs différentes dans le groupe. Voici un exemple :
     
  • DVar et DVarP : La fonction de DVar () calcule le désaccord statistique des valeurs (numériques) d'une table ou d'une question. La fonction de DVarP () calcule le désaccord d'une population. S'il n'y a aucune valeur ou la même valeur dans le groupe considéré, NULLE de retour de ces fonctions. Voici un exemple :
     
  • DLookup : La fonction de DLookup () peut être employée pour trouver un ou plusieurs disques qui répondent à un critère d'une table ou d'une question différente.

 

 

Étude pratique Étude pratique : Employer une fonction d'agrégat de domaine

  1. Sur la forme, cliquer la première boîte des textes sous le nombre d'article
  2. Dans la fenêtre de propriétés, double-cliquer sur le foyer perdu
  3. Cliquer son bouton de points de suspension et mettre en application l'événement comme suit :
     
    Private Sub Item1Number_LostFocus()
    On Error GoTo ErrorOccurred
    
        ' In the StoreItems table, look for an item that matches the item number
        If Not IsNull(DLookup("ItemName", "StoreItems", "ItemNumber = '" & Item1Number & "'")) Then
            ' If you find it, retrieve the corresponding item name
            [Item1Name] = DLookup("ItemName", "StoreItems", "ItemNumber = '" & Item1Number & "'")
            [Item1UnitPrice] = DLookup("UnitPrice", "StoreItems", "ItemNumber = '" & Item1Number & "'")
            ' Since you found the item, set the quantity to 1 as default
            [Item1Quantity] = "1"
            ' Set the default sub-total to the unit price
            [Item1SubTotal] = [Item1UnitPrice]
            ' and evaluate the order
            EvaluateOrder
        Else
            ' If you didn't find any item with this item number,
            ' reset the current item to nothing selected
            [Item1Number] = "000000"
            [Item1Name] = ""
            [Item1UnitPrice] = "0.00"
            [Item1Quantity] = "0"
            [Item1SubTotal] = "0.00"
        End If
    
    GetOuttaHere:
        Exit Sub
        
    ErrorOccurred:
        If Err.Number = -2147352567 Then
            [Item1Number] = "000000"
            [Item1Name] = "Miscellaneous"
            [Item1UnitPrice] = "0.00"
            [Item1Quantity] = "0"
            [Item1SubTotal] = "0.00"
            Item1Number.SetFocus
            Resume GetOuttaHere
        Else
            MsgBox "An error occured when retrieving the product information" & vbCrLf & _
                   "Please call the program vendor and report the error as follows:" & vbCrLf & _
                   "Error #: " & Err.Number & vbCrLf & _
                   "Reason:  " & Err.Description
            Resume Next
        End If
    End Sub
  4. Revenir au Microsoft Access et, sur la forme, cliquer la deuxième boîte des textes sous le nombre d'article
  5. Dans l'étiquette d'événements de la fenêtre de propriétés, double-cliquer sur le foyer perdu et cliquer son bouton de points de suspension pour mettre en application l'événement comme suit :
     
    Private Sub Item2Number_LostFocus()
    On Error GoTo ErrorOccurred
    
        If Not IsNull(DLookup("ItemName", "StoreItems", "ItemNumber = '" & Item2Number & "'")) Then
            [Item2Name] = DLookup("ItemName", "StoreItems", "ItemNumber = '" & Item2Number & "'")
            [Item2UnitPrice] = DLookup("UnitPrice", "StoreItems", "ItemNumber = '" & Item2Number & "'")
            [Item2Quantity] = "1"
            [Item2SubTotal] = [Item2UnitPrice]
            EvaluateOrder
        Else
            [Item2Number] = "000000"
            [Item2Name] = ""
            [Item2UnitPrice] = "0.00"
            [Item2Quantity] = "0"
            [Item2SubTotal] = "0.00"
        End If
    
    GetOuttaHere:
        Exit Sub
        
    ErrorOccurred:
        If Err.Number = -2147352567 Then
            [Item2Number] = "000000"
            [Item2Name] = "Miscellaneous"
            [Item2UnitPrice] = "0.00"
            [Item2Quantity] = "0"
            [Item2SubTotal] = "0.00"
            Item2Number.SetFocus
            Resume GetOuttaHere
        Else
            MsgBox "An error occurred when retrieving the product information" & vbCrLf & _
                   "Please call the program vendor and report the error as follows:" & vbCrLf & _
                   "Error #: " & Err.Number & vbCrLf & _
                   "Reason:  " & Err.Description
            Resume Next
        End If
    End Sub
  6. Revenir au Microsoft Access et, sur la forme, cliquer la troisième boîte des textes sous le nombre d'article
  7. Dans l'étiquette d'événements de la fenêtre de propriétés, double-cliquer sur le foyer perdu et cliquer son bouton de points de suspension pour mettre en application l'événement comme suit :
     
    Private Sub Item3Number_LostFocus()
    On Error GoTo ErrorOccurred
    
        If Not IsNull(DLookup("ItemName", "StoreItems", "ItemNumber = '" & Item3Number & "'")) Then
            [Item3Name] = DLookup("ItemName", "StoreItems", "ItemNumber = '" & Item3Number & "'")
            [Item3UnitPrice] = DLookup("UnitPrice", "StoreItems", "ItemNumber = '" & Item3Number & "'")
            [Item3Quantity] = "1"
            [Item3SubTotal] = [Item3UnitPrice]
            EvaluateOrder
        Else
            [Item3Number] = "000000"
            [Item3Name] = ""
            [Item3UnitPrice] = "0.00"
            [Item3Quantity] = "0"
            [Item3SubTotal] = "0.00"
        End If
    
    GetOuttaHere:
        Exit Sub
        
    ErrorOccurred:
        If Err.Number = -2147352567 Then
            [Item3Number] = "000000"
            [Item3Name] = "Miscellaneous"
            [Item3UnitPrice] = "0.00"
            [Item3Quantity] = "0"
            [Item3SubTotal] = "0.00"
            Item3Number.SetFocus
            Resume GetOuttaHere
        Else
            MsgBox "An error occured when retrieving the product information" & vbCrLf & _
                   "Please call the program vendor and report the error as follows:" & vbCrLf & _
                   "Error #: " & Err.Number & vbCrLf & _
                   "Reason:  " & Err.Description
            Resume Next
        End If
    End Sub
  8. Revenir au Microsoft Access et, sur la forme, cliquer la quatrième boîte des textes sous le nombre d'article
  9. Dans l'étiquette d'événements de la fenêtre de propriétés, double-cliquer sur le foyer perdu et cliquer son bouton de points de suspension pour mettre en application l'événement comme suit :
     
    Private Sub Item4Number_LostFocus()
    On Error GoTo ErrorOccurred
    
        If Not IsNull(DLookup("ItemName", "StoreItems", "ItemNumber = '" & Item4Number & "'")) Then
            [Item4Name] = DLookup("ItemName", "StoreItems", "ItemNumber = '" & Item4Number & "'")
            [Item4UnitPrice] = DLookup("UnitPrice", "StoreItems", "ItemNumber = '" & Item4Number & "'")
            [Item4Quantity] = "1"
            [Item4SubTotal] = [Item4UnitPrice]
            EvaluateOrder
        Else
            [Item4Number] = "000000"
            [Item4Name] = ""
            [Item4UnitPrice] = "0.00"
            [Item4Quantity] = "0"
            [Item4SubTotal] = "0.00"
        End If
    
    GetOuttaHere:
        Exit Sub
        
    ErrorOccurred:
        If Err.Number = -2147352567 Then
            [Item4Number] = "000000"
            [Item4Name] = "Miscellaneous"
            [Item4UnitPrice] = "0.00"
            [Item4Quantity] = "0"
            [Item4SubTotal] = "0.00"
            Item4Number.SetFocus
            Resume GetOuttaHere
        Else
            MsgBox "An error occured when retrieving the product information" & vbCrLf & _
                   "Please call the program vendor and report the error as follows:" & vbCrLf & _
                   "Error #: " & Err.Number & vbCrLf & _
                   "Reason:  " & Err.Description
            Resume Next
        End If
    End Sub
  10. Revenir au Microsoft Access et, sur la forme, cliquer la cinquième boîte des textes sous le nombre d'article
  11. Dans l'étiquette d'événements de la fenêtre de propriétés, double-cliquer sur le foyer perdu et cliquer son bouton de points de suspension pour mettre en application l'événement comme suit :
     
    Private Sub Item5Number_LostFocus()
    On Error GoTo ErrorOccurred
    
        If Not IsNull(DLookup("ItemName", "StoreItems", "ItemNumber = '" & Item5Number & "'")) Then
            [Item5Name] = DLookup("ItemName", "StoreItems", "ItemNumber = '" & Item5Number & "'")
            [Item5UnitPrice] = DLookup("UnitPrice", "StoreItems", "ItemNumber = '" & Item5Number & "'")
            [Item5Quantity] = "1"
            [Item5SubTotal] = [Item5UnitPrice]
            EvaluateOrder
        Else
            [Item5Number] = "000000"
            [Item5Name] = ""
            [Item5UnitPrice] = "0.00"
            [Item5Quantity] = "0"
            [Item5SubTotal] = "0.00"
        End If
    
    GetOuttaHere:
        Exit Sub
        
    ErrorOccurred:
        If Err.Number = -2147352567 Then
            [Item5Number] = "000000"
            [Item5Name] = "Miscellaneous"
            [Item5UnitPrice] = "0.00"
            [Item5Quantity] = "0"
            [Item5SubTotal] = "0.00"
            Item5Number.SetFocus
            Resume GetOuttaHere
        Else
            MsgBox "An error occured when retrieving the product information" & vbCrLf & _
                   "Please call the program vendor and report the error as follows:" & vbCrLf & _
                   "Error #: " & Err.Number & vbCrLf & _
                   "Reason:  " & Err.Description
            Resume Next
        End If
    End Sub
  12. Revenir au Microsoft Access et, sur la forme, cliquer la sixième boîte des textes sous le nombre d'article
  13. Dans l'étiquette d'événements de la fenêtre de propriétés, double-cliquer sur le foyer perdu et cliquer son bouton de points de suspension pour mettre en application l'événement comme suit :
     
    Private Sub Item6Number_LostFocus()
    On Error GoTo ErrorOccurred
    
        If Not IsNull(DLookup("ItemName", "StoreItems", "ItemNumber = '" & Item6Number & "'")) Then
            [Item6Name] = DLookup("ItemName", "StoreItems", "ItemNumber = '" & Item6Number & "'")
            [Item6UnitPrice] = DLookup("UnitPrice", "StoreItems", "ItemNumber = '" & Item6Number & "'")
            [Item6Quantity] = "1"
            [Item6SubTotal] = [Item6UnitPrice]
            EvaluateOrder
        Else
            [Item6Number] = "000000"
            [Item6Name] = ""
            [Item6UnitPrice] = "0.00"
            [Item6Quantity] = "0"
            [Item6SubTotal] = "0.00"
        End If
    
    GetOuttaHere:
        Exit Sub
        
    ErrorOccurred:
        If Err.Number = -2147352567 Then
            [Item6Number] = "000000"
            [Item6Name] = "Miscellaneous"
            [Item6UnitPrice] = "0.00"
            [Item6Quantity] = "0"
            [Item6SubTotal] = "0.00"
            Item6Number.SetFocus
            Resume GetOuttaHere
        Else
            MsgBox "An error occured when retrieving the product information" & vbCrLf & _
                   "Please call the program vendor and report the error as follows:" & vbCrLf & _
                   "Error #: " & Err.Number & vbCrLf & _
                   "Reason:  " & Err.Description
            Resume Next
        End If
    End Sub
  14. Revenir à la forme et la sauver
  15. Commuter la forme à la vue de forme et traiter quelques ordres comme suit :
     
  16. Fermer la forme

Précédent Copyright © 2007, Yevol Suivant