titre_site.jpg (51607 octets)

TOTAL

Crée une table qui stocke les totaux des champs Numérique et Flottant d'enregistrements groupés par mêmes valeurs de clé.

Syntaxe

TOTAL ON <clé expC> TO <fichier> | ? | <masque de fichier>[[TYPE] PARADOX | DBASE][<portée>] [FOR <condition 1>] [WHILE <condition 2>][FIELDS <liste de champs>]

<clé expC>

L'expression clé de l'index maître ou le nom du champ sur lequel la table en cours a été triée.

TO <fichier> | ? | <masque de fichier>

La sortie est dirigée sur la table dBASE nommée <fichier>. Par défaut, Visual dBASE affecte l'extension .DBF à <fichier> et sauvegarde le fichier dans le répertoire en cours. L'option ? affiche une boîte de dialogue dans laquelle doivent être spécifiés le nom du fichier de destination et son répertoire pour la sauvegarde.
Vous pouvez aussi créer une table dans une base de données (définie en utilisant l'utilitaire de configuration BDE) en spécifiant la base de données comme préfixe (entre deux-points) du nom de la table, comme dans :base de données:table. Si la base de données n'est pas déjà ouverte, Visual dBASE affiche une boîte de dialogue dans laquelle les paramètres doivent être spécifiés, tels que le nom de connexion et le mot de passe nécessaires à l'établissement d'une connexion à la base de données.

[[TYPE] PARADOX | DBASE]

Spécifie le type de table à créer. Le mot réservé TYPE est inclus uniquement pour une meilleure lisibilité, il n'a aucun effet sur la commande en elle-même.
PARADOX crée une table Paradox avec l'extension .DB.
dBASE crée une table dBASE (par défaut). Si vous n'incluez pas d'extension à <fichier>, dBASE affecte automatiquement l'extension .DBF.

<portée>

Le nombre d'enregistrements au total. RECORD <n> identifie un simple enregistrement par son numéro. NEXT <n> identifie n enregistrements commençant par l'enregistrement en cours. ALL spécifie tous les enregistrements. REST spécifie tous les enregistrements depuis l'enregistrement en cours jusqu'à la fin du fichier.

Plus2_5-Icon.jpg (1250 octets) La portée par défaut est ALL

FOR <condition 1>WHILE <condition 2>

Détermine quels enregistrements sont affectés par TOTAL. FOR restreint TOTAL aux enregistrements remplissant <condition 1>. WHILE entame le processus avec l'enregistrement en cours et continue avec chaque enregistrement suivant tant que <condition 2> est vraie.

FIELDS <liste de champs>

Spécifie à partir de quels champs Numérique et Flottant effectuer le total. Si vous n'incluez pas FIELDS, dBASE effectue les totaux de tous les champs Numérique et Flottant.

 ico_MsDos.jpg (1668 octets)  dbasedos.gif (376 octets) vdb5.gif (351 octets) Description

Utilisez TOTAL pour effectuer le total de la valeur des champs Numérique dans une table et pour créer une seconde table qui conservera les résultats. Les champs Numérique de cette seconde table contiennent les totaux de tous les enregistrements ayant la même valeur de clé dans la table d'origine.


La table en cours doit être soit indexée, soit triée, sur le champ clé. Tous les enregistrements de même champ clé deviennent un seul enregistrement dans la table stockant les résultats totaux. Tous les champs Numérique, apparaissant dans la liste de champs, contiennent des totaux. Tous les autres champs contiennent les données du premier enregistrement du jeu d'enregistrements avec des clés identiques.

TOTAL est identique à SUM, cependant SUM opère sur une table indexée ou non, en retournant une somme pour tous les enregistrements de chaque champ Numérique. SUM ne crée pas d'autre table, mais conserve les résultats dans des variables mémoire ou dans un tableau.

Plus2_5-Icon.jpg (1250 octets) Pour limiter les champs qui sont créés dans le nouveau fichier, ou pour grouper sur plus d'un champ clé, utilisez SET FIELDS, comme indiqué dans l'exemple.

 

Plus2_5-Icon.jpg (1250 octets) xDML vers ooDML

Il n'y a pas de strict équivalent OODML, mais vous pouvez d'examiner la fonction SQL SUM() (et autres fonctions d'agrégation SQL local), qui peut être utilisé avec l'instruction SQL SELECT.

Un exemple donné par Ivar B. Jessen :

//-----
f = new form()
f.autoCenter = true
f.d = new database()
f.d.databasename = "dBASESamples"
f.d.active = true
f.q = new query()
f.q.database = f.d
f.q.sql = 'select sum(ID) as total from Fish'
f.q.active = true
f.totalVal = f.q.rowset.fields["total"].value
f.t = new text(f)
f.t.width = 30
f.t.text = "The sum of all ID's is " + f.totalVal
f.open()
//-----
Groupes de discussion : dbase.getting-started
De : Ivar B. Jessen <bergisha...@it.notthis.dk>
Date : Mon, 28 Apr 2003 10:35:04 +0200
Date/heure locale : Lun 28 avr 2003 10:35
Objet : Re: Sum

 

Code      ico_dbIII.jpg (1345 octets)   dbasedos.gif (376 octets)   vdb5.gif (351 octets)   Plus2_5-Icon.jpg (1250 octets)

Dans l'exemple suivant, la commande TOTAL sur la table SOCIETE calcule le nombre total de ventes par année dans chaque état :

CLOSE DATABASE

USE SOCIETE EXCLUSIVE

INDEX ON ETAT TAG ETAT

* Première table SOCIETE indexée sur ETAT

* L'index nécessite EXCLUSIVE ON

USE COMPANY SHARED

* TOTAL ne nécessite pas EXCLUSIVE ON

TOTAL ON ETAT TO StateTot

SELECT 2

USE StateTot

BROWSE FIELDS ETAT, VENTES_AN;

TITLE "Ventes totales par état"

StateTot contient un enregistrement par état.

Plus2_5-Icon.jpg (1250 octets) Supposons que vous deviez totaliser le montant des recettes provenant des taxes que perçoit un département (habitation, succession, carte grise, etc), et que vous voulez les totaux pour chaque ville, pour chaque catégorie de taxes différentes. D'abord, vous créez un index sur la ville et la catégorie de taxes puisque c'est le résultat que vous désirez obtenir:

index on VILLE + TAXES_CAT tag VILLE_TAXES

Ensuite, vous utilisez SET FIELDS pour créer un champ calculé clé basé sur les deux champs sur lesquels vous appliquerez TOTAL (ce sera dans cet exemple un champ caractère comportant le nom de la ville et le nom de la taxe):

set fields to VILLE_TAXES = VILLE + TAXES_CAT  // le champ calculé

set fields to VILLE, TAXES_CAT, TAXE_PAYEE     // les champs à retenir

total on VILLE_TAXES to VILLE_PAYE   // éviter le nom total pour la table résultat

Bien que le champ composé, qui figure dans la table de résultats, comporte la ville et la catégorie de taxes, la ville et les champs de catégorie de taxes sont aussi inclus dans la liste des champs de sorte qu'ils apparaissent bien dans la table de résultat dans des champs distincts. Le champ contenant la taxe versée est également inclus dans la liste des champs, .... sinon il n'y aurait rien à totaliser. (table demtotal)

 

bug_jpg.jpg (2635 octets)  Bien comprendre

 

TOTAL ON ne marche pas, j'ai des résultats bizzares

Cette réponse ne répond pas à 100% des cas, mais probalement à plus de 90%

Regardez si vous avez une ou plusieurs valeurs NULL quelque part dans les champs que vous addittionnez. Souvenez-vous que quoi que ce soit + null = null. Essayez de supprimer les Null si vous n'avez pas besoin d'eux ou créez un champ calculé qui substitutera 0 pour tout
champ contenant une valeur NULL.
On pense souvent que null = 0, mais en fait il faut penser qu'un champ ayant pour valeur null a une valeur inconnue et non égale à 0.

Pourquoi des Null dans mes champs : Mettre autoNullFields à OFF

Par défaut autoNullFields est à ON. Donc dans les tables de niveau 7, tous les champs dont aucune valeur n'a été spécifiée sont alors à Null. Or Null ce n'est ni blanc, ni zéro, ni faux, etc, c'est une absence de valeur .Lorsque AUTONULLFIELDS est sur OFF, les champs numériques (long, float, etc) se voient affecter la valeur zéro, les champs logiques la valeur «false», et les champs caractères sont remplis avec des espaces.

Attention avant de changer de système par défaut, car les valeurs Null ont leur intérêt. Par exemple une note de 0 et pas de note ne signifie pas la même chose. Si vous faites un relevé de température journalier, le jour où vous êtes absent il n'a pas forcément gelé...,

Remarque : Null est apparu avec les tables de niveau 7

Pour savoir comment votre dBase est configuré par défaut :

Ide_AutoNull.gif (39050 octets)

Case AutoNullFields cochée,  les champs vides ont une valeur inconnue

Problème d'affichage du résultat

Vérifier que le nombre de caractères prévu pour le champ de destination est assez large pour accueillir le nombre. Un champ décimal de longueur 5 ne peut afficher que 99.99, et non 999.99, il faut tenir compte du séparateur.
 

Blocage de la table, 'file in use by another, retrying lock', empêchant l'utilisation par d'autres

La commande TOTAL fait partie des commandes qui fait que dBASE tente de verrouiller une table partagée lors de son utilisation. Si Set Lock est à ON vous ne pouvez pas accéder à la table pendant l'exécution de TOTAL ON. Voir SET LOCK dans l'aide.

retour

Sources :

Aide Visual dbase V5.7
http://www.dbase.com/Knowledgebase/INT/xb2vdb7oodml/x2oodml.htm par Ken Mayer
Aide dBase Plus 2.6.0

Groupes de discussion

dBase version 2.6.0

Retour à l'accueil


Si vous voyez des erreurs, ou souhaitez apporter des compléments, n'hésitez pas à le signaler.
Dernière modification : lundi 09 août 2010

©  M.Abraham.