COMMENT RECUPERER LE N° D'ORDRE D'UN CHAMP DANS UNE REQUETE
Zicson1
Messages postés56Date d'inscriptionvendredi 2 mars 2007StatutMembreDernière intervention27 mars 2010
-
1 juil. 2008 à 16:40
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 2021
-
5 juil. 2008 à 11:15
Mon application contient des scriptes qui permet le calcul des moyennes trimestrielles et annuelles par étudiant, affiche les moyennes coéfficiées le total voir toutes les informations relatives à un bulletin scolaire mais le problème, je dois fournir le classement des étudiants par classe en fonction de leur moyennes trimestrielle et si une moyenne quelconque arrivait à être modifier, le classement devrait changé automatiquement pour établir l'ordre.
Par exemple: voici une suite de moyenne: 10, 14, 09, 17, 11. (champ MOYENNE)
pour le classement:
- 1er pour l'étudiant qui a 17
- 2ème pour l'étudiant qui a 14
- 3ème pour l'étudiant qui a 10
- 4ème pour celui qui a 09
Je precise que j'utilise INTERBASE 6.0 comme serveur et DELPHI 7 comme langage AGL et WINDOWS XP SP2 comme OS et j'utilise les composants IBDATASET ET IBQUERY pour mes requêtes SQL.
j'ai essayé ceci :
Select MOYENNE from TMOYENNE
Where NUMERO_CLASSE= :NUMCLASSE
Order By MOYENNE DESC;
Avec ça, les moyennes sont classées par ordre décroissant de la plus grande moyenne à la plus petite comme souhaité mais je n'arrive pas à recuperer l 'ordre 1, 2, 3...des lignes d'emplacement des numeros.
voici un autre que j'ai éssayé et qui ne passe pas:
SelectCOUNT (distinct MOYENNE ) As RANG from TMOYENNE
Where NUMERO_CLASSE =:NUMCLASSE
Order By MOYENNE DESC;
Ici à l'execution cela me donne 1.
Aidez moi SVP
ful
A voir également:
COMMENT RECUPERER LE N° D'ORDRE D'UN CHAMP DANS UNE REQUETE
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 1 juil. 2008 à 20:47
Salut,
avec un script çà va être dur..
je verrais mieux :
créer un champ ORDRE (integer) dans la table TMoyenne
et
déclencher un UPDATE sur le champ ordre :
UPDATE TMOYENNE
SET TMOYENNE.ORDRE = TMOYENNE.ORDRE + 1
Order By MOYENNE DESC;
J'ai pas testé..
En tout cas le COUNT ne peut pas fonctionner puisque lui compte les enregistrements de la requête alors que toi tu souhaites introduire un incrément
du champ MOYENNE en ordre décroissant.
restera ensuite l'affichage, mais là un simple select et c'est gagné..
Zicson1
Messages postés56Date d'inscriptionvendredi 2 mars 2007StatutMembreDernière intervention27 mars 2010 3 juil. 2008 à 17:51
Je ne te comprend pas!, soit precis et concis, c'est vrais que tu as proposer un update qui est d'ailleurs évident mais malheusement inconprehensile, j'aurais souhaité que tu arrives au bout de ta methéde.
Le update est cré où, comme procedure sur interbase ou au sein d'un ibquery? et comment l'utilise t-on ? et comment tu le met à zéro? soit beaucoup plus explicite car je ne te comprend pas mieux. Et si tus pouvais m'expliquer comment se fait la jointure incrementable sachant que le camps ORDRE une fois crée ne comporte aucune données et par défaut c'est la valeur nulle(0).
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 3 juil. 2008 à 21:37
ben écoutes, j'essaie simplement de me couler dans ta méthode.
Moi, je ne sais pas ce que tu veux faire exactement..
une requête SQL, tu peux la déclencher en script direct ou sans un IbQuery
comme il te plaira.
bon un p'tit query :
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
IbQuery1.Close;
with IBQuery1.SQL do
begin
Clear;
Add('UPDATE TMOYENNE ');
Add('SET TMOYENNE.ORDRE = TMOYENNE.ORDRE + 1 ');
Add('Order By MOYENNE DESC ');
end;
IbQuery1.ExecSQL;
end;
c'était peu être évident, mais encore aurait-il fallut y penser et l'écrire...
La liaison ?
Where NUMERO_CLASSE =:NUMCLASSE
çà c'est pas une liaison, c'est un passage de paramètre..
tu peux très bien rajouter ce WHERE dans la requête ci-dessus.
Zicson1
Messages postés56Date d'inscriptionvendredi 2 mars 2007StatutMembreDernière intervention27 mars 2010 4 juil. 2008 à 14:46
Ce-ci, c'est très bon à comprendre, ainsi je me retrouve et j'ai même eu le reflexe de l'adapter à d'autre composants comme le cas d'un IBUpdateSQL1 de Delphi7.
UPDATE TMOYENNE
SET ORDRE = :ORDRE
WHERE NUMERO_CLASSE =:NUMCLASSE
Order By MOYENNE DESC;
Dans la version Delphi 7 Entreprise, les ordres SQL de
IBUpdate peuvent être générés automatiquement :
<ol start= "1" type="1"><li class="MsoNormal" style="">Mettez la propriété Active
de IBDatabase1 à True. Faites de même avec IBTransaction1 et IBQuery1.</li><li class ="MsoNormal" style= "">Cliquez droit sur
IBUpdateSQL1 et activez l'Editeur IBUpdateSQL .</li><li class ="MsoNormal" style="">Cliquez sur Sélectionner
les clés primaires, puis sur Générer le SQL. Tous les ordres
SQL d'IBUpdateSQL1 sont alors automatiquement générés.</li></ol>Compilez, Exécutez :
NB: Le champ ORDRE doit être déclerer comme clef PRIMAIRE lors de sa création.
Nous navons pas besoin de faire une jointure, parce que nous travaillons avec une une table bien determinée (TMOYENNE) donc precision pas necessaire.
La remise à zéro ici n'est vraiment pas necessaire parce toute fois qu'on aura besoin de faire l'"ORDRE" il suffit de faire appelle au coposant IBUpdateSQL1 qui nous met automatiquement à jour le contenu du champ ORDRE de TMOYENNE en fonction de l'ordre des données du champs MOYENNE, de façon dynamique sans une une mise à zéro au préalable.
Bonne compréhension et je suis toujous disponible pour faire comprendre ma methode dans les moindres détails. "tout ce qui se conçoit bien s'énonce clairement" ....ZICSON1
ful
Vous n’avez pas trouvé la réponse que vous recherchez ?