[access vba] modifier une requete
Fermé
Frankkkk
Messages postés
1
Date d'inscription
mardi 25 juillet 2006
Statut
Membre
Dernière intervention
25 juillet 2006
-
25 juil. 2006 à 22:50
seblekiller_oupas - 23 mai 2008 à 14:14
seblekiller_oupas - 23 mai 2008 à 14:14
Bonjour,
J'apprivoise tranquillement access. Je me suis fais un formulaire ou je choisi les critères afin de modifier ma requete. Ensuite j'ouvre l'état correspondant. Par contre, les criteres ne sont pas seulement dans la clause where, car j'ai plusieurs select imbriqué, si seulement dans la clause where, j'envoie le critère lors de l'ouverture de l'état, mais comment faire pour changer d'autres parties dans ma requete avant d'ouvrir mon état? Recordset? si oui, comment?
Merci beaucoup de bien vouloir me donner des pistes!
J'apprivoise tranquillement access. Je me suis fais un formulaire ou je choisi les critères afin de modifier ma requete. Ensuite j'ouvre l'état correspondant. Par contre, les criteres ne sont pas seulement dans la clause where, car j'ai plusieurs select imbriqué, si seulement dans la clause where, j'envoie le critère lors de l'ouverture de l'état, mais comment faire pour changer d'autres parties dans ma requete avant d'ouvrir mon état? Recordset? si oui, comment?
Merci beaucoup de bien vouloir me donner des pistes!
A voir également:
- Disons demain modifier mon profil
- Qui regarde mon profil facebook - Guide
- Modifier dns - Guide
- Qui regarde mon profil instagram - Guide
- Modifier liste déroulante excel - Guide
- Modifier story facebook - Guide
51 réponses
Utilisateur anonyme
5 sept. 2007 à 14:21
5 sept. 2007 à 14:21
Bonjour,
suggestion :
Créer un requête type de ce que vous souhaité avoir comme résultat :
ex, passer en mode SQL :
soit une requête [ SELECT * FROM tabClients WHERE (((tabClients.Acronyme) Like "zzz*")); ]
l'objectif étant de décomposer la requête en chaines de caractères :
Dim Chaine As String
Chaine = Chaine = "SELECT * FROM tabClients WHERE (((" & MonChamps & ") Like" & """" & "zzz*" & """" & "));"
ici, la variable [ MonChamps ] peut provenir de n'importe où [ Zone de texte, liste déroulante, etc ...
ensuite on valide la mise à jour de la requête avec :
If (ChangeRequeteDef("MaRequeteType", Chaine)) Then
DoCmd.OpenForm "MonFormulaire", acNormal, "", "[Acronyme]", , acNormal
End If
dans la ligne du IF, on utilise ici une fonction qui est la suivante :
Lupin
suggestion :
Créer un requête type de ce que vous souhaité avoir comme résultat :
ex, passer en mode SQL :
soit une requête [ SELECT * FROM tabClients WHERE (((tabClients.Acronyme) Like "zzz*")); ]
l'objectif étant de décomposer la requête en chaines de caractères :
Dim Chaine As String
Chaine = Chaine = "SELECT * FROM tabClients WHERE (((" & MonChamps & ") Like" & """" & "zzz*" & """" & "));"
ici, la variable [ MonChamps ] peut provenir de n'importe où [ Zone de texte, liste déroulante, etc ...
ensuite on valide la mise à jour de la requête avec :
If (ChangeRequeteDef("MaRequeteType", Chaine)) Then
DoCmd.OpenForm "MonFormulaire", acNormal, "", "[Acronyme]", , acNormal
End If
dans la ligne du IF, on utilise ici une fonction qui est la suivante :
Public Function ChangeRequeteDef(ChaineRequete As String, ChaineSQL As String) As Boolean Dim Definition As Variant If ((ChaineRequete = "") Or (ChaineSQL = "")) Then ChangeRequeteDef = False Else Set Definition = CurrentDb.QueryDefs(ChaineRequete) Definition.SQL = ChaineSQL Definition.Close RefreshDatabaseWindow ChangeRequeteDef = True End If End Function '
Lupin
surzone
Messages postés
4
Date d'inscription
lundi 3 septembre 2007
Statut
Membre
Dernière intervention
5 septembre 2007
5 sept. 2007 à 11:56
5 sept. 2007 à 11:56
Bonjour,
Peux tu m'expliquer comment on crée un formulaire qui permet de modifier une requete ?
Merci beaucoup
Peux tu m'expliquer comment on crée un formulaire qui permet de modifier une requete ?
Merci beaucoup
Utilisateur anonyme
23 avril 2008 à 13:15
23 avril 2008 à 13:15
Bonjour,
Oui je suis pas loin, toutefois je dois vous avouer que j'ai du mal avec le langage sms !
La langue française n'est-elle pas à ce point riche qu'elle ne mérite d'être écorché à ce point.
Lupin
Oui je suis pas loin, toutefois je dois vous avouer que j'ai du mal avec le langage sms !
La langue française n'est-elle pas à ce point riche qu'elle ne mérite d'être écorché à ce point.
Lupin
Utilisateur anonyme
23 avril 2008 à 13:53
23 avril 2008 à 13:53
re :
Bon je veux bien refaire le parcours.
Alllons pas à pas !
As-tu un formuliare qui pointe sur une requête, qui elle-même pointe sur une table ?
Si une telle requête existe, peux-tu le voir en mode SQL ?
Si oui, fias-en un copier coller ici .
Lupin
Bon je veux bien refaire le parcours.
Alllons pas à pas !
As-tu un formuliare qui pointe sur une requête, qui elle-même pointe sur une table ?
Si une telle requête existe, peux-tu le voir en mode SQL ?
Si oui, fias-en un copier coller ici .
Lupin
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je suis pas sur que ce soit ce que tu voule mais voila
Refmaintenance Numlicence_cle Fin_garantie Fin_extension
G_BLE_1 30/01/2007
G_CET 03/01/2007
G_UCP 12/06/2007
G_GEM 22/05/2007
G_DEN 09/10/2007
G_TUN 18/10/2007
G_GE_01 29/12/2007
G_SIN 13/12/2007
G_ARA 15/12/2007
EG_BLE_1 30/01/2007 30/01/2008
EG_CET 03/01/2007 03/01/2008
EG_DEN 09/10/2007 09/10/2008
Dans critere en mode creation j'ai un intervalle de dates: >#01/01/2007# Et <#01/01/2008#
et je voudrais pouvoir changer ces dates a partir d un formulaire quelconque
Refmaintenance Numlicence_cle Fin_garantie Fin_extension
G_BLE_1 30/01/2007
G_CET 03/01/2007
G_UCP 12/06/2007
G_GEM 22/05/2007
G_DEN 09/10/2007
G_TUN 18/10/2007
G_GE_01 29/12/2007
G_SIN 13/12/2007
G_ARA 15/12/2007
EG_BLE_1 30/01/2007 30/01/2008
EG_CET 03/01/2007 03/01/2008
EG_DEN 09/10/2007 09/10/2008
Dans critere en mode creation j'ai un intervalle de dates: >#01/01/2007# Et <#01/01/2008#
et je voudrais pouvoir changer ces dates a partir d un formulaire quelconque
Utilisateur anonyme
23 avril 2008 à 14:15
23 avril 2008 à 14:15
re :
lorsque tu es en mode création, utilise le premier bouton de la barre d'outils pour accéder au mode SQL.
lorsque tu passe la souris sur le bouton un info-bulle [ Affichage ] apparaît.
en utilisant la liste déroulante de ce bouton, tu auras le mode SQL.
tu obtiendra quelque chose comme :
SELECT *
FROM tabClients
WHERE (((tabClients.Acronyme) Like "zzz*"));
Lupin
lorsque tu es en mode création, utilise le premier bouton de la barre d'outils pour accéder au mode SQL.
lorsque tu passe la souris sur le bouton un info-bulle [ Affichage ] apparaît.
en utilisant la liste déroulante de ce bouton, tu auras le mode SQL.
tu obtiendra quelque chose comme :
SELECT *
FROM tabClients
WHERE (((tabClients.Acronyme) Like "zzz*"));
Lupin
Exact ca me donne ca:
SELECT [Maintenance].[Refmaintenance], [Maintenance].[Numlicence_cle], [Maintenance].[Fin_garantie], [Maintenance].[Fin_extension]
FROM Maintenance
WHERE ((([Maintenance].[Fin_garantie])>#1/1/2007# And ([Maintenance].[Fin_garantie])<#1/1/2008#));
merci rien que pour ca, ca va beaucoup m'aider mais tu pourras continuer!
SELECT [Maintenance].[Refmaintenance], [Maintenance].[Numlicence_cle], [Maintenance].[Fin_garantie], [Maintenance].[Fin_extension]
FROM Maintenance
WHERE ((([Maintenance].[Fin_garantie])>#1/1/2007# And ([Maintenance].[Fin_garantie])<#1/1/2008#));
merci rien que pour ca, ca va beaucoup m'aider mais tu pourras continuer!
Utilisateur anonyme
23 avril 2008 à 14:31
23 avril 2008 à 14:31
re :
maintenant, l'idée est de recomposer la requète SQL dans une chaine de caractères :
ex.:
Lupin
maintenant, l'idée est de recomposer la requète SQL dans une chaine de caractères :
ex.:
Sub Test() 'SELECT [Maintenance].[Refmaintenance], [Maintenance].[Numlicence_cle], [Maintenance].[Fin_garantie], [Maintenance].[Fin_extension] 'FROM Maintenance 'WHERE ((([Maintenance].[Fin_garantie])>#1/1/2007# And ([Maintenance].[Fin_garantie])<#1/1/2008#)); Dim ChaineSQL As String, Critere1 As String, Critere2 As String Critere1 = "#1/1/2007#" ' Pourrait provenir de n'importe où, variable, textbox, etc ... Critere2 = "#1/1/2008#" ChaineSQL = "SELECT [Maintenance].[Refmaintenance], [Maintenance].[Numlicence_cle], [Maintenance].[Fin_garantie], [Maintenance].[Fin_extension]" ChaineSQL = ChaineSQL & " " & "FROM Maintenance " ChaineSQL = ChaineSQL & "WHERE ((([Maintenance].[Fin_garantie])>" & Critere1 & " " ChaineSQL = ChaineSQL & "And ([Maintenance].[Fin_garantie])<" & Critere2 & "));" If (ChangeRequeteDef("nom_de_la_requete", ChaineSQL)) Then DoCmd.OpenForm "formulaire_Specifique", acNormal, "", "[Acronyme]", , acNormal End If End Sub '
Lupin
Et j'ecris tout dans cette fenetre alors c'est bien ca?
(Car c'est la premiere fois que je vois ca!)
(Car c'est la premiere fois que je vois ca!)
Utilisateur anonyme
23 avril 2008 à 14:57
23 avril 2008 à 14:57
re :
non, ce texte n'est pas a écrire dans la fenêtre du mode SQL !
c'est du code VBA qui va s'accrocher sur un formulaire, sur un bouton, sur une liste déroulante, etc ...
Dans mon exemple, plaçons un formulaire maitre et un formulaire secondaire.
dans le formulaire maitre, on place 2 textbox pour inscrire les dates de sélection
sur chacun des textboxs on place une procédure évènementiel
Lupin
non, ce texte n'est pas a écrire dans la fenêtre du mode SQL !
c'est du code VBA qui va s'accrocher sur un formulaire, sur un bouton, sur une liste déroulante, etc ...
Dans mon exemple, plaçons un formulaire maitre et un formulaire secondaire.
dans le formulaire maitre, on place 2 textbox pour inscrire les dates de sélection
sur chacun des textboxs on place une procédure évènementiel
Private Sub tbxDateDebut_AfterUpdate() If ((tbxDateDebut.Text <> "") and ( tbxDateFin.Text <> "" )) ' On reconstruit la chaine SQL avec les paramètres des 2 textbox ' On modifie la requète ' On ouvre le sous-formulaire qui pointe sur la requête que l'on vien de modifié. End IF End Sub '
Lupin
Donc deja j'espere que tu as le temps car je ne comprends pas vite!
Ensuite elles sont ou les textboxs et enfin formulaire secondaire=sous-formulaire?
Je pense qu'apres ca ira mieux
Ensuite elles sont ou les textboxs et enfin formulaire secondaire=sous-formulaire?
Je pense qu'apres ca ira mieux
Utilisateur anonyme
23 avril 2008 à 15:30
23 avril 2008 à 15:30
re :
bon alors nous serons deux car je n'explique pas toujours bien ma pensée.
ce qui est évident pour moi ne l'est pas forcément pour toi et vice-versa :-)
oui sous-formulaire = formulaire secondaire
les textboxs ne sont qu'un exemple.
je cite (message 7) :
Dans critere en mode creation j'ai un intervalle de dates: >#01/01/2007# Et <#01/01/2008#
et je voudrais pouvoir changer ces dates a partir d un formulaire quelconque
tu crées 2 textboxs pour saisir ces valeurs :
ensuite tu y ajoute le code comme soumis :
Lupin
bon alors nous serons deux car je n'explique pas toujours bien ma pensée.
ce qui est évident pour moi ne l'est pas forcément pour toi et vice-versa :-)
oui sous-formulaire = formulaire secondaire
les textboxs ne sont qu'un exemple.
je cite (message 7) :
Dans critere en mode creation j'ai un intervalle de dates: >#01/01/2007# Et <#01/01/2008#
et je voudrais pouvoir changer ces dates a partir d un formulaire quelconque
tu crées 2 textboxs pour saisir ces valeurs :
ensuite tu y ajoute le code comme soumis :
Private Sub tbxDateDebut_AfterUpdate() Dim ChaineSQL As String, Critere1 As String, Critere2 As String If ((tbxDateDebut.Text <> "") And (tbxDateFin.Text <> "")) Then Critere1 = Me.tbxDateDebut.Text Critere2 = Me.tbxDateFinal.Text ChaineSQL = "SELECT [Maintenance].[Refmaintenance], [Maintenance].[Numlicence_cle], [Maintenance].[Fin_garantie], [Maintenance].[Fin_extension]" ChaineSQL = ChaineSQL & " " & "FROM Maintenance " ChaineSQL = ChaineSQL & "WHERE ((([Maintenance].[Fin_garantie])>" & Critere1 & " " ChaineSQL = ChaineSQL & "And ([Maintenance].[Fin_garantie])<" & Critere2 & "));" If (ChangeRequeteDef("nom_de_la_requete", ChaineSQL)) Then DoCmd.OpenForm "formulaire_Specifique", acNormal, "", "[Champs]", , acNormal End If End If End Sub '
Lupin
Utilisateur anonyme
23 avril 2008 à 15:53
23 avril 2008 à 15:53
re :
dis moi,
le nom de(s) table(s)
le nom de(s) requète(s)
le nom de(s) formulaire(s)
Lupin
dis moi,
le nom de(s) table(s)
le nom de(s) requète(s)
le nom de(s) formulaire(s)
Lupin
Pour l instant tout ce qui est concerne:
les tables: Maintenance, Machine, Logiciel
les requetes: R_Maintenance, R_Machine, R_Logiciel
le formulaire (vide): Tri_dates
les tables: Maintenance, Machine, Logiciel
les requetes: R_Maintenance, R_Machine, R_Logiciel
le formulaire (vide): Tri_dates
Utilisateur anonyme
23 avril 2008 à 16:28
23 avril 2008 à 16:28
re :
disons que le formulaire Tri_dates est le formulaire principal, sur ce formulaire tu places 2 textboxs.
tu crées une quatrième requête partiel du style que celle que tu as soumis
en lui donnant un autre nom [ nom_de_la_requete dans la procédure ] :
SELECT [Maintenance].[Refmaintenance], [Maintenance].[Numlicence_cle], [Maintenance].[Fin_garantie], [Maintenance].[Fin_extension]
FROM Maintenance
WHERE ((([Maintenance].[Fin_garantie])>#1/1/2007# And ([Maintenance].[Fin_garantie])<#1/1/2008#));
maintenant tu crées un second formulaire qui pointe sur la requête partiel avec le visuel souhaité.
donne un nom significatif à ce second formulaire
maintenant, sur les 2 textboxs en mode création, fenêtre des propriétés, onglet évènement
ligne après MAJ, choisir Procédure événementiel ...
clic sur l'icon (le bouton) du bout qui a 3 petits points
tu attéris directement dans le module VBA du formulaire !
C'est là que tu va placé le code :
bon, ça c'est le truc en gros, mais je dois souvent valider la construction de la chaine SQL en mode
pas à pas d'exécution VBA.
Lupin
disons que le formulaire Tri_dates est le formulaire principal, sur ce formulaire tu places 2 textboxs.
tu crées une quatrième requête partiel du style que celle que tu as soumis
en lui donnant un autre nom [ nom_de_la_requete dans la procédure ] :
SELECT [Maintenance].[Refmaintenance], [Maintenance].[Numlicence_cle], [Maintenance].[Fin_garantie], [Maintenance].[Fin_extension]
FROM Maintenance
WHERE ((([Maintenance].[Fin_garantie])>#1/1/2007# And ([Maintenance].[Fin_garantie])<#1/1/2008#));
maintenant tu crées un second formulaire qui pointe sur la requête partiel avec le visuel souhaité.
donne un nom significatif à ce second formulaire
maintenant, sur les 2 textboxs en mode création, fenêtre des propriétés, onglet évènement
ligne après MAJ, choisir Procédure événementiel ...
clic sur l'icon (le bouton) du bout qui a 3 petits points
tu attéris directement dans le module VBA du formulaire !
C'est là que tu va placé le code :
Private Sub tbxDateDebut_AfterUpdate() Dim ChaineSQL As String, Critere1 As String, Critere2 As String If ((tbxDateDebut.Text <> "") And (tbxDateFin.Text <> "")) Then Critere1 = Me.tbxDateDebut.Text Critere2 = Me.tbxDateFinal.Text ChaineSQL = "SELECT [Maintenance].[Refmaintenance], [Maintenance].[Numlicence_cle], [Maintenance].[Fin_garantie], [Maintenance].[Fin_extension]" ChaineSQL = ChaineSQL & " " & "FROM Maintenance " ChaineSQL = ChaineSQL & "WHERE ((([Maintenance].[Fin_garantie])>" & Critere1 & " " ChaineSQL = ChaineSQL & "And ([Maintenance].[Fin_garantie])<" & Critere2 & "));" If (ChangeRequeteDef("nom_de_la_requete", ChaineSQL)) Then DoCmd.OpenForm "second_formulaire", acNormal, "", "[Champs]", , acNormal End If End If End Sub '
bon, ça c'est le truc en gros, mais je dois souvent valider la construction de la chaine SQL en mode
pas à pas d'exécution VBA.
Lupin
Tout ca, ca y est j'ai compris je te remercie je crois meme que j'ai compris la signification des codes mais le seul petit truc c'est toujours pour les textboxs: c'est une fonction speciale avec son icone ou c'est par exemple une zone de liste modifiable
Sinon pour le reste je te remercie et si il y a d autres problemes je te re-derangerais demain! .....ou avant si tu n'as pas repondu a cette question!
Sinon pour le reste je te remercie et si il y a d autres problemes je te re-derangerais demain! .....ou avant si tu n'as pas repondu a cette question!
Utilisateur anonyme
23 avril 2008 à 17:03
23 avril 2008 à 17:03
re :
effectivement, pour ma part j'utilise des zones de liste modifiable, qui sont accroché
sur des mini requètes de mes tables pour obtenir les données voulues.
Je sélectionne une valeur dans ma liste déroulante et la requête est modifé
selon ce nouveau critère par programmation et j'ouvre alors un second formulaire récapitulatif
de la recherche.
Sur ce second formulaire, lorsque je double-clic sur un enregistrement choisi,
ce second formulaire se ferme et mon formiulaire pricinpal pointe sur l'enregistrement
que j'ai choisi dans le second formulaire.
C'est très efficace pour la recherche :-)
Lupin
effectivement, pour ma part j'utilise des zones de liste modifiable, qui sont accroché
sur des mini requètes de mes tables pour obtenir les données voulues.
Je sélectionne une valeur dans ma liste déroulante et la requête est modifé
selon ce nouveau critère par programmation et j'ouvre alors un second formulaire récapitulatif
de la recherche.
Sur ce second formulaire, lorsque je double-clic sur un enregistrement choisi,
ce second formulaire se ferme et mon formiulaire pricinpal pointe sur l'enregistrement
que j'ai choisi dans le second formulaire.
C'est très efficace pour la recherche :-)
Lupin
merci beaucoup :-)
Comme prevu je te re-derange pour plusieurs raisons:
la premiere, je n'est pas compris ce que tu as dit la:
"j'ouvre alors un second formulaire récapitulatif
de la recherche.
Sur ce second formulaire, lorsque je double-clic sur un enregistrement choisi,
ce second formulaire se ferme et mon formiulaire pricinpal pointe sur l'enregistrement
que j'ai choisi dans le second formulaire."
Ensuite j'ai tout suivi a nouveau la procedure et ma requete reste avec les 2 parametres
WHERE ((([Maintenance].[Fin_garantie])>#1/1/2007# And ([Maintenance].[Fin_garantie])<#1/1/2008#));
et je vois pas comment arranger ca en attendant tes reponses je continue a chercher ( j'avais prevenu que je n'etais pas un rapide!)
la premiere, je n'est pas compris ce que tu as dit la:
"j'ouvre alors un second formulaire récapitulatif
de la recherche.
Sur ce second formulaire, lorsque je double-clic sur un enregistrement choisi,
ce second formulaire se ferme et mon formiulaire pricinpal pointe sur l'enregistrement
que j'ai choisi dans le second formulaire."
Ensuite j'ai tout suivi a nouveau la procedure et ma requete reste avec les 2 parametres
WHERE ((([Maintenance].[Fin_garantie])>#1/1/2007# And ([Maintenance].[Fin_garantie])<#1/1/2008#));
et je vois pas comment arranger ca en attendant tes reponses je continue a chercher ( j'avais prevenu que je n'etais pas un rapide!)
Utilisateur anonyme
24 avril 2008 à 13:19
24 avril 2008 à 13:19
re :
Ton formulaire principal [ Tri_dates ] devrait afficher l'ensemble de tes tables en pointant sur une
requête globale qui rend tout le contenu de tes tables !
Quelques questions :
1.) as-tu créés 2 textbox sur ton formulaire Tri_dates ?
2.) peux-tu entrer dans la procédure évènementiel de l'après MAJ de ces textbox ?
3.) as-tu créés un 4ième requête ?
4.) si oui, quelle est le nom de cette nouvelle requête ?
5.) as-tu créés un formulaire qui s'accroche à cette nouvelle requête ?
6.) si oui, quelle est son nom ?
Lupin
Ton formulaire principal [ Tri_dates ] devrait afficher l'ensemble de tes tables en pointant sur une
requête globale qui rend tout le contenu de tes tables !
Quelques questions :
1.) as-tu créés 2 textbox sur ton formulaire Tri_dates ?
2.) peux-tu entrer dans la procédure évènementiel de l'après MAJ de ces textbox ?
3.) as-tu créés un 4ième requête ?
4.) si oui, quelle est le nom de cette nouvelle requête ?
5.) as-tu créés un formulaire qui s'accroche à cette nouvelle requête ?
6.) si oui, quelle est son nom ?
Lupin
En fait je m'excuse platement car comme un gros blaireau j'avais lie le dernier formulaire a une requete qui n'etait pas la bonne! autant pour moi je vais fignoler et je te remercie
Utilisateur anonyme
24 avril 2008 à 13:58
24 avril 2008 à 13:58
re :
as-tu inclus la fonction qui modifie la requête :
Lupin
as-tu inclus la fonction qui modifie la requête :
Public Function ChangeRequeteDef(ChaineRequete As String, ChaineSQL As String) As Boolean Dim Definition As Variant If ((ChaineRequete = "") Or (ChaineSQL = "")) Then ChangeRequeteDef = False Else Set Definition = CurrentDb.QueryDefs(ChaineRequete) Definition.SQL = ChaineSQL Definition.Close RefreshDatabaseWindow ChangeRequeteDef = True End If End Function '
Lupin
23 avril 2008 à 12:08
en fait j'ai rien compri a ce ke tu a di mais c est exactement ske je voudrais faire donc si t encore dans le coin sa peu m interesser merki