Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 First and Last en ADODB VBA

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Bonjour,

Je suis en train de coder en sql ADODB VBA. Je cherche à récupérer l'observation la plus récente (triée par date).
Pourriez-vous me donner l'exemple de la fonction First/Last en ADODB VBA ?

Merci beaucoup !
 
Merci, j'ai commencé par le plus simple : juste une table, la db_evenemnt :

RECSET.Open "select abs(ev.mt_brut_cie) as dernier_versement from db_evenement ev" & _
" where ev.no_police = '" & NO_POLICE & "' order by ev.d_effet desc", cnn_Pegase, adOpenDynamic, adLockBatchOptimistic

Ce code marche, dès que j'ajoute TOP 1, je reçois une erreur, comme avant : Erreur d'exécution '-2147217900 (80040e14)' ORA-00923: FROM keyword not found where expected :

Dim RECSET As New ADODB.Recordset
RECSET.Open "select TOP 1 abs(ev.mt_brut_cie) as dernier_versement from db_evenement ev" & _
" where ev.no_police = '" & NO_POLICE & "' order by ev.d_effet desc", cnn_Pegase, adOpenDynamic, adLockBatchOptimistic


Je me demande si "TOP 1" est vraiment approprié dans ADODB.Recordset ? Merci pour votre aide.
 
RE

Tu as la réponse dans le message que tu as cité : il suffit de regarder l'ordre des clauses...
Merci, j'ai commencé par le plus simple : juste une table, la db_evenemnt :

RECSET.Open "select abs(ev.mt_brut_cie) as dernier_versement from db_evenement ev" & _
" where ev.no_police = '" & NO_POLICE & "' order by ev.d_effet desc", cnn_Pegase, adOpenDynamic, adLockBatchOptimistic

Ce code marche, dès que j'ajoute TOP 1, je reçois une erreur, comme avant : Erreur d'exécution '-2147217900 (80040e14)' ORA-00923: FROM keyword not found where expected :

Dim RECSET As New ADODB.Recordset
RECSET.Open "select TOP 1 abs(ev.mt_brut_cie) as dernier_versement from db_evenement ev" & _
" where ev.no_police = '" & NO_POLICE & "' order by ev.d_effet desc", cnn_Pegase, adOpenDynamic, adLockBatchOptimistic


Je me demande si "TOP 1" est vraiment approprié dans ADODB.Recordset ? Merci pour votre aide.
 
Appartement ça n'existe pas sur Oracle !
Voilà la syntaxe pour Oracle !
Code:
select fname from MyTbl where rownum = 1
Est-ce que vous pourriez m'aider avec l'ajout de having, s'il vous plaît ? Mon code ne marche pas :

RECSET.Open "select abs(ev.mt_brut_cie) as dernier_versement from db_evenement ev, dp_classe_evt classe" & _
" where ev.no_police = '" & NO_POLICE & "' and classe.b_ea =1 and classe.b_rachat = 1 and ev.is_classe_evt=classe.is_classe_evt having count(distinct(ev.d_effet))<>1 order by ev.d_effet desc", cnn_Pegase, adOpenDynamic, adLockBatchOptimistic

L'erreur est ORA-00937 : not a single-group group function
 
de ce que j'ai compris de mes recherches sur internet ce serait plus ça!
VB:
" select abs(ev.mt_brut_cie) as dernier_versement" & _
" from db_evenement ev inner join  dp_classe_evt classe On ev.is_classe_evt=classe.is_classe_evt" & _
" where ev.no_police = '" & NO_POLICE & "' and classe.b_ea =1 and classe.b_rachat = 1 And rownum = 1" & _
" order by ev.d_effet desc"
 
Merci,
C'est étrange, mais ça ne marche pas, avec rownum = 1, ça récupère la première observation avant le tri par date. 🙁

Sans rownum=1 je récupère le bon résultat, mais je me demande si cette solution est correcte.
A mon avis oui, car le Recordset retient la première observation triée.
Merci pour votre aide.
 
Je suis en train de regarder, mais je ne crois pas que "having" est possible dans le cas d'Adodb Recordset. 🙁
 
Salut à tous,
et si on combinait comme cela :
Code:
"Select * From ( " & _
"   Select Abs(ev.mt_brut_cie) As dernier_versement " & _
"              From  db_evenement   ev " & _
"        Inner Join  dp_classe_evt  classe " &  _
"        On ev.is_classe_evt=classe.is_classe_evt " & _
"        where ev.no_police='" & NO_POLICE & "'" & _
"         and classe.b_ea=1 " & _
"         and classe.b_rachat=1 " & _
"         order by ev.d_effet desc" & _
"    ) Where Rownum <= 1;"

ou

Code:
"Select * From ( " & _
"   Select Abs(ev.mt_brut_cie) As dernier_versement " & _
"              From  db_evenement   ev " & _
"        Inner Join  dp_classe_evt  classe " &  _
"        On ev.is_classe_evt=classe.is_classe_evt " & _
"        where ev.no_police='" & NO_POLICE & "'" & _
"         and classe.b_ea=1 " & _
"         and classe.b_rachat=1 " & _
"         order by ev.d_effet desc" & _
"    ) FETCH FIRST 1 ROWS ONLY;""
 
Dernière édition:
Merci Fanch55! Peut-on implémenter aussi having count(distinct(d.effet))<>1 avant « order », cette condition ne marche pas chez moi 🙁
 
VB:
"select dernier_versement from (" & _
"    select  abs(ev.mt_brut_cie) as dernier_versement,count(d.effet) NB" & _
"     from db_evenement ev inner join  dp_classe_evt classe On ev.is_classe_evt=classe.is_classe_evt" & _
"     where ev.no_police = '" & NO_POLICE & "' and classe.b_ea =1 and classe.b_rachat = 1 " & _
"     Group By   Abs(ev.mt_brut_cie) " & _
"     Having count(d.effet)<>1 ) " & _
"     order by ev.d_effet desc)"
 
Bonjour,

Merci !Malheureusement je reçois la même erreur : Erreur d'exécution ' -2147217900 (80040e14)' ORA-09923: FROM Keyword not found where expected. En fait, je cherche comment place la condition having(count(distinct(ev.d_effet))) dans le code.
 
J'ai découpé le code pour récupérer le (count(distinct(ev.d_effet)), mais je reste curieuse de savoir comment on place "having" dans le code. Merci pour votre aide !
 
Merci beaucoup, fanch55, le premier code marche bien.

 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
180
Réponses
6
Affichages
150
Réponses
72
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…