Bonjour,

J'ai besoin de vos conseils car même si j'ai déjà écrit des posts sur DAO/ADO, j'ai encore de grandes difficultés à comprendre à quoi ça correspond. Mon objectif final est d'injecter ma syntaxe SQL écrite en partie en VBA dans une requête SQL direct.

Jusque là, mon programme fonctionnait à peu près car il se pouvait que, de façon aléatoire, il y ait parfois un message indiquant que l'appel à ODBC avait échoué. Comme j'avais déjà eu ce problème, j'ai voulu changer DAO en ADO en pensant que ça allait résoudre la situation...

Voici le code où j'utilise un recordset DAO et où parfois j'ai une erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
Public Sub ComputeQueries(SQLWhere As String, db As DAO.Database)
 
    On Error GoTo err
    Dim RstTable As DAO.Recordset
    Dim strSQLModele As String
    Dim strNomRqt As String
 
    Set RstTable = db.OpenRecordset("SELECT QueryName, QueryCode FROM QUERIES where TypeV='TYPE1'")
    RstTable.MoveFirst
    While Not RstTable.EOF
        strNomRqt = RstTable.Fields("QueryName").Value
        strSQLModele = RstTable.Fields("QueryCode")
        db.QueryDefs(strNomRqt).SQL = strSQLModele ' cette ligne injecte la syntaxe SQL contenue dans strSQLModele dans ma requête SQL direct déjà existante au nom strNomRqt
        RstTable.MoveNext
    Wend
    RstTable.Close
    Set RstTable = Nothing
 
    Exit Sub
err:
    MsgBox "Une erreur est survenue" & vbCrLf & err.Description, vbCritical, "ComputeQueries"
End Sub
Voici le code où j'utilise un recordset ADO qui semble marcher mais j'ai peur de tout mélanger en mixant du code DAO et ADO (j'ai laissé db as DAO.database) donc j'aimerai avoir votre avis sur ce code: suis-je en train de faire n'importe quoi ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
Public Sub ComputeQueriesADO(SQLWhere As String, db As DAO.Database)
 
    On Error GoTo err
 
    Dim oCn As ADODB.Connection
    Dim oRS As ADODB.Recordset
    Dim sSql As String
    Dim strSQLModele As String
    Dim strNomRqt As String
 
    Set oCn = Application.CurrentProject.Connection
    Set oRS = New ADODB.Recordset
    Set oRS.ActiveConnection = oCn
    sSql = "SELECT QueryName, QueryCode FROM QUERIES where TypeV='TYPE1'"
    oRS.Open sSql, , adOpenForwardOnly, adLockReadOnly, adCmdText
 
    oRS.MoveFirst
    While Not oRS.EOF
        strNomRqt = oRS.Fields("QueryName").Value
        strSQLModele = oRS.Fields("QueryCode")
        db.QueryDefs(strNomRqt).SQL = strSQLModele
        oRS.MoveNext
    Wend
    oRS.Close
    Set oRS = Nothing
    oCn.Close
    Set oCn = Nothing
 
    Exit Sub
err:
    MsgBox "Une erreur est survenue" & vbCrLf & err.Description, vbCritical, "ComputeQueriesADO"
End Sub
Pouvez-vous me dire si je m'y prends bien ?
J'ai fait des tests en utilisant command et catalogue ADOX mais je ne m'en suis pas sortie donc je suis revenue à QueryDefs ...
Merci !