OVH Cloud OVH Cloud

Une Requête ajout pour plusieurs tables!!!!

3 réponses
Avatar
atmus
Bonjour,

Mon probl=E8me est un peu bizzare!!!

J'ai une table T
J'ai 12 autres tables de T1 =E0 T12 de m=EAme structure
Je voudrais construire une requ=EAte/Ajout R, qui me=20
permettrait d'ajouter T =E0 l'une des autres tables de T1 =E0=20
T12. =3D=3D> cela veut dire que je dois voir 12 requ=EAtes.

Y'a t'il un moyen de n'avoir qu'une seule requ=EAte qui me=20
permettent =E0 l'ex=E9cution:
- de m'afficher la liste des tables T1 =E0 T12 (y a d'autres=20
tables bien s=FBr, =E0 ne pas afficher)
- de me donner la main pour choisir une table
- et d'ex=E9cuter alors la requ=EAte ajout en fonction de la=20
table que j'i s=E9lectionn=E9

Bizzare, non!!!

Merci

3 réponses

Avatar
3stone
Salut,

atmus
J'ai une table T
J'ai 12 autres tables de T1 à T12 de même structure
Je voudrais construire une requête/Ajout R, qui me
permettrait d'ajouter T à l'une des autres tables de T1 à
T12. ==> cela veut dire que je dois voir 12 requêtes.

Y'a t'il un moyen de n'avoir qu'une seule requête qui me
permettent à l'exécution:
- de m'afficher la liste des tables T1 à T12 (y a d'autres
tables bien sûr, à ne pas afficher)
- de me donner la main pour choisir une table
- et d'exécuter alors la requête ajout en fonction de la
table que j'i sélectionné


12 tables... ca me fait penser aux 12 mois de l'année, non ?

Mettre le tout dans une table et ajouter un champ qui contient une date
résoudrait avantageusement ce genre de problème, me semble-t-il.


--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/
--------------------------------------
Avatar
Atmus
Salut Xavier,

Tu as bien compris mon souci.

J'ai suit les étapes qui tu m'a décrit.

Mais lorsque je clique sur le bouton ça bogue sur les
points suivants:

1- Dim db As Database
2- La synthaxe SQL: INSERT TO ..... ==> elle se coulore en
rouge
3- DoCmd.RunSQL strQryDefSQL

Avec:
-TSOURCE: La table source de la requête ajout
-R_AJOUTER_TSOURCE_A_MOIS: La requête ajout
-Mois01: La première table des 12 tables destinatrices
(Mois02, ...Mois12)
-Modifiable22: Valeur à récupérer de la liste modifiable

Voilà le code complet du bouton:

Private Sub Commande25_Click()
Dim db As Database
Dim strQryDefSQL As String
Dim lngQryDefSQL As Long

Set db = CurrentDb

strQryDefSQL = db.QueryDefs
("R_AJOUTER_TSOURCE_A_MOIS").SQL


INSERT INTO Mois01 ( NUM, COMPTE, METIER, LOCALITE, OBJET,
MONTANT )

SELECT TSOURCE.NUM, TSOURCE.COMPTE, TSOURCE.METIER,
TSOURCE.LOCALITE, TSOURCE.OBJET, TSOURCE.MONTANT

FROM TSOURCE;



'Triturer la chaine SQL qui doit se présenter ainsi
'INSERT INTO TableT1
'SELECT ...
'FROM ReqSelectBaseTableT ...

lngQryDefSQL = InStr(strQryDefSQL, "SELECT")
'Trouver la position du SELECT

strQryDefSQL = Left(strQryDefSQL, 12) & _
Me.Modifiable22.Value & " " & _
Mid$(strQryDefSQL, lngQryDefSQL)

Set db = Nothing

DoCmd.RunSQL strQryDefSQL

End Sub


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

Une solution:

1) Créer la requête de sélection de base sur la table T
(et éventuellement d'autres tables en jointure) et
l'enregistrer, par exemple sous le
nom "ReqSelectBaseTableT":

2) Créer la requête d'ajout sur la table T1, en prenant
comme source la requete SelectBaseTableT

Ce qu'il reste à faire, c'est, écrire/récupérer un bon de
code permettant de choisir la requête cible. Si la table
source est toujours l'une des tables T1 à T12, le plus
simple, c'est de prévoir la sélection via lune liste
déroulante, ou un groupe d'option.

3) Pour exécuter la requête en fonction du choix de
l'utilisateur, il faudra
a) Récupérer la source SQL de la requête ajout pré-
enregistrée
b) Modifier cette source de façon à "pointer" sur la
table cible
c) Exécuter cette requête

Soit (en Access 97):

Dim db As Database
Dim strQryDefSQL As String
Dim lngQryDefSQL As Long

Set db = CurrentDb

strQryDefSQL = db.QueryDefs("ReqAjoutTableT").SQL

'Triturer la chaine SQL qui doit se présenter ainsi
'INSERT INTO TableT1
'SELECT ...
'FROM ReqSelectBaseTableT ...

lngQryDefSQL = InStr
(strQryDefSQL, "SELECT") 'Trouver

la position du SELECT

strQryDefSQL = left(strQryDefSQL, 12) & _
Me.Modifiable0.Value & " " & _
Mid$(strQryDefSQL, lngQryDefSQL)

Set db = Nothing

DoCmd.RunSQL strQryDefSQL

Espérant t'avoir aider.
Cordialement.

PS: Enlever blurg dans l'adresse mail
.



Avatar
Xavier HUE
Bonjour Atmus,

Si Modifiable22 contient uniquement le nom de la table
destinatrice, il te faut compléter la chaine SQL avec la
liste des champs destinataires.
L'exemple donné ne fonctionne qu'avec tous les champs ;-)

Donc,

strQryDefSQL = Left(strQryDefSQL, 12) & _
Me.Modifiable22.Value & " ( NUM, COMPTE,
METIER, LOCALITE, OBJET, >MONTANT ) " & _
Mid$(strQryDefSQL, lngQryDefSQL)

Ou bien, si le nom de la table destination EST TOUJOURS
Moisxx, utilise plutôt:

strQryDefSQL = Left(strQryDefSQL, 12) & _
Me.Modifiable22.Value & _
Mid$(strQryDefSQL, 20)
Ceci marchera toujours, même si tu rajoute des champs dans
l'INSERT et le SELECT.

Enfin, une dernière solution, la plus propre à mon goût,
consiste à faire une analyse de strQryDef pour y remplacer
chaque occurrence de "Mois01" par le nom de la table
destinatrice. Voir la fonction Replace en Access 2000 et
supérieur, et en fouinant un peu dans les archives tu
devrais trouver des fonctions qui font ca trés bien.

Est-ce que ca fonctionne mieux?

Cordialement.