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

10 réponses

1 2
Avatar
Raymond [mvp]
Bonsoir.

pour éviter d'aller chercher le sql dans une table (qu'il faudra maintenir)
il est préférable d'aller chercher l'instruction sql directement dans la
requête de l'autre base par automation.
exemple:
Dim qdf As DAO.QueryDef
Dim acApp As Access.Application
Set acApp = New Access.Application
With acApp
.Visible = False
.OpenCurrentDatabase ("bd2.mdb")
MavariableTexte = .CurrentDb.QueryDefs("requête5").sql
.CloseCurrentDatabase
.Quit
End With
Set acApp = Nothing

ça ira même plus vite que d'ouvrir la table et tu seras sûr de la bonne
instruction sql.

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


"Patrick Fredin" a écrit dans le
message de news:
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



Avatar
Patrick Fredin
Raymond,

Tu es vraiment génial.

--
Patrick

"Raymond [mvp]" wrote in message
news:%
Bonsoir.

pour éviter d'aller chercher le sql dans une table (qu'il faudra
maintenir) il est préférable d'aller chercher l'instruction sql
directement dans la requête de l'autre base par automation.
exemple:
Dim qdf As DAO.QueryDef
Dim acApp As Access.Application
Set acApp = New Access.Application
With acApp
.Visible = False
.OpenCurrentDatabase ("bd2.mdb")
MavariableTexte = .CurrentDb.QueryDefs("requête5").sql
.CloseCurrentDatabase
.Quit
End With
Set acApp = Nothing

ça ira même plus vite que d'ouvrir la table et tu seras sûr de la bonne
instruction sql.

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


"Patrick Fredin" a écrit dans le
message de news:
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







Avatar
Philippe [MS]
Arrétez, il va finir par le croire !!! :-) :-) :-)

C'est vrai que c'est une solution très élégante que je vais aussi
m'empresser d'utiliser !!!

Phil.

"Patrick Fredin" wrote in message
news:
Raymond,

Tu es vraiment génial.

--
Patrick

"Raymond [mvp]" wrote in message
news:%
Bonsoir.

pour éviter d'aller chercher le sql dans une table (qu'il faudra
maintenir) il est préférable d'aller chercher l'instruction sql
directement dans la requête de l'autre base par automation.
exemple:
Dim qdf As DAO.QueryDef
Dim acApp As Access.Application
Set acApp = New Access.Application
With acApp
.Visible = False
.OpenCurrentDatabase ("bd2.mdb")
MavariableTexte = .CurrentDb.QueryDefs("requête5").sql
.CloseCurrentDatabase
.Quit
End With
Set acApp = Nothing

ça ira même plus vite que d'ouvrir la table et tu seras sûr de la bonne
instruction sql.

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


"Patrick Fredin" a écrit dans le
message de news:
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











Avatar
Ma Dalton
moi aussi je garde la trace de ce code génial, surtout si on le rend
paramétrable.
merci


C'est vrai que c'est une solution très élégante que je vais aussi
m'empresser d'utiliser !!!


Avatar
Ma Dalton
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]
bonjour
bien compliqué ton truc, mon petit et chétif Raymond
Dim bd As Database
Set bd = OpenDatabase("D:AccessExo Access 97client_97.mdb")
MavariableTexte= bd.QueryDefs("ventes").SQL

pas besoin d'ouvrir une instance access


--
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
"Raymond [mvp]" a écrit dans le message de news:%
Bonsoir.

pour éviter d'aller chercher le sql dans une table (qu'il faudra maintenir)
il est préférable d'aller chercher l'instruction sql directement dans la
requête de l'autre base par automation.
exemple:
Dim qdf As DAO.QueryDef
Dim acApp As Access.Application
Set acApp = New Access.Application
With acApp
.Visible = False
.OpenCurrentDatabase ("bd2.mdb")
MavariableTexte = .CurrentDb.QueryDefs("requête5").sql
.CloseCurrentDatabase
.Quit
End With
Set acApp = Nothing

ça ira même plus vite que d'ouvrir la table et tu seras sûr de la bonne
instruction sql.

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


"Patrick Fredin" a écrit dans le
message de news:
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







Avatar
Raymond [mvp]
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]
re
j'ai du mal à suivre, l'age sans doute, depuis quand on ouvre une instance access, pour ouvrir un recordset sur une base externe

--
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
"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
Raymond [mvp]
Bonjour Pierre.

On peut aussi, mais tu sais bien que ma tendance vb est à l'automation (
pardon, automatisation), car je n'aime pas avoir deux bases ouvertes dans le
même espace et si on déclare un autre espace ça devient vite plus compliqué
(en code) et moins lisible. Et puis je pars du principe que toutes mes
relations access avec les logiciels office doivent se faire par automation
pour simplifier l'organisation générale des bases, une seule méthode pour
access, word, excel etc....

j'y repense, tu as pu modifier ton adresse ?
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Pierre CFI [mvp]" a écrit dans le message de
news:
bonjour
bien compliqué ton truc, mon petit et chétif Raymond
Dim bd As Database
Set bd = OpenDatabase("D:AccessExo Access 97client_97.mdb")
MavariableTexte= bd.QueryDefs("ventes").SQL

pas besoin d'ouvrir une instance access


--
Pierre CFI


Avatar
Raymond [mvp]
je n'en sais rien, mais la question d'origine était de récupérer le sql pour
le mettre dans une table, c'est tout.

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


"Pierre CFI [mvp]" a écrit dans le message de
news:
re
j'ai du mal à suivre, l'age sans doute, depuis quand on ouvre une instance
access, pour ouvrir un recordset sur une base externe

--
Pierre CFI


1 2