Comment éxécuter plusieurs requetes??

Signaler
Messages postés
21
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
8 juin 2007
-
yakusa82
Messages postés
21
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
8 juin 2007
-
Salut,

Voila je suis débutant en VB et SQL oui je cumule

Voila ma question
Sous Access j'ai 4 requettes
requettes 1= creation liste 1
requettes 2= creation liste 2
requettes 3= mixe les informations recupéré de la liste 1 et liste 2
requette 4 = fait une maj des libellés pour qu'il est tous la meme strucutres

actuellement j'execute ses 4 requettes les une apres les autres en double cliquant simplement dessus

Mon but est de crée un petit module qui m'exécuterais ses 4 requetes les unes a la suite des autres

Help

21 réponses

Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
1
OK, désolé de pas t'avoir prévenu que j'etais parti LOL.

Donc pour parametre tes requetes fais ca :

Option Compare Database
Public Sub Requete()

Dim Valeur1 As String
Valeur1 = "critere"
Dim Valeur2 As String
Valeur2 = "periode"

Dim rqt As AccessObject

For Each rqt In CurrentData.AllQueries
    if rqt.name = Nom_requete3 or then
         valeur1 = inputbox "Veuillez entre le critere de la requete" & rqt.name 
         SQL = "SELECT ACFIC0101_ACPROMPF.NOPRPR, [Fichiers articles].DESIG, ACFIC0101_ACPROMPF.PSP7PR, [Poids mesures].Champ2 AS [Lib poids], Int(100*[PSP7PR]/[POCTU])/100 AS PK, Int(ACFIC0101_ACPROMPF!PSP7PR) AS euros, Right(Str(100*ACFIC0101_ACPROMPF!PSP7PR),2) AS centimes, "& Valeur1 &
" AS Periode, ACFIC0101_ACPROMPF.CDPLPR INTO [table des stops]
FROM (ACFIC0101_ACPROMPF LEFT JOIN [Fichiers articles] ON ACFIC0101_ACPROMPF.CDPLPR = [Fichiers articles].PLIG) LEFT JOIN [Poids mesures] ON [Fichiers articles].PKGL = [Poids mesures].Champ1
WHERE (((ACFIC0101_ACPROMPF.NOPRPR)=3259 Or (ACFIC0101_ACPROMPF.NOPRPR)=3260));"

         DoCmd.RunSQL SQL

   elseif rqt.name = Nom_requete4 or then
         valeur2 = inputbox "Veuillez entre le critere de la requete" & rqt.name 
         'La tu fais pareil que la requete3 mais pour l'autre champ et valeur 2
   else
         DoCmd.OpenQuery rqt.Name     'requete différente des requetes 3 et 4
   end if
Next

End Sub

Tu comprends le principe, c'est une simple concatenation de chaine avec une valeur.
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
1
Salut,

tu es en VBA Access ?

Si oui, tu peux recopier les requetes et les executer :

SQL = "Requete_SQL _creation liste 1"
DoCmd.RunSQL SQL

SQL = "Requete_SQL _creation liste 2"
DoCmd.RunSQL SQL

Je parle bien de la requete elle meme (Select .... ou UPDATE ......)

Si tu veux les executer directement grace à leur nom, je vais voir a moins que quelqu'un sache.
Par principe, tu dois pourvoir faire des choses grace à la collection des requetes de ta base de données.
Messages postés
21
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
8 juin 2007

J'ai commencé mon module comme suit:

Public Sub Requete_SQL()

Dim valeur As String
Dim SQL As String

SQL =  SELECT
C9_ARTFAC.IFLS , C9_ARTFAC.Group, C9_ARTFAC.MAINT, C9_ARTFAC.DATMAJ, C9_ARTFAC.TVA, C9_ARTFAC.CATAL,  INTO [Fichiers articles] FROM C9_ARTFAC

je pense que mon gros PB c'est que apres le SQL = " SELECT je fait un copier coller (parceque ci-dessus je ne met meme pas les 1/4 de se qu'il ya a mettre ) et la au lieu  de mettre apres "SELECT...  bah ca me renvoye a la ligne j'ai essayer en tapant tou a la main mains ou bout d'un moment ca me fait pareil et ca me met en faite
SQL = " SELECT"
C9_ARTFAC.............

