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 !
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Exact, j'ai construit 2 petites tables avec très peu de lignes et surtout de dates.
Je me re penche sur la bonne requête .... 😩
Je voudrai faire ça, mais la syntaxe n'est pas bonne :(

VB:
 RECSET.Open " Select  Max(ev.d_effet ), Sum(Abs(ev.mt_brut_cie)) " & _
" from db_evenement ev " & _
" where ev.d_effet = ( " & _
" select Max(d_effet) " & _
" from       db_evenement  ev2 " & _
" Inner join dp_classe_evt cl " & _
" On ev2.is_classe_evt=cl.is_classe_evt" & _
"  where ev2.no_police='" & NO_POLICE & "' and cl.b_ea=1 and cl.b_rachat=1 " & _
" ) Inner join dp_classe_evt cl2 On ev.is_classe_evt=cl2.is_classe_evt where ev.no_police='" & NO_POLICE & "' and cl2.b_ea=1 and cl2.b_rachat=1", cnn_Pegase, adOpenDynamic, adLockBatchOptimistic
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Je voudrai faire ça, mais la syntaxe n'est pas bonne :(

VB:
 RECSET.Open " Select  Max(ev.d_effet ), Sum(Abs(ev.mt_brut_cie)) " & _
" from db_evenement ev " & _
" where ev.d_effet = ( " & _
" select Max(d_effet) " & _
" from       db_evenement  ev2 " & _
" Inner join dp_classe_evt cl " & _
" On ev2.is_classe_evt=cl.is_classe_evt" & _
"  where ev2.no_police='" & NO_POLICE & "' and cl.b_ea=1 and cl.b_rachat=1 " & _
" ) Inner join dp_classe_evt cl2 On ev.is_classe_evt=cl2.is_classe_evt where ev.no_police='" & NO_POLICE & "' and cl2.b_ea=1 and cl2.b_rachat=1", cnn_Pegase, adOpenDynamic, adLockBatchOptimistic
Dans la db_evenement, je regarde si la date réponds à mes conditions (je prends le max après la jointure) ensuite je refait la jointure sur Max(Date) avec dp_classe_evt cl2. Mais je ne sais pas où je me trompe dans l'orthographe. En fait, dans db_evenement il a bcp de données, je dois travailler juste sur les données qui sont aussi présentes dans dp_classe_evt. Merci beaucoup pour votre aide !
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Je voudrais mettre mon code SAS en VBA en fait, en passant par Recordset ADODB, voici la "traduction" mais elle ne marche pas :
Code:
 RECSET.Open " Select  Max(ev.d_effet ), Sum(Abs(ev.mt_brut_cie)) " & _
" from db_evenement ev " & _
" where ev.d_effet = ( " & _
" select Max(d_effet) " & _
" from       db_evenement  ev2 " & _
" Inner join dp_classe_evt cl " & _
" On ev2.is_classe_evt=cl.is_classe_evt" & _
"  where ev2.no_police='" & NO_POLICE & "' and cl.b_ea=1 and cl.b_rachat=1 " & _
" ) Inner join dp_classe_evt cl2 On ev.is_classe_evt=cl2.is_classe_evt where ev.no_police='" & NO_POLICE & "' and cl2.b_ea=1 and cl2.b_rachat=1", cnn_Pegase, adOpenDynamic, adLockBatchOptimistic

Je suis débutante en ADODB, si vous pourriez m'aider, j'en serais très reconnaissante, ça fait 3 jours que je galère :)
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Je voudrais mettre mon code SAS en VBA en fait, en passant par Recordset ADODB, voici la "traduction" mais elle ne marche pas :
Code:
 RECSET.Open " Select  Max(ev.d_effet ), Sum(Abs(ev.mt_brut_cie)) " & _
" from db_evenement ev " & _
" where ev.d_effet = ( " & _
" select Max(d_effet) " & _
" from       db_evenement  ev2 " & _
" Inner join dp_classe_evt cl " & _
" On ev2.is_classe_evt=cl.is_classe_evt" & _
"  where ev2.no_police='" & NO_POLICE & "' and cl.b_ea=1 and cl.b_rachat=1 " & _
" ) Inner join dp_classe_evt cl2 On ev.is_classe_evt=cl2.is_classe_evt where ev.no_police='" & NO_POLICE & "' and cl2.b_ea=1 and cl2.b_rachat=1", cnn_Pegase, adOpenDynamic, adLockBatchOptimistic

Je suis débutante en ADODB, si vous pourriez m'aider, j'en serais très reconnaissante, ça fait 3 jours que je galère :)
J'ai copier-coller mon code SAS qui marche en VBA :
VB:
    RECSET.Open "Select  Max(ev.d_effet ), Sum(Abs(ev.mt_brut_cie)) as cumul" & _
"from psaeu11.db_evenement as ev Inner join psaeu11.dp_classe_evt  as cl" & _
"On ev.is_classe_evt=cl.is_classe_evt" & _
"where ev.no_police='" & NO_POLICE & "' and cl.b_ea=1 and cl.b_rachat=1" & _
"and ev.d_effet = (" & _
"select Max(ev2.d_effet)" & _
"from      db_evenement  ev2" & _
"Inner join dp_classe_evt cl2" & _
"On ev2.is_classe_evt=cl2.is_classe_evt" & _
"where ev2.no_police='" & NO_POLICE & "' and cl2.b_ea=1 and cl2.b_rachat=1)",

Je reçois l'erreur : FROM keyword not found where expected :(
 

dysorthographie

XLDnaute Accro
j'ai repris ton script SAS et je l'ai retravaillé avec Notpad++
fais un test!
VB:
"Select  Max(ev.d_effet ), Sum(Abs(ev.mt_brut_cie)) as cumul " & _
 " from psaeu11.db_evenement as ev Inner join psaeu11.dp_classe_evt  as cl " & _
 "  On ev.is_classe_evt=cl.is_classe_evt " & _
 "    where ev.no_police='T342GB00827' and cl.b_ea=1 and cl.b_rachat=1 " & _
 "and ev.d_effet = ( " & _
 "   select Max(ev2.d_effet) " & _
 "   from       psaeu11.db_evenement  ev2 " & _
 "   Inner join psaeu11.dp_classe_evt cl2 " & _
 "  On ev2.is_classe_evt=cl2.is_classe_evt " & _
 "    where ev2.no_police='T342GB00827' and cl2.b_ea=1 and cl2.b_rachat=1); "

tu n'a pas mis d'espace en fin de ligne
Code:
ev2" & _
"Inner join dp_classe_evt cl2"
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
j'ai repris ton script SAS et je l'ai retravaillé avec Notpad++
fais un test!
VB:
"Select  Max(ev.d_effet ), Sum(Abs(ev.mt_brut_cie)) as cumul " & _
 " from psaeu11.db_evenement as ev Inner join psaeu11.dp_classe_evt  as cl " & _
 "  On ev.is_classe_evt=cl.is_classe_evt " & _
 "    where ev.no_police='T342GB00827' and cl.b_ea=1 and cl.b_rachat=1 " & _
 "and ev.d_effet = ( " & _
 "   select Max(ev2.d_effet) " & _
 "   from       psaeu11.db_evenement  ev2 " & _
 "   Inner join psaeu11.dp_classe_evt cl2 " & _
 "  On ev2.is_classe_evt=cl2.is_classe_evt " & _
 "    where ev2.no_police='T342GB00827' and cl2.b_ea=1 and cl2.b_rachat=1); "

tu n'a pas mis d'espace en fin de ligne
Code:
ev2" & _
"Inner join dp_classe_evt cl2"
Est-ce que je peux remplacer les par 'T342GB00827' '" & NO_POLICE & "' (variable macro), sinon ça reste en dur.
Est-ce que je peux enlever les psaeu11 ? Mon code adodb VBA commence avec par Call CONNEXION_PEGASE, je n'ai pas besoin de mettre les psaeu11 je crois.
 

fanch55

XLDnaute Barbatruc
Cela rejoint ce que je testais :
VB:
Sub testMP()
db_Ev = "db_evenement"
db_Cl = "dp_classe_evt"
no_police = "T342GB00827"
requete = _
    " Select  max(d_effet),sum(Abs(mt_brut_cie)) " & _
    "  from " & db_Ev & " as T1 " & _
    "     Inner join " & db_Cl & " as T2 " & _
    "     On T1.is_classe_evt = T2.is_classe_evt" & _
    "     where T1.no_police = '" & no_police & "' and T2.b_ea =1 and T2.b_rachat = 1 " & _
    "   and T1.d_effet = ( " & _
    "    select Max(d_effet) " & _
    "     from       " & db_Ev & "  ev " & _
    "     Inner join " & db_Cl & " cl " & _
    "     On ev.is_classe_evt=cl.is_classe_evt" & _
    "     where ev.no_police = '" & no_police & "' and cl.b_ea =1 and cl.b_rachat = 1 " & _
    "    ) "
RECSET.Open requete, cnn_Pegase, adOpenDynamic, adLockBatchOptimistic

End Sub

Mais il me semble qu'avec Oracle, on peut utiliser des With qui évite de réécrire la même requete,
ce que je ne peux pas faire avec mon driver Excel .
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Cela rejoint ce que je testais :
VB:
Sub testMP()
db_Ev = "db_evenement"
db_Cl = "dp_classe_evt"
no_police = "T342GB00827"
requete = _
    " Select  max(d_effet),sum(Abs(mt_brut_cie)) " & _
    "  from " & db_Ev & " as T1 " & _
    "     Inner join " & db_Cl & " as T2 " & _
    "     On T1.is_classe_evt = T2.is_classe_evt" & _
    "     where T1.no_police = '" & no_police & "' and T2.b_ea =1 and T2.b_rachat = 1 " & _
    "   and T1.d_effet = ( " & _
    "    select Max(d_effet) " & _
    "     from       " & db_Ev & "  ev " & _
    "     Inner join " & db_Cl & " cl " & _
    "     On ev.is_classe_evt=cl.is_classe_evt" & _
    "     where ev.no_police = '" & no_police & "' and cl.b_ea =1 and cl.b_rachat = 1 " & _
    "    ) "
RECSET.Open requete, cnn_Pegase, adOpenDynamic, adLockBatchOptimistic

End Sub

Mais il me semble qu'avec Oracle, on peut utiliser des With qui évite de réécrire la même requete,
ce que je ne peux pas faire avec mon driver Excel .
Merci beaucoup, malheureusement, je reçois une erreur :
1631274404655.png
 

Discussions similaires

Réponses
1
Affichages
612

Statistiques des forums

Discussions
311 725
Messages
2 081 948
Membres
101 849
dernier inscrit
florentMIG