OVH Cloud OVH Cloud

SQL d'une requête dans un champ

12 réponses
Avatar
Patrick Fredin
Bonjour,

Je voudrais sauvegarder dans une table le SQL des requêtes pour les rendre
accessibles (les requêtes) depuis une base externe qui utilise les mêmes
données et qui exécute les requêtes avec VBA. De cette façon, si la requête
est modifiée, les modifications seront prises en compte par l'autre base.
En fait, en gros, j'ai base de développement où je crée les requêtes. J'ai
une base de travail. Au lieu de refaire à chaque fois un fichier MDE si des
requêtes ont été modifiées, je pourrais ainsi profiter directement des
modifications, le code VBA ne changeant pas.

Mais d'un autre côté, je voudrais pouvoir utiliser l'interface graphique
d'Access pour pouvoir créer et modifier les requêtes.

Est-il possible de combiner les 2 ?

Un grand merci pour votre aide.

--
Patrick

2 réponses

1 2
Avatar
Ma Dalton
bonjour Raymond,
oui, je sais pour la première fonction j'en avais une assez similaire à ce
que tu proposes ici. en réalité il ne me manquait que la seconde fonction
qui fait usage du recorset, c'est d'ailleurs ce qui me préoccupais hier soir
avant d'aller au dodo. cependant avec la contribution de PierreCFI qui
suggère de ne pas ouvrir de nouvelle instance access, je trouve sa solution
plus élégante.
ce n'était pas ma question initiale mais j'y ai participé par intérêt et
j'ai encore appris qq chose.

A+

"Raymond [mvp]" a écrit dans le message de
news:
Bonjour.

faut pas faire comme ça.
1- créer une fonction public dans un module standard:
Public Function getOtherSQL(DataBaseName As String, QueryName As String)
As
Variant
getOtherSQL = ""
On Error GoTo Err_getOtherSQL
Dim qdf As DAO.QueryDef
Dim acApp As Access.Application
Set acApp = New Access.Application
With acApp
.Visible = False 'facultatif valeur par défaut
.OpenCurrentDatabase (DataBaseName)
getOtherSQL = Replace(.CurrentDb.QueryDefs(QueryName).sql, _
vbCrLf, " ")
.CloseCurrentDatabase
.Quit
End With
Set acApp = Nothing
Err_getOtherSQL:
End Function

2- appeler ta fonction comme ceci dans ton code vba, sous un bouton de
commande par exemple:
Private Sub Commande0_Click()
Dim Rs As DAO.Recordset
Set Rs = CurrentDb.OpenRecordset(getOtherSQL("bd2.mdb", "requête5"))
While Not Rs.EOF
Debug.Print Rs(0)
Rs.MoveNext
Wend
Set Rs = Nothing
End Sub

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Ma Dalton" a écrit dans le message de news:

re bonjour,
mais je n'arrive pas à exécuter le SQL ainsi récupérer

merci de me dire ce qui me manque

voici ma fenêtre d'exécution pour fins de test:

? strRequeteSQL("c:datamabase.mdb", "test")
SELECT tlkpAgent.AgentChimique, tlkpAgent.Code, tlkpAgent.AgentTableau
FROM tlkpAgent
WHERE (((tlkpAgent.AgentTableau)="pesticides"));


docmd.RunSQL(strRequeteSQL("c:datamadobaselistes.mdb", "test"))









Avatar
Pierre CFI [mvp]
avant d'aller au dodo. cependant avec la contribution de PierreCFI qui
suggère de ne pas ouvrir de nouvelle instance access, je trouve sa solution
plus élégante


oui, nous n'avons pas mes mémes valeurs :o)))

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
Access http://users.skynet.be/mpfa/
Excel http://www.excelabo.net
Site perso
http://access.cfi.free.fr
"Ma Dalton" a écrit dans le message de news:%
bonjour Raymond,
oui, je sais pour la première fonction j'en avais une assez similaire à ce
que tu proposes ici. en réalité il ne me manquait que la seconde fonction
qui fait usage du recorset, c'est d'ailleurs ce qui me préoccupais hier soir
avant d'aller au dodo. cependant avec la contribution de PierreCFI qui
suggère de ne pas ouvrir de nouvelle instance access, je trouve sa solution
plus élégante.
ce n'était pas ma question initiale mais j'y ai participé par intérêt et
j'ai encore appris qq chose.

A+

"Raymond [mvp]" a écrit dans le message de
news:
Bonjour.

faut pas faire comme ça.
1- créer une fonction public dans un module standard:
Public Function getOtherSQL(DataBaseName As String, QueryName As String)
As
Variant
getOtherSQL = ""
On Error GoTo Err_getOtherSQL
Dim qdf As DAO.QueryDef
Dim acApp As Access.Application
Set acApp = New Access.Application
With acApp
.Visible = False 'facultatif valeur par défaut
.OpenCurrentDatabase (DataBaseName)
getOtherSQL = Replace(.CurrentDb.QueryDefs(QueryName).sql, _
vbCrLf, " ")
.CloseCurrentDatabase
.Quit
End With
Set acApp = Nothing
Err_getOtherSQL:
End Function

2- appeler ta fonction comme ceci dans ton code vba, sous un bouton de
commande par exemple:
Private Sub Commande0_Click()
Dim Rs As DAO.Recordset
Set Rs = CurrentDb.OpenRecordset(getOtherSQL("bd2.mdb", "requête5"))
While Not Rs.EOF
Debug.Print Rs(0)
Rs.MoveNext
Wend
Set Rs = Nothing
End Sub

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Ma Dalton" a écrit dans le message de news:

re bonjour,
mais je n'arrive pas à exécuter le SQL ainsi récupérer

merci de me dire ce qui me manque

voici ma fenêtre d'exécution pour fins de test:

? strRequeteSQL("c:datamabase.mdb", "test")
SELECT tlkpAgent.AgentChimique, tlkpAgent.Code, tlkpAgent.AgentTableau
FROM tlkpAgent
WHERE (((tlkpAgent.AgentTableau)="pesticides"));


docmd.RunSQL(strRequeteSQL("c:datamadobaselistes.mdb", "test"))













1 2