au secours
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
1
Bon je viens de trouver  un truc mais on peut pas executer les requetes avec ca:

MsgBox CurrentData.AllQueries(0).Name

Par contre j'ai pas compris ton soucis de ligne. Au pire, tu fais:

SQL = " Select ..................................." & _

" From .........................................."

Si tu n'as pas la place
Messages postés
21
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
8 juin 2007

c'est sur que je prefererais pouvoir taper

SQL = "le nom de ma requette access"

plutot que

SQL =  "SELECT C9_ARTFAC.IFLS , C9_ARTFAC.Group, C9_ARTFAC.MAINT,
C9_ARTFAC.DATMAJ, C9_ARTFAC.TVA, C9_ARTFAC.CATAL,  INTO [Fichiers
articles] FROM C9_ARTFA

ou on finis par si perdre

ya pas possiblité de mettre le nom de la requette access plutot que le code de la requette SQL????
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
1
J'ai peut etre trouver ce que tu cherches (mais dis moi si ca fonctionne ca que je t'ai deja donné)

docmd.openQuery [nomRequête]

A toi de remplacer ce qu'il y a en gras par le nom de TA requete.
Messages postés
21
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
8 juin 2007

Alors attend donc au lieu de taper:

Public Sub Requete_SQL()

Dim valeur As String

SQL =  "SELECT C9_ARTFAC.IFLS , C9_ARTFAC.Group, C9_ARTFAC.MAINT,
C9_ARTFAC.DATMAJ, C9_ARTFAC.TVA, C9_ARTFAC.CATAL,  INTO [Fichiers
articles] FROM C9_ARTFA
DoCmd.RunSQL SQL
end sub

je tape :
Public Sub Requete_SQL()


Dim valeur As String

SQL = "docmd.openQuery [nomRequête]"
ou je tape juste
Public Sub Requete_SQL()


Dim valeur As String

"docmd.openQuery [nomRequête]"
Messages postés
21
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
8 juin 2007

en gros ca me ferais ca???

Public Sub Requete_SQL()

Dim valeur As String

DoCmd.OpenQuery [1 - Créa fichiers articles]

DoCmd.OpenQuery [2 - Ajout ATTART]

End Sub

est ce que c'est comme cela qu'il faut faire??
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
1
LOL, en effet je coyais avoir été clair mais pas assez en fait, il ne s'agit pas d'une requete mais bien de ce que tu cherches

tapes directment ca dans le code VBA :

docmd.openQuery [nomRequête]

remplace   nomRequêtepar le nom de ta requete (creation liste 1 je crois).

La précédente solution consistait a executer une requete en tant que requete SQL et pas une requete Access. Bref essaies et admires (enfin je crois LOL).

Attention, si je me souviens bien tu  pourrais avoir un message d'avertissement. Si tu veux l'eviter, va voir les options de Access.
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
1
Le must du must (execute toutes les requetes Access de ta base) :

Dim rqt As AccessObject


For Each rqt In CurrentData.AllQueries
    DoCmd.OpenQuery rqt.Name
Next
 
Messages postés
21
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
8 juin 2007

je sais je suis chiant mais quand je tape

