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 !
 
Bonjour,
Par défaut un recordset ce trouve sur le premier enregistrement {Movefirst}
Pour se rendre au dernier enregistrement c'est la méthode Movelast !

Note que si ta requête ne retourne aucun enregistrement Movefirst et Movelast genaire un erreur il faut tester si Eof et Bof son différents !

Code:
 Set RS=cn.execute(SQL)
If RS.Eof<>RS.Bof then
Rs.MoveLast
Rs.MoveFirst
End if
 
Bonjour MarieParis

Un exemple de séquence SQL en ADODB

StrSql = "SELECT TOP 1 * FROM table ORDER BY champ DESC"

Mettre ASC ou DESC selon ce que tu cherches en résultat.

Cordialement
Merci ! Pourriez-vous vérifier ma syntaxe, s'il vous plaît ? :
RECSET.Open "select TOP 1 abs(ev.mt_brut_cie) as dernier_versement from db_evenement ev, dp_classe_evt classe order by ev.d_effet desc" & _
" 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", cnn_Pegase, adOpenDynamic, adLockBatchOptimistic


Je reçois l'erreur : ORA-00923: FROM keyword not found where expected.

Merci beaucoup pour votre aide !
 
un requête est toujours architecturé comme suis!
  1. Select Champs
  2. From {Inner join On Value}
  3. Where facultatif
  4. Group By facultatif
  5. Having facultatif toujours lié à Count, Max, Min, Avg
  6. Order by facultatif
VB:
" select TOP 1 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" & _
" order by ev.d_effet desc"
 
Dernière édition:
un requête est toujours architecturé comme suis!
  1. Select Champs
  2. From {Inner join On Value}
  3. Where facultatif
  4. Group By facultatif
  5. Having facultatif toujours lié à Count, Max, Min, Avg
  6. Order by facultatif
VB:
" select TOP 1 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" & _
" order by ev.d_effet desc"
Merci, mais j'ai toujours la même erreur 🙁 peut-être c'est à cause de 2 tables : from db_evenement ev, dp_classe_evt classe ?
 
essais comme ça!
VB:
" select TOP 1 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"
Merci, mais j'ai toujours la même erreur sur "from". Voci mon code :
Dim RECSET As New ADODB.Recordset
RECSET.Open " select TOP 1 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", cnn_Pegase, adOpenDynamic, adLockBatchOptimistic


Je me demande si l'utilisation de TOP 1 est possible en ADODB RECSET.
 
le top Fonctionne avec ADO.
je t'invite à découper ta requête pour trouver l'erreur!
  1. VB:
    " select TOP 1 abs(ev.mt_brut_cie) as dernier_versement" & _
    " from db_evenement ev"
  2. Code:
     " select TOP 1 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"
  3. Code:
     "select TOP 1 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 & "'"
  4. ETC
 
le top Fonctionne avec ADO.
je t'invite à découper ta requête pour trouver l'erreur!
  1. VB:
    " select TOP 1 abs(ev.mt_brut_cie) as dernier_versement" & _
    " from db_evenement ev"
  2. Code:
     " select TOP 1 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"
  3. Code:
     "select TOP 1 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 & "'"
  4. ETC
Très bonne idée, merci beaucoup, je regarde, c'est très curieux !
 
Debug.Print Sq vas copier le texte de ta requête dans la fenêtre d'exécution!
il te sufis de le copier coller dans Sql manageur pour l'évaluer et corriger le problèmes!
VB:
Dim Sql As String
Sql = " select TOP 1 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"
Debug.Print Sql
 
- 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
149
Réponses
72
Affichages
1 K
Retour