OVH Cloud OVH Cloud

instruction sql d'une requete

4 réponses
Avatar
MJ
Bonjour,

la fonction suivante me permet de r=E9cuperer l'instruction=20
sql d'une requete
.........mais cela ne marche pas avec une requete selection
pourquoi ??
j'ai le message suivant
impossible de trouver l'objet dans la collection=20
correspondant au nom ou =E0 la reference ordinale demand=E9e


Function RecupSQL(strQuery As String)

Dim cat As New ADOX.Catalog
Dim qry As Recordset
Dim cmd As ADODB.Command
Set cat.ActiveConnection =3D CurrentProject.Connection
Set cmd =3D cat.Procedures(strQuery).Command

RecupSQL =3D cmd.CommandText
'Debug.Print RecupSQL
end function

merci de votre aide
MJ

4 réponses

Avatar
Benoit Compoint
Bonjour,

Les requêtes "Sélection" sans paramètres sont considérées comme des vues (et
non comme des procédures stockées).
C'est pourquoi, pour ce type de requête, il faut utiliser la collection
"Views" de l'objet "cat", au lieu d'utiliser la collection "Procedures".

Benoît Compoint.

"MJ" wrote in message
news:0be801c398a7$b7fa4b20$
Bonjour,

la fonction suivante me permet de récuperer l'instruction
sql d'une requete
.........mais cela ne marche pas avec une requete selection
pourquoi ??
j'ai le message suivant
impossible de trouver l'objet dans la collection
correspondant au nom ou à la reference ordinale demandée


Function RecupSQL(strQuery As String)

Dim cat As New ADOX.Catalog
Dim qry As Recordset
Dim cmd As ADODB.Command
Set cat.ActiveConnection = CurrentProject.Connection
Set cmd = cat.Procedures(strQuery).Command

RecupSQL = cmd.CommandText
'Debug.Print RecupSQL
end function

merci de votre aide
MJ
Avatar
MJ
Bonjour,

c'est ok ............un grand merci

maintenant j'aimerai améliorer ma fonction pourque l'on
puisse l'appeler avec n'importe quelle requete
comment faire pour tester le type de requete (sélection,
analyse croisée..) avant la ligne

Set cmd = cat.Procedures(strQuery).Command
ou Set cmd = cat.Views(strQuery).Command


MJ


-----Message d'origine-----
Bonjour,

Les requêtes "Sélection" sans paramètres sont considérées
comme des vues (et

non comme des procédures stockées).
C'est pourquoi, pour ce type de requête, il faut utiliser
la collection

"Views" de l'objet "cat", au lieu d'utiliser la
collection "Procedures".


Benoît Compoint.

"MJ" wrote in
message

news:0be801c398a7$b7fa4b20$
Bonjour,

la fonction suivante me permet de récuperer l'instruction
sql d'une requete
..........mais cela ne marche pas avec une requete
selection

pourquoi ??
j'ai le message suivant
impossible de trouver l'objet dans la collection
correspondant au nom ou à la reference ordinale demandée


Function RecupSQL(strQuery As String)

Dim cat As New ADOX.Catalog
Dim qry As Recordset
Dim cmd As ADODB.Command
Set cat.ActiveConnection = CurrentProject.Connection
Set cmd = cat.Procedures(strQuery).Command

RecupSQL = cmd.CommandText
'Debug.Print RecupSQL
end function

merci de votre aide
MJ


.



Avatar
Benoit Compoint
Bonjour,

Il y au moins deux solutions possibles :

1. On utilise l'intruction "On Error Resume Next" avant la première ligne
"Set cmd=" de façon à éviter l'affichage d'une erreur.
On teste ensuite si une erreur est survenue, et si c'est le cas on exécute
la second instruction "Set cmd=" (en utilisant une collection différente,
par exemple "Views" si la première instruction utilisait la collection
"Procedures").

2. On parcourt la collection "Views" avec une boucle "For Each ... in ..."
en testant la valeur de la propriété Name de chaque élément de la collection
"Views".
Si aucun objet de type "View" n'a le nom de la requête recherchée, il s'agit
probablement d'un objet de type "Procedure", on peut dans ce cas utiliser
l'instruction Set cmd = cat.Procedures(strQuery).Command

Benoît Compoint

"MJ" wrote in message
news:023d01c39939$24f04ea0$
Bonjour,

c'est ok ............un grand merci

maintenant j'aimerai améliorer ma fonction pourque l'on
puisse l'appeler avec n'importe quelle requete
comment faire pour tester le type de requete (sélection,
analyse croisée..) avant la ligne

