injecter une syntaxe dans une requete SQL direct avec ADO
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:
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 ? :oops:
Code:
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 !