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.
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"));
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]" <XYZ.officesystem.access@free.fr> a écrit dans le message de
news: OeFqeVHzEHA.1392@tk2msftngp13.phx.gbl...
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" <rantanplan@farwest.net> a écrit dans le message de news:
uwpf9zFzEHA.4028@TK2MSFTNGP15.phx.gbl...
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"));
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"));
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"));
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" <rantanplan@farwest.net> a écrit dans le message de news:%230gstsJzEHA.3028@TK2MSFTNGP10.phx.gbl...
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]" <XYZ.officesystem.access@free.fr> a écrit dans le message de
news: OeFqeVHzEHA.1392@tk2msftngp13.phx.gbl...
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" <rantanplan@farwest.net> a écrit dans le message de news:
uwpf9zFzEHA.4028@TK2MSFTNGP15.phx.gbl...
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"));
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"));