Set cmd = cat.Procedures(strQuery).Command
ou Set cmd = cat.Views(strQuery).Command


MJ


-----Message d'origine-----
Bonjour,

Les requêtes "Sélection" sans paramètres sont considérées
comme des vues (et

non comme des procédures stockées).
C'est pourquoi, pour ce type de requête, il faut utiliser
la collection

"Views" de l'objet "cat", au lieu d'utiliser la
collection "Procedures".


Benoît Compoint.

"MJ" wrote in
message

news:0be801c398a7$b7fa4b20$
Bonjour,

la fonction suivante me permet de récuperer l'instruction
sql d'une requete
..........mais cela ne marche pas avec une requete
selection

pourquoi ??
j'ai le message suivant
impossible de trouver l'objet dans la collection
correspondant au nom ou à la reference ordinale demandée


Function RecupSQL(strQuery As String)

Dim cat As New ADOX.Catalog
Dim qry As Recordset
Dim cmd As ADODB.Command
Set cat.ActiveConnection = CurrentProject.Connection
Set cmd = cat.Procedures(strQuery).Command

RecupSQL = cmd.CommandText
'Debug.Print RecupSQL
end function

merci de votre aide
MJ


.



Avatar
MJ
Bonjour,

j'ai opte pour la seconde solution, mais je ne suis pas
arrivee à parcourir la collection avec la boucle For Each

voici ma fonction qui a l'air de marcher

Dim cat As New ADOX.Catalog
Dim qry As Recordset
Dim cmd As ADODB.Command
Set cat.ActiveConnection = CurrentProject.Connection

Dim nbViews, nbProcedures, i
nbViews = cat.Views.Count
For i = 0 To nbViews - 1
If strQuery = cat.Views(i).Name Then
Set cmd = cat.Views(strQuery).Command
End If
Next i

nbProcedures = cat.Procedures.Count
For i = 0 To nbProcedures - 1
If strQuery = cat.Procedures(i).Name Then
Set cmd = cat.Procedures(strQuery).Command
End If
Next i

RecupSQL = cmd.CommandText


pourriez-vous me donner la syntaxe pour utiliser
For Each..........in

bonne journée et encore merci
MJ

-----Message d'origine-----
Bonjour,

Il y au moins deux solutions possibles :

1. On utilise l'intruction "On Error Resume Next" avant
la première ligne

"Set cmd=" de façon à éviter l'affichage d'une erreur.
On teste ensuite si une erreur est survenue, et si c'est
le cas on exécute

la second instruction "Set cmd=" (en utilisant une
collection différente,

par exemple "Views" si la première instruction utilisait
la collection

"Procedures").

2. On parcourt la collection "Views" avec une boucle "For
Each ... in ..."

en testant la valeur de la propriété Name de chaque
élément de la collection

"Views".
Si aucun objet de type "View" n'a le nom de la requête
recherchée, il s'agit

probablement d'un objet de type "Procedure", on peut dans
ce cas utiliser

l'instruction Set cmd = cat.Procedures(strQuery).Command

Benoît Compoint

"MJ" wrote in
message

news:023d01c39939$24f04ea0$
Bonjour,

c'est ok ............un grand merci

maintenant j'aimerai améliorer ma fonction pourque l'on
puisse l'appeler avec n'importe quelle requete
comment faire pour tester le type de requete (sélection,
analyse croisée..) avant la ligne

Set cmd = cat.Procedures(strQuery).Command
ou Set cmd = cat.Views(strQuery).Command


MJ


-----Message d'origine-----
Bonjour,

Les requêtes "Sélection" sans paramètres sont considérées
comme des vues (et

non comme des procédures stockées).
C'est pourquoi, pour ce type de requête, il faut utiliser
la collection

"Views" de l'objet "cat", au lieu d'utiliser la
collection "Procedures".


Benoît Compoint.

"MJ" wrote in
message

news:0be801c398a7$b7fa4b20$
Bonjour,

la fonction suivante me permet de récuperer l'instruction
sql d'une requete
..........mais cela ne marche pas avec une requete
selection

pourquoi ??
j'ai le message suivant
impossible de trouver l'objet dans la collection
correspondant au nom ou à la reference ordinale demandée


Function RecupSQL(strQuery As String)

Dim cat As New ADOX.Catalog
Dim qry As Recordset
Dim cmd As ADODB.Command
Set cat.ActiveConnection = CurrentProject.Connection
Set cmd = cat.Procedures(strQuery).Command

RecupSQL = cmd.CommandText
'Debug.Print RecupSQL
end function

merci de votre aide
MJ


.




.