programmer une requete a partir d'un formulaire [Access] - VB/VBA/VBS - Programmation
Marsh Posté le 28-06-2007 à 14:44:33
alors petite astuce pour pas te prendre le chou, dans tes tables, mets un autonumber comme clé primaire, comme ca tu auras besoin que d'un nombre en critere.
ta requete sera un truc du style:
sub bouton_clik()
dim ReqSQL as string
if not isnull(me.malistebox) then
ReqSQL = "SELECT * from table1, table2 where table1.cleprimaire = " & me.malistebox
DoCmd.openrecordset ReqSQL
'------
' lignes de remplissage des auters list boxes.
'------
end if
end sub
Marsh Posté le 28-06-2007 à 14:58:29
alors... je suis pas bon dans les langages qe je connais, alors en SQL...
bilan de l'existant:
un formulaire appelé Form_Etablissement
un bouton sur le formulaire appelé CmdFormulaire
une zone de texte dont le recordsource indique ETABLISSEMENT, du nom de ma table
un formulaire basé sur ma requête
excuse moi mais je comprend pas tout... je bloque a la condition if: pourquoi on en passe par la?
Marsh Posté le 28-06-2007 à 14:59:37
ah oui, quand meme, ma table etablissement possède une clé primaire en numeroAuto
Marsh Posté le 28-06-2007 à 15:23:04
reqSQL c'est ma requete a moi c'est ca?
et tou ca je le fout derrière mon bouton...
pourquoi "me.malistbox"?
et ce que je peux ecrire ca en ayant une zone de texte plustot qu'une listbox?
Marsh Posté le 28-06-2007 à 15:36:26
reqsql est effectivement la requete que tu executeras dans ta base
me représente l'objet dans lequel tu te trouves,
je suis parti du principe que tu as une listebox (appelée ici malistbox) dans laquelle tu as les établissements,
me.malistbox renvoie ainsi le numéro (clé primaire) de ta table qui va chercher les autres informations.
Marsh Posté le 28-06-2007 à 15:48:33
moi j'ai une requete deja faite et je veux coller un critère, ce critère etant erit dans ma zone de texte appelé AbrevEts. ca mache dns ce cas la?
Marsh Posté le 28-06-2007 à 15:51:41
ben en principe oui
quand exécutes tu ta requete, et a quoi ressemble-t-elle ?
Marsh Posté le 28-06-2007 à 16:02:08
en fait je l'ouvre avec mon bouton, alors je vais ecrire tout ca avant la procédure d'ouverture non?
elle présente le nom, le prenom, le tel, le mail, du directeur de l'etablissement. en caché il y a le nom du site par lequel j'aimerai faire le tri. en gros, pour mon etablissement "CHL", j'ai un directeur different que pour l'etablissement "CHEM".
donc je veux qu'avec la meme requete, en partant de l'enregistrement "CHL" j'ai le directeur du CHL qui s'affiche, et en partant de l'enregistrement CHEM ce soit le directeur du CHEM qui s'affiche
Marsh Posté le 28-06-2007 à 16:04:20
oui j'ai bien compris, mais tu n'as pas répondu à ma question stp...
Marsh Posté le 28-06-2007 à 16:18:39
en fait je veux qu'elle s'execute a chaque fois que j'appuie sur ce meme bouton.
j'ai fait un screenshot de ma requete mais je sais pas l'inserer
en fait ma requete a une premiere categorie "Fonction" ou le critère est "directeur", ensuite j'ai des trucs qui servent a rien (nom, prenom, tel, mail) et en masqué j'ai ma categorie AbrevEts, dans laquelle j'aimerai mettre ce que je veux. sur la requete j'ai créé un formulaire, j'espère que ca repond a ta question...
Marsh Posté le 28-06-2007 à 16:29:42
heu... j'aimerai bien mais j'arrive pas a mettre le screenshot dans mon texte... di moi ski fo fqire et y'a pas de soucis, par mail meme si tu veux
Marsh Posté le 28-06-2007 à 16:39:00
lj'ai pas accès au code de la requete en fait... je fais a partir d'access et d'ecrans a la c**
voila ce que j'ai tapé de ce que tu m'avais proposé... mais ca ne fait pas le tri...
Private Sub Commande2_Click()
On Error GoTo Err_Commande2_Click
Dim stDocName As String
Dim stLinkCriteria As String
Dim Direction As String
If Not IsNull(Me.AbrevEts) Then
Direction = "SELECT * from ETABLISSEMENTS where ETABLISSEMSENTS.NumEts=" & Me.AbrevEts
End If
stDocName = "Direction"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_Commande2_Click:
Exit Sub
Err_Commande2_Click:
MsgBox Err.Description
Resume Exit_Commande2_Click
End Sub
Marsh Posté le 28-06-2007 à 19:12:15
oh p**** mais quel con... excuse moi d'etre un peu vulgos' mai y'a des fois moyen de perdre une journée de taf parceque on ne se sert pas de ces yeux, c'est genant
bon. je fais ca des demain matin et je te donne tout ca
Marsh Posté le 29-06-2007 à 09:17:52
voila ma requete, en mode sql. pour la partie mandat.dateFin is null c'est parce que je garde tous les directeurs depuis le dbt, comme je ne veux voir que les directeurs actuels je fais mon tri la dessus.
SELECT FONCTIONS.NomFct, RESPONSABLES.NomRes, RESPONSABLES.PrenRes, RESPONSABLES.TelephoneRes, RESPONSABLES.MailRes, MANDATS.DateDeb, ETABLISSEMENTS.AbrevEts
FROM RESPONSABLES INNER JOIN (FONCTIONS INNER JOIN (ETABLISSEMENTS INNER JOIN MANDATS ON ETABLISSEMENTS.NumEts = MANDATS.NumEts) ON FONCTIONS.NumFct = MANDATS.NumFct) ON RESPONSABLES.NumRes = MANDATS.NumRes
WHERE (((MANDATS.DateFin) Is Null));
Marsh Posté le 29-06-2007 à 11:37:42
l'idée c'est de rajouter dans ta clause where l'identifiant de l'établissement
" and etablissements.nom_etablissement" enfin je connais pas le champs exact..
Marsh Posté le 29-06-2007 à 11:56:55
ok... et ce sera en corellation avec mon formulaire ou pas?
Marsh Posté le 29-06-2007 à 12:15:52
oui, normalement
le plus efficace est de te créer une fonction Lit_EtablissementID() qui te retourne le numéro de l'établissement
et après update de la liste box tu fait un .requery
donc
1/ créer la fonction Lit_etablissementID
2/ mettre dans la source destination la requete donnée trois posts plus haut
3/ liée l'evenement after_update de la liste box et y mettre zone_de_texte.requery
Marsh Posté le 29-06-2007 à 12:32:53
wow!!!
mes lignes de Codes sont écrites derrière mon bouton avec les liens avec tout ce qu'il faut. je les passe dans la partie de mon formulaire After Update c'est ca?
qu'est ce que je dois mettre dans mon module Lit_etablissement?
un truc du style "va chercher ce qui est ecrit dans la partie AfterUpdate"
et la troisième etape elle me fait signer du nez kan j'essaye de trouver ce qu'il faut que je fasse ...lol
Marsh Posté le 11-07-2007 à 08:56:18
la fonction litetablissement te retourne la valeur de l'établissement choisi.
dans l'evenement afterupdate tu mets
lazonedetexteamettreajour.requery
Marsh Posté le 12-07-2007 à 09:44:37
j'ai une fonction LectureText, dans un module séparé.
dans ma fonction, il n'y a rien, a part ca:
Public Function LectureText( ZoneEntree,ZoneSortie)
ZoneSortie = ZoneEntree
EndFunction
j'appelle ma fonction sur l'evenement OnClick, avant l'ouverture du formulaire, et je l'écris comme ceci:
LectureText NomEtablissement.Value, ""
ensuite, dans le formulaire suivant, que j'ouvre par le bouton précédent,
j'ai écris:
Private Sub NomEtablissement_BeforeUpdate(Cancel As Integer)
NomEtablissement.Value = LectureText("", NomEtablissement)
End Sub
Marsh Posté le 12-07-2007 à 09:45:19
et evidement, y'a pas d'erreur, mais y' a rien qui marche non plus...
Marsh Posté le 12-07-2007 à 10:24:48
pas bete du tout... du coup il passe par les lignes de code que j'ai écrite... merci.
maintenant il me demande d'entrer un paramètre pour la valeur de paramètre a ma requete SQL que voici:
SELECT Tbl_C2_Service.NomService, Tbl_C2_Service.NumHopital, Tbl_C2_Service.NumAtmRef, Tbl_C2_Service.NumService
FROM Tbl_C2_Service;
oui, on est descendu dans l'arborescence de mes tables: on essaye plus de passer le nom de l'etablissement mais le nom du service... le pb est le meme...
Marsh Posté le 12-07-2007 à 10:38:27
s'il te demande une valeur, c'est que le champs n'existe pas.
n'oublie pas d'ajouter dans ta requete une clause where pour les infos d'un service/établissement/etc. précis.
Marsh Posté le 12-07-2007 à 10:58:49
est ce que je peux mettre dans ma requete la valeur de ma variable ZoneSortie?
comme ca je créé ma requete de telle facon que mon formulaire se cantonne a afficher les salles de mon service uniquement... en fait c'est ce que tu me conseilles depuis le début... pardon...
Marsh Posté le 12-07-2007 à 11:18:35
j'ai essayé, je te promet... mais ca ne fonctionne pas... je trouve pas ma variable ZoneSortie, et comme je parle pas le SQL, je ne sais pas quoi ecrire...
Marsh Posté le 28-06-2007 à 14:40:18
bonjour tout le monde!
voila mon sujet:
j'ai une table avec des gens dedans
une autre avec des metiers
une autre avec des etablissements
une personne a un métier dans un etablissement.
j'affiche dans un formulaire un etablissement.
dans ce meme formulaire, j'aimerai, par un clic sur un bouton, aficher une requete, qui me donne les differentes personnes et leurs fonctions au sein de cet etablissement.
le problème, c'est que j'ai 10 etablissements, et ca me fait ch*** de faire 10 requetes diferentes. j'aimerai, dans la procédure du bouton, qu'il prenne le nom de l'etablissement qui est dans la zone de texte de mon formulaire, et qu'il la colle en critère de ma requete avant de l'ouvrir.
je sais que je peux le faire via une macro, mais comme l'operation va se répeter, j'aimerai trouver autre chose...
'hesitez pas a poser des questions je suis derrière mon pc et je me galère a essayer, je peux repondre a tout les mess...