[Access] programmer une requete a partir d'un formulaire

programmer une requete a partir d'un formulaire [Access] - VB/VBA/VBS - Programmation

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...

Reply

Marsh Posté le 28-06-2007 à 14:40:18   

Reply

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

Reply

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?  
 

Reply

Marsh Posté le 28-06-2007 à 14:59:37    

ah oui, quand meme, ma table etablissement possède une clé primaire en numeroAuto

Reply

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?

Reply

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.

Reply

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?

Reply

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 ?

Reply

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  
 

Reply

Marsh Posté le 28-06-2007 à 16:04:20    

oui j'ai bien compris, mais tu n'as pas répondu à ma question stp...

Reply

Marsh Posté le 28-06-2007 à 16:04:20   

Reply

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 :sweat:  
 
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...
 

Reply

Marsh Posté le 28-06-2007 à 16:23:32    

tu peux pas m'afficher la requete ?  :heink:

Reply

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

Reply

Marsh Posté le 28-06-2007 à 16:31:22    

tu peux pas faire un copier coller de ta requete ? :sweat:

Reply

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

Reply

Marsh Posté le 28-06-2007 à 16:58:47    

mais il ne fait pas le tri
 

Reply

Marsh Posté le 28-06-2007 à 17:19:46    

affichage > mode SQL...  :sol:

Reply

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

Reply

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));

Reply

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..

Reply

Marsh Posté le 29-06-2007 à 11:56:55    

ok... et ce sera en corellation avec mon formulaire ou pas?

Reply

Marsh Posté le 29-06-2007 à 12:15:52    

oui, normalement  :D  
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

Reply

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

Reply

Marsh Posté le 29-06-2007 à 14:37:48    

a l'aide! je voi pas koi faire ou...

Reply

Marsh Posté le 10-07-2007 à 18:01:10    

encore un petic coup de pousse serait le bienvenu...

Reply

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

Reply

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

Reply

Marsh Posté le 12-07-2007 à 09:45:19    

et evidement, y'a pas d'erreur, mais y' a rien qui marche non plus...

Reply

Marsh Posté le 12-07-2007 à 10:04:13    

j'aurais plus mis ca dans after_upadte

Reply

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...
 

Reply

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.

Reply

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...

Reply

Marsh Posté le 12-07-2007 à 11:00:56    

:ange:

Reply

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...  

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed