mtaallah
Messages postés28Date d'inscriptionlundi 10 décembre 2001StatutMembreDernière intervention13 décembre 2006
-
9 nov. 2006 à 19:37
mtaallah
Messages postés28Date d'inscriptionlundi 10 décembre 2001StatutMembreDernière intervention13 décembre 2006
-
10 nov. 2006 à 13:05
Salut à tous;
Je cherche à calculer la moyenne de quatre valeurs dans un DBGrid (connecté à une base de données access via un ADOQuery)...
Pour expliquer mieux, je dispose les champs suivants
- Ref
- Valeur1
- Valeur2
- Valeur3
- Valeur4
- MoyVal
Est-ce qu'il existe une commande ou une requête sql qui affecte directement à Moy la moyenne des quatres notes "valeur" en tenant compte bien sur des conditions:
- Le champs vide ne sera pas tenu comme note
- Le zéro est une mauviase note à compter
en fait: j'ai essayé avec la manière suivante et ça marche (à conditions):
Procedure TForm1.BitBtn1Click(Sender: TObject);
var
i,j: Integer;
TP: real;
begin
i:=4;
// TP:=0;
ADOQuery1.First;
while not ADOQuery1.Eof do
Begin
TP:=0;
for j:=1 to 4 do
Begin
If ADOQuery1.FieldByName('Valeur'+j).isnull then i:=i-1
else TP:= TP + ADOQuery1.FieldByName('Valeur1').asfloat;
end;
ADOQuery1.FieldByName('MoyVal').asfloat:= FloatForm('0.000', TP / i);
end;
mais ça a l'air lourd et lent lors de son exécution... je cherche quelque chose de professionnel
j'ai cherché avec les requeêtes SQL comme AVG et Moyenne mais j'ai trouvé qu'ils donnent le résultat pour la moyenne des champs (c-a-d la moyenne du champs valeur1 pour tous les produits par exemple et non pas la moyenn des valeurs disponibles pour un certain produit)..
Merci
A voir également:
Écrire un programme qui calcule la moyenne des notes python
mtaallah
Messages postés28Date d'inscriptionlundi 10 décembre 2001StatutMembreDernière intervention13 décembre 2006 10 nov. 2006 à 01:22
Encore une fois...
Voici la procédure qui fonctionne à 100% en donnant les moyenns
mais, je suis toujours à la recherche d'autres solutions possibles
si possible bien sûr
Procedure TForm1.BitBtn1Click(Sender: TObject);
var
i,j: Integer;
TP: real;
begin
ADOQuery1.First;
While not ADOQuery1.Eof do
Begin
i:=4;
TP:=0;
For j:=1 to 6 do
Begin
If ADOQuery1.FieldByName('Valeur'+inttostr(j)).isnull then i:=i-1
else TP:= TP + ADOQuery1.FieldByName('Valeur'+inttostr(j)).asfloat;
end;
ADOQuery1.Edit;
ADOQuery1.FieldByName('MoyVal').value:= FormatFloat('0.00', TP / i);
ADOQuery1.Next;
end;
end;
Est-ce que je pourrai tenir ma réponse comme Acceptée!
mtaallah
Messages postés28Date d'inscriptionlundi 10 décembre 2001StatutMembreDernière intervention13 décembre 2006 10 nov. 2006 à 13:05
Salut,
C'est ce que je dis, je cherche une commande avec SQL...
J'ai essayé avec la commande AVG mais je n'ai pas pu donner le syntax exact de l'operation... en plus de ça, d'après la documentation fournie avec Access, AVG permet de calculer la moyenne sur un chams complet (sur toute une colonne) et non pas au niveau des lignes.
Plus précisamment, si j'ai les champs suivants dans la table Produit de ma base de données Access:
- Ref // Référence du produit (primary key)
- Valeur1
- Valeur2
- Valeur3
- Valeur4
- MoyVal // Moyenne des 4 valeurs pour chaque produit
et je veux que le champ MoyVal reçoit la moyenne des quatres champs Valeur1, Valeur2, valeur3 et Valeur4...
La fonction AVG me permet de calculer la moyenne des Valeur1 pour tous les produits. Je ne suis pas sûr, mais c'est ce que j'ai compris d'après mes essais.
Merci