Microsoft 365 First and Last en ADODB VBA

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 !
 

dysorthographie

XLDnaute Accro
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
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
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 !
 

dysorthographie

XLDnaute Accro
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:

VBA_dev_Anne_Marie

XLDnaute Occasionnel
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 ?
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
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.
 

dysorthographie

XLDnaute Accro
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
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
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 !
 

dysorthographie

XLDnaute Accro
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
 

Discussions similaires

Réponses
1
Affichages
713

Statistiques des forums

Discussions
315 088
Messages
2 116 089
Membres
112 658
dernier inscrit
doro 76