Microsoft 365 VBA ADODB : fonction datepart()

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Bonjour,

Voici mon code pour trouver une date sur les 15 dernières années :
VB:
datepart(year,ev.dt_effet)>=(datepart(year,Getdate())-15)

Je reçois l'erreur suivante :
1631387622285.png


Pourriez-vous m'aider s'il vous plaît ?

Merci beaucoup !
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Bonsoir,
VB:
extract(year from ev.dt_effet)>= extract(year from current_timestamp) -15
Merci, malheureusement je reçois toujours une erreur :
1631392203951.png

Voici mon code :
VB:
 Dim RECSET As New ADODB.Recordset
    RECSET.Open "select count(distinct(ev.d_effet)) as nombre_versement_15ans 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 and extract(year from ev.dt_effet)>=extract(year from current_timestamp)-15", cnn_Pegase, adOpenDynamic, adLockBatchOptimistic
 

dysorthographie

XLDnaute Accro
essai comme ça!
VB:
 RECSET.Open "select count(distinct(ev.d_effet)) as nombre_versement_15ans 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 and extract(year from db_evenement.dt_effet)>=extract(year from current_timestamp)-15", cnn_Pegase, adOpenDynamic, adLockBatchOptimistic
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
essai comme ça!
VB:
 RECSET.Open "select count(distinct(ev.d_effet)) as nombre_versement_15ans 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 and extract(year from db_evenement.dt_effet)>=extract(year from current_timestamp)-15", cnn_Pegase, adOpenDynamic, adLockBatchOptimistic
Merci, ça marche !!
Je me demande pourquoi la fonction Datepart ne marche pas en sql adodb ?
 

dysorthographie

XLDnaute Accro
Ce n'est pas un problème SQL ADODB mais un problème Oracle SQL !

Notes que tu utilises SAS qui peut travailler avec SQL SERVUER, MYSQL, ORACLE etc.
SAS gère sa propre syntaxe SQL alors qu'ADODB gère l'a syntaxe SQL lié à la connexion donc Oracle !

Dans tous ce que j'ai trouvé sur internet concernant DatePart ça me ramène toujours à Extract!

J'ai même trouvé un site qui parle d'équivalence entre SQL serveur DatePart et Oracle Extract!

De là dire que DatePart n'existe pas dans Oracle ???!!!

Pour ce qui concerne ev.d_effet invalid identifier il semblerait qu'Oracle gère mal les alias !
 
Dernière édition:

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Ce n'est pas un problème SQL ADODB mais un problème Oracle SQL !

Notes que tu utilises SAS qui peut travailler avec SQL SERVUER, MYSQL, ORACLE etc.
SAS gère sa propre syntaxe SQL alors qu'ADODB gère l'a syntaxe SQL lié à la connexion donc Oracle !

Dans tous ce que j'ai trouvé sur internet concernant DatePart ça me ramène toujours à Extract!

J'ai même trouvé un site qui parle d'équivalence entre SQL serveur DatePart et Oracle Extract!

De là dire que DatePart n'existe pas dans Oracle ???!!!

Pour ce qui concerne ev.d_effet invalid identifier il semblerait qu'Oracle gère mal les alias !
Merci beaucoup !
Où je pourrais apprendre la syntaxe SQL lié à la connexion donc Oracle, s’il vous plaît ? Je confonds tout pour l’instant )
 

dysorthographie

XLDnaute Accro
Quand j'étais encore jeune et beau je faisais du SQL Oracle et j'avais accès à la Bible de 150 000 pages ! Mais là Google m'a été d'une aide précieuse en comblant les trous de ma mémoire défaillante !

 
Dernière édition:

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Quand j'étais encore jeune et beau je faisais du SQL Oracle et j'avais accès à la Bible de 150 000 pages ! Mais là Google m'a été d'une aide précieuse en comblant les trous de ma mémoire défaillante !

Merci beaucoup ! Si j'ai bien compris, VBA ADODB Recordset demande la syntaxe SQL Oracle et le SQL de SAS c'est pas la même chose.
 

dysorthographie

XLDnaute Accro
Merci beaucoup ! Si j'ai bien compris, VBA ADODB Recordset demande la syntaxe SQL Oracle et le SQL de SAS c'est pas la même chose.
ADODB est un composant permettant de ce connecter à une base de données;
chaque fournisseur de base de données fournis ses propre connecteur ODBC pour permettre à ADODB d'établir une connexion et manipuler les données;
ce sont les driver ODBC fourni par SQL serveur, MySQL Oracle, Access etc qui définissent la syntaxe SQL approprié!

SAS met à ses utilisateur un requêteur, mais ce sont les utilisateurs qui choisissent le type de base de données choisir SQL serveur, MySQL Oracle

donc SAS à mis au point sa propre syntaxe SQL en fonction de ce qui ce pratique le plus généralement!

voici un panel des connexion ADODB possible!
VB:
Select Case TYPEBASE
    Case Xls
            GenereCSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Base & ";Extended Properties=""Excel 12.0;HDR=" & Array("No", "YES")(Abs(AvecTitre)) & ";"""
    Case ACCESS97
        GenereCSTRING = "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=" & fichier
    Case ACCESS2000
        GenereCSTRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & fichier & ";Persist Security Info=False"
    Case ACCESS2012
        GenereCSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & fichier & ";"
    Case MySQL
    GenereCSTRING = " DRIVER={MySQL ODBC 5.1 Driver};SERVER=" & Server & ";UID=" & User & ";DATABASE=" & Base & ";Password=" & PassWord
    Case ODBC
        GenereCSTRING = "Provider=MSDASQL.1;Password=" & PassWord & ";Persist Security Info=True;User ID=" & User & ";Data Source=" & Base
    Case ORACLE
        GenereCSTRING = "Provider=OraOLEDB.Oracle.1;Password=" & PassWord & ";Persist Security Info=True;User ID=" & User & ";Data Source=" & Base
    Case SQLSERVER2005
        GenereCSTRING = "Provider=SQLOLEDB.1;Password=" & PassWord & ";Persist Security Info=True;User ID=" & User & ";Initial Catalog=" & Base & ";Data Source=" & Server
    Case SQLServer2008R2
        GenereCSTRING = "Provider=SQLNCLI;Server=" & Server & ";Database=" & Base & ";UID=" & User & ";PWD=" & PassWord & ";"
    Case SQLite
        GenereCSTRING = "Provider=OleSQLite.SQLiteSource.3; Data Source=" & fichier
        GenereCSTRING = "Driver={SQLite ODBC (UTF-8) Driver};Database=" & fichier & ";StepAPI=;Timeout="
    Case SQLite3
        GenereCSTRING = "Driver={SQLite3 ODBC Driver};Database=" & fichier & ";LongNames=0;Timeout=4000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;"
    Case CSV
        GenereCSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Server & ";Extended Properties=""Text;HDR=" & Array("No", "YES")(Abs(AvecTitre)) & ";FMT=Delimited;"""
    Case Else
        GenereCSTRING = "PAS ASSEZ DE PARAMETRES RENSEIGNES !!!"
End Select
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
ADODB est un composant permettant de ce connecter à une base de données;
chaque fournisseur de base de données fournis ses propre connecteur ODBC pour permettre à ADODB d'établir une connexion et manipuler les données;
ce sont les driver ODBC fourni par SQL serveur, MySQL Oracle, Access etc qui définissent la syntaxe SQL approprié!

SAS met à ses utilisateur un requêteur, mais ce sont les utilisateurs qui choisissent le type de base de données choisir SQL serveur, MySQL Oracle

donc SAS à mis au point sa propre syntaxe SQL en fonction de ce qui ce pratique le plus généralement!

voici un panel des connexion ADODB possible!
VB:
Select Case TYPEBASE
    Case Xls
            GenereCSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Base & ";Extended Properties=""Excel 12.0;HDR=" & Array("No", "YES")(Abs(AvecTitre)) & ";"""
    Case ACCESS97
        GenereCSTRING = "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=" & fichier
    Case ACCESS2000
        GenereCSTRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & fichier & ";Persist Security Info=False"
    Case ACCESS2012
        GenereCSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & fichier & ";"
    Case MySQL
    GenereCSTRING = " DRIVER={MySQL ODBC 5.1 Driver};SERVER=" & Server & ";UID=" & User & ";DATABASE=" & Base & ";Password=" & PassWord
    Case ODBC
        GenereCSTRING = "Provider=MSDASQL.1;Password=" & PassWord & ";Persist Security Info=True;User ID=" & User & ";Data Source=" & Base
    Case ORACLE
        GenereCSTRING = "Provider=OraOLEDB.Oracle.1;Password=" & PassWord & ";Persist Security Info=True;User ID=" & User & ";Data Source=" & Base
    Case SQLSERVER2005
        GenereCSTRING = "Provider=SQLOLEDB.1;Password=" & PassWord & ";Persist Security Info=True;User ID=" & User & ";Initial Catalog=" & Base & ";Data Source=" & Server
    Case SQLServer2008R2
        GenereCSTRING = "Provider=SQLNCLI;Server=" & Server & ";Database=" & Base & ";UID=" & User & ";PWD=" & PassWord & ";"
    Case SQLite
        GenereCSTRING = "Provider=OleSQLite.SQLiteSource.3; Data Source=" & fichier
        GenereCSTRING = "Driver={SQLite ODBC (UTF-8) Driver};Database=" & fichier & ";StepAPI=;Timeout="
    Case SQLite3
        GenereCSTRING = "Driver={SQLite3 ODBC Driver};Database=" & fichier & ";LongNames=0;Timeout=4000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;"
    Case CSV
        GenereCSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Server & ";Extended Properties=""Text;HDR=" & Array("No", "YES")(Abs(AvecTitre)) & ";FMT=Delimited;"""
    Case Else
        GenereCSTRING = "PAS ASSEZ DE PARAMETRES RENSEIGNES !!!"
End Select
Merci beaucoup pour votre réponse !
 

Discussions similaires

Réponses
1
Affichages
622
Réponses
3
Affichages
197
Réponses
2
Affichages
153

Statistiques des forums

Discussions
312 145
Messages
2 085 759
Membres
102 965
dernier inscrit
Mael44