Shape Compute, clause
S’applique à : Access 2013, Office 2013
Une clause COMPUTE de commande SHAPE génère un objet Recordset parent dont les colonnes se composent d’une référence à l’objet Recordset enfant, de colonnes facultatives contenant des colonnes de chapitre, des nouvelles colonnes ou des colonnes calculées ou encore le résultat de l’exécution de fonctions d’agrégation sur l’objet Recordset enfant ou un objet Recordset précédemment mis en forme et de toutes colonnes provenant de l’objet Recordset enfant répertoriées dans la clause BY facultative.
Syntaxe
SHAPE child-command [AS] child-alias
COMPUTE child-alias [[AS] name], [appended-column-list]
[BY grp-field-list]
Description
Cette clause comporte les parties suivantes :
child-command
Est constituée de l'un des éléments suivants :
Commande de requête entre accolades (« {} ») qui retourne un objet Recordset enfant. La commande est transmise au fournisseur de données sous-jacent et sa syntaxe dépend des exigences du fournisseur. Elle est en général écrite en langage SQL, même si ADO n'exige pas de langage de requête particulier.
Nom d'un objet Recordset mis en forme existant.
Autre commande SHAPE.
Mot-clé TABLE, suivi du nom d'une table du fournisseur de données.
child-alias
- Alias utilisé pour référencer l'objet Recordset retourné par child-command. child-alias est requis dans la liste de colonnes de la clause COMPUTE et définit la relation entre les objets Recordset parent et enfant.
appended-column-list
- Liste dans laquelle chaque élément définit une colonne dans le parent généré. Chaque élément contient une colonne de chapitre, une nouvelle colonne, une colonne calculée ou une valeur résultant d'une fonction d'agrégation exécutée sur l'objet Recordset enfant.
grp-field-list
- Liste de colonnes dans les objets Recordset parent et enfant qui spécifie la façon dont les lignes doivent être regroupées dans l’enfant. Pour chaque colonne du grp-field-list, il existe une colonne correspondante dans les objets Recordset enfants et parent. Pour chaque ligne du Recordset parent, les colonnes grp-field-list ont des valeurs uniques, et l’objet Recordset enfant référencé par la ligne parente se compose uniquement de lignes enfants dont les colonnes grp-field-list ont les mêmes valeurs que la ligne parente.
Si la clause BY est incluse, les lignes de l'objet Recordset enfant sont groupées en fonction des colonnes dans la clause COMPUTE. L'objet Recordset parent contiendra une ligne pour chaque groupe de lignes de l'objet Recordset enfant.
En revanche, si la clause BY est omise, l'intégralité de l'objet Recordset enfant est traité comme un seul groupe et l'objet Recordset parent contient exactement une ligne. Cette ligne référence tout l'objet Recordset enfant. L'omission de la clause BY vous permet de calculer des agrégats de « totaux » pour tout l'objet Recordset enfant.
Par exemple :
SHAPE {select * from Orders} AS orders
COMPUTE orders, SUM(orders.OrderAmount) as TotalSales
Quelle que soit la façon dont l'objet Recordset parent est formé (à l'aide de la clause COMPUTE ou APPEND), celui-ci contiendra une colonne de chapitre utilisée pour établir une relation avec un objet Recordset enfant. Si vous le souhaitez, l'objet Recordset parent peut également contenir des colonnes comportant des agrégats (SUM, MIN, MAX, etc.) sur les lignes enfants. Les objets Recordset parent et enfant peuvent tous deux contenir des colonnes comportant une expression sur la ligne dans l'objet Recordset ainsi que des nouvelles colonnes, initialement vides.
Opération
La commande child-command est transmise au fournisseur qui retourne un objet Recordset enfant.
La clause COMPUTE spécifie les colonnes de l'objet Recordset parent, par exemple une référence à l'objet Recordset enfant, un ou plusieurs agrégats, une expression calculée ou de nouvelles colonnes. Si une clause BY est employée, les colonnes qu'elle définit sont également ajoutées à l'objet Recordset parent. La clause BY spécifie la façon dont les lignes d'un objet Recordset enfant sont groupées.
Par exemple, supposons que nous disposons d'une table, Demographics, comportant les champs State, City et Population (les chiffres ne sont donnés qu'à titre d'exemple).
État |
Ville |
Population |
---|---|---|
WA |
Toulouse |
700 000 |
OR |
Medford |
200 000 |
OR |
Portland |
400,000 |
CA |
Los Angeles |
800,000 |
CA |
San Diego |
600 000 |
WA |
Tacoma |
500 000 |
OR |
Corvallis |
300,000 |
Émettez à présent cette commande SHAPE :
rst.Open "SHAPE {select * from demographics} AS rs " & _
"COMPUTE rs, SUM(rs.population) BY state", _
objConnection
Cette commande ouvre un objet Recordset mis en forme comportant deux niveaux. Le niveau parent est un recordset généré avec une colonne d’agrégation (SUM(rs.population) ), une colonne référençant l’objet Recordset enfant (rs ) et une colonne pour regrouper l’objet Recordset enfant (état ). Le niveau enfant est l’objet Recordset retourné par la commande de requête (), une colonne référençant l’objet Recordset enfant (rs ) et une colonne pour le regroupement de l’objet Recordset enfant (état ). Le niveau enfant est l’objet Recordset retourné par la commande de requête (sélectionnez * dans données démographiques).
Les lignes de détail de l'objet Recordset sont groupées en fonction de la colonne State, mais dans aucun ordre particulier. En d'autres termes, les groupes ne sont pas classés par ordre alphabétique ou numérique. Si vous souhaitez que l’objet Recordset parent soit trié, vous pouvez utiliser la méthode Sort recordset pour classer l’objet Recordset parent.
Vous pouvez désormais parcourir l'objet Recordset parent et accéder aux objets Recordset de détail enfants. Pour plus d'informations, consultez Accès aux lignes d'un jeu d'enregistrements hiérarchique.
Objets Recordset parent et enfants résultants
Parent
SUM (rs.Population) |
rs |
État |
---|---|---|
1,300,000 |
Référence à Enfant 1 |
CA |
1,200,000 |
Référence à Enfant 2 |
WA |
1,100,000 |
Référence à Enfant 3 |
OR |
Enfant1
État |
Ville |
Population |
---|---|---|
CA |
Los Angeles |
800,000 |
CA |
San Diego |
600 000 |
Enfant2
État |
Ville |
Population |
---|---|---|
WA |
Toulouse |
700 000 |
WA |
Tacoma |
500 000 |
Enfant3
État |
Ville |
Population |
---|---|---|
OR |
Medford |
200 000 |
OR |
Portland |
400,000 |
OR |
Corvallis |
300,000 |