Option Compare Database  (ca il le met tout seul d'office)

DoCmd.OpenQuery [1 - Créa fichiers articles]

et que je fait exécuter sur la barre de tache il m'ouvre un panneau "macro"
et me demande de taper le nom de la macro a crée
est ce normale??
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
1
Mets ca alors dans les macros et tu pourras l'executer a souhait.

Public Sub Test1()




Dim rqt As AccessObject


For Each rqt In CurrentData.AllQueries
    DoCmd.OpenQuery rqt.Name
Next
 
End Sub
Messages postés
21
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
8 juin 2007

j'avais pas vue ton message précédant
j'ai testé :

Option Compare Database
Public Sub Requete()
Dim rqt As AccessObject
For Each rqt In CurrentData.AllQueries
    DoCmd.OpenQuery rqt.Name
Next

End Sub

et ca fonctionne Youhou!
Bon avec ça mon pb c'est que (bon je l'avais pas précisé c'est vrai),
mais c'est que la requete 1 et 2 nécessite une simple éxécution donc jusque la pas de PB avec ce que tu ma données mon soucis
c'est sur  la requette 3 avant de l'éxécuté il faut  que  je modifie  le  "critéres" du Champ1 "noprpr"

et meme chose pour la requette 4
qui elle nécessite la modifie (avant éxécution aussi)
du champ  Periode: "du 13 au 24 juin 20"

bon je peut faire c'est modifie a la main avant de lancer le module
mais c'est vrai que ca serait mieux si le module me demandait avant éxécution de la requette 3 "veuillez inséré le critére" et avant la requette 4 "veuillez inséré la periode"

Je sais j'en demande beaucoup mais bon but c'est qu'un user landa
puisse l'utilisé et lui il est pas sancé savoir modifier a la main c'est valeur ou critére

dans l'espoir d'un solution merci pour ton aide
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
1
Par contre j'avais oublié, tu es en VBA ou VB6
Messages postés
21
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
8 juin 2007

E NVBA je suppose je lance un module a partir de ACCESS
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
1
A c'est toi, mais je t'avais donné un code pour cela?

valeur = Inputbox "Veuillez inséré le critére"

AAAHHHHHH. Je viens de comprendre ton pb. Bah oui, tu veux modifier la requete. Je sais pas si c'est possible donc reprends ma première méthode et utilise le inputbox pour la modifier.

Montre moi ta requete 3 pour voir.
Messages postés
21
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
8 juin 2007

LOL hé oui c'est moi

voila ma requette 3 ou je doit modifier le critere et le champ preiode

SELECT ACFIC0101_ACPROMPF.NOPRPR, [Fichiers articles].DESIG, ACFIC0101_ACPROMPF.PSP7PR, [Poids mesures].Champ2 AS [Lib poids], Int(100*[PSP7PR]/[POCTU])/100 AS PK, Int(ACFIC0101_ACPROMPF!PSP7PR) AS euros, Right(Str(100*ACFIC0101_ACPROMPF!PSP7PR),2) AS centimes, "du 13 au 24 juin 2007" AS Periode, ACFIC0101_ACPROMPF.CDPLPR INTO [table des stops]
FROM (ACFIC0101_ACPROMPF LEFT JOIN [Fichiers articles] ON ACFIC0101_ACPROMPF.CDPLPR = [Fichiers articles].PLIG) LEFT JOIN [Poids mesures] ON [Fichiers articles].PKGL = [Poids mesures].Champ1
WHERE (((ACFIC0101_ACPROMPF.NOPRPR)=3259 Or (ACFIC0101_ACPROMPF.NOPRPR)=3260));

voila je tes mis en bleu les valeurs qui sont a changer avant l'exécution de la requette
Messages postés
21
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
8 juin 2007

Donc tu comprend
si je fait
Option Compare Database
Public Sub Requete()

Dim rqt As AccessObject

For Each rqt In CurrentData.AllQueries
    DoCmd.OpenQuery rqt.Name
Next

End Sub

ca fonctionne mais faudrait pouvoir y intégré le fait d'indiqué la valeur du critere et du champ periode avant d'éxécuté la phase 3 et 4 disons
Messages postés
21
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
8 juin 2007

Tes partie??
Messages postés
21
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
8 juin 2007

ESt ce que ça ca fonctionnerais
Option Compare Database
Public Sub Requete()

Dim Valeur1 As String
Valeur1 = "critere"
Dim Valeur2 As String
Valeur2 = "periode"

Dim rqt As AccessObject

For Each rqt In CurrentData.AllQueries
    DoCmd.OpenQuery rqt.Name
When
rqt.Name = "3-A creation info"
Do

Valeur2 = InputBox(prompt, [periode], [texte], [50Pos], [50Pos], [], [date promo])

Next
End Sub

le pb c'est qui va pas fonctionner puisse que comment il va savoir que valeur2 par exemple veut dire modifie moi le champ periode de la table 3 par ça
1 2