Visites

   visiteurs

   visiteurs en ligne

Sujet n°128 Paramétrage de requête à l'aide de menu déroulant
    par polux175 le 14/02/2008 : 14:32
Bonjour,
J'ai un formulaire qui s'appelle "Machines chez plus de x" qui contient un menu déroulant dont la source du contôle est la table "Réparateur" et un bouton qui exécute une requête qui s'appelle "Réparation déposé depuis plus de x jours".
Le menu déroulant me permets de paramétrer la requête afin d'obtenir les machines d'un seul réparateur.
La requête "Réparation déposé depuis plus de x jours" est basée sur le sous formulaire " Réparations Machines".
Comme critère de requête pour le champs réparateur j'ai ceci: [Formulaire]![Machines chez plus de x]![Réparateur]
Le problème est le suivant:
Celà fonctionne sauf que par exemple si le dernier enregistrement de mon sous formulaire a pour réparateur X et que je paramètre à l'aide de mon menu déroulant le réparateur Y, j'obtiens en réponse toutes les machines de Y ainsi (et c'est là que ce pose le problème) que la dernière (dernier enregistrement du sous formulaire) qui au départ était X et s'est transformé automatiquement en Y.
Pouvez-vous m'aider ??? Merci d'avance !!!

Réponse n° 1 par 3stone le 16/02/2008 : 18:32
Bonjour,


Dixit...
Celà fonctionne sauf que par exemple si le dernier enregistrement de mon sous formulaire a pour réparateur X et que je paramètre à l'aide de mon menu déroulant le réparateur Y, j'obtiens en réponse toutes les machines de Y ainsi (et c'est là que ce pose le problème) que la dernière (dernier enregistrement du sous formulaire) qui au départ était X et s'est transformé automatiquement en Y.


Pas facile de comprendre ce genre de phrase wink

Lorsque tu dis :

Dixit...
La requête "Réparation déposé depuis plus de x jours" est basée sur le sous formulaire " Réparations Machines".


Je suppose que tu veux dire l'inverse ??
Le sous-formulaire est basé sur cette requête...

La liste déroulante renvoie bien l'identifiant du réparateur ?
Et la requête du sous-form est bien filtrée par l'identifiant de ce même réparateur ?

Ce qui est bizarre dans ta construction, est le fait qu'un véritable sous-formulaire à normalement un champ commun (champ fils) avec le formulaire principal (champ père).
Etant donné ta tentative de filtrage, cela ne devrait pas être ton cas... ?

Cordialement,
Pierre(3stone)



Réponse n° 2 par polux175 le 16/02/2008 : 20:33
Bonsoir,
hum hum, oui effectivement je pense qu'il s'agit d'un formulaire.
Ce formulaire comprends tous les champs provenant de la table "Réparation" (N° Client, Dates dépôt, N° de série, Date d'enlèvement, etc... + le menu droulant qui a pour source la table "réparateur").
L'idée de départ est de pouvoir à l'aide d'une requête obtenir une feuille de réponses avec uniquement les machines qui serait encore en cours chez les diffirents réparateur.
D'où ma fameuse requête: "Réparation déposé depuis plus de x jours" qui possède les critères nécessaires pour exclure les machines qui ne serait plus chez le réparateur et le critère: [Formulaires]![Machines chez plus de x]![Réparateur] qui me permet d'avoir cette lite par réparateur.
J'ai donc creer le formulaire "Machines chez plus de x" qui ne contient que une liste déroulante et un bouton.
La liste déroulante a pour source la table "Réparateur" et a pour but de paramétrer ma requête.
Le bouton lui a une procédure évenementielle sur clic qui me permet d'exécuter cette fameuse requête.
Le problème est le suivant:
En imaginant que le dernier encodage dans mon formulaire soit par exemple le client N°1 avec une machine X et comme réparateur SAECO.
Si j'exécute la requête avec le réparateur SAECO alors ma feuille de réponse est correct.
Par-contre si je l'exécute avec Krups ma feuille de réponse va être correcte aussi sauf pour la dernière ligne il va me donner en réponse le client N°1 alors que celui à une machine SAECO et de plus la donnée d'origine qui était SAECO sera écrasée par KRUPS.
Jusqu'à présent je connais le problème et donc remodifie manuellement l'encodage de la dernière ligne mais c'est assez pénible.... Snif snif.
Je pensais qu'il n'y avait qu'une requête "mise à jour" qui puisse modifier les données ?
Soit je suis novice et heureux qu'il existe des forum comme celui-ci wink
Merci.
Réponse n° 3 par 3stone le 16/02/2008 : 22:49
re,

Il manque quelque chose...

Si la liste déroulante ne désigne que le réparateur, je ne vois pas ce qui permet de n'afficher que les machines qui ne sont plus chez le réparateur - a moins que cela soit demandé d'office dans la requête...

Mais, dans ce cas, ne manque t'il pas simplement le raffraichissement du "sous-formulaire" ?
Après sélection dans la liste du réparateur, que fait le bouton ?

En principe, si le "sous-formulaire" est basée sur une requête qui est filtrée pas la liste, il faut rafraichir les données...

Pour cela, ajoute dans l'événement après mise à jour de la liste - ou sur clic du bouton... un simple :

ME("NomCtrlSousForm").FORM.Requery

Si ce n'est pas cela, il faudrait voir la base... et placer un extrait (le formulaire et tables concernées) sur http://cjoint.com/ et donner ici le lien.

Cordialement,
Pierre(3stone)


Réponse n° 4 par polux175 le 17/02/2008 : 13:33
Bonjour,
Voilà je ne m'en sort pas j'ai fait comme tu me le demande mais j'ai eu beaucoup de mal à réduire ma base à 500Ko.....
J'espère qu'il y a assez d'éléments pour que tu puisses comprendre ou se situe ma bêtise....???? wink
http://cjoint.com/data/crnAOdEwEj.htm
Encore mille merci !!
Réponse n° 5 par 3stone le 18/02/2008 : 16:22
Bonjour,

D'abord, il ne reste pas assez dans la base pour ouvrir les 2 formulaires concernés...

Mais... il y en avait assez pour comprendre que cette base ne peut et ne pourra jamais fonctionner correctement !

Par exemple, la table "Réparations machines".
Elle ressemble à un fichier Excel avec les données "a plat".
Il y a des champs comme les "Détaille pces" qui est une série de pièces de la machine.

Question: Comment fais tu, si demain tu dois ajouter une pièce à cette énumération ??

Sans vouloir te décourager, une base est un peu plus complexe à construire que cela. Mais surtout, cela demande à ne pas sauter les étapes...

Il faut, pour comprendre comment démarrer, lire quelque chose sur la modélisation et la normalisation, sinon tu tourneras en rond sans comprendre ou cela coince.

La première base ne devrait pas être trop difficile ou compliquée à modéliser...  et se limiter à 3 ou 4 tables.
A condition de ne pas créer des tables fourre-tout, bien sûr frown

Je pense qu'un peu de lecture telle que celle-ci et une petite base d'essai pour comprendre comment créer les tables et les relations s'impose.

Encore un conseil.
Après analyse, il faut d'abord créer les tables, puis les requêtes principales pour voir si l'on arrive bien à extraire les données utiles - ensuite seulement les formulaires pour permettre une saisie et intérogation aisée.

Pierre(3stone)

Réponse n° 6 par Polux175 le 19/02/2008 : 12:07

Bonjour Pierre,

Tout d'abord je tiens à te remercier pour tes précieux conseilles ainsi que sur l'article sur la normalisation qui est vraiment très bien fait mais que j'avais déjà lu et qui est vrai mérite certainement d'être lu et relu afin de s'imprégner completement de ces principes fondamentaux pour un bon fonctionnement.

Il est vrai aussi que c'est ma première base access et qu'il reste encore beaucoup de lacunes à combler... il est vrai aussi qu'elle a été construite dans la précipitation et que malgré ces manquements elle m'est déjà de grande utilité, mais j'en conçois qu'il reste encore probablement de grosses modifications à apporter mais n'ai malheureusement pas toutes tes compétence et profite de ce forum pour améliorés mes connaissances et trouver des solutions.

Ceci dit je ne parviens toujours pas à m'expliquer comment une requête sql ou action, puisse modifier une donnée d'un champs car c'est bien ce qu'il se produit dans mon cas....

Aurais-tu une solution à me proposer car même si la base n'est pas parfaite, elle est bien active et il est vrai aussi que celà ne me simplifie pas la vie pour toutes modifications je suis tjrs un peux dans l'angoisse de la perte de données ou d'historique déjà existant....

Je te remercie wink

 

Réponse n° 7 par 3stone le 19/02/2008 : 13:30
Bonjour,

Comme dit, ce qui restait dans la base ne permettait pas de vérifier ce problème...

Il faudrait m'envoyer la base à cette adresse temporaire pour que je puisse tester.

PS: Il faut zipper la base avant envoi... la précédente aurait été réduite à +/- 100 Ko si zippée wink

Pierre(3stone)


Réponse n° 8 par 3stone le 20/02/2008 : 00:28
Bonjour,

J'ai un peu regarder la... base.

  • Il n'y a aucune relation de définie entre les tables.
  • Le formulaire "Machine chez plus de x" contient la liste de sélection "Réparateur", or, elle avait une "Source contrôle" alors qu'elle avait un select comme contenu avec le même champ que la source ??
    Plus étonnant, ce formulaire possède une source - alors qu'il n'affiche aucun champ, en dehors de cette liste indépendante rolleyes
  • Tu n'as laissé aucune données exemple dans la table "Réparations Machines sous-formulaire" - ce qui n'aide pas pour comprendre les explications...
  • Si je comprends bien, tu utilises ce même formulaire "Réparation déposé depuis plus de X jours" pour afficher le résultat de ta requête, mais aussi pour la saisie ?
  • Il y a encore un formulaire "Réparations Machines sous-formulaire" qui n'est pas un sous-formulaire !!!

Je suis désolé, mais je ne peux que te donner un seul conseil : Recommence ta base en appliquant les conseils donnés au début.
Plus tu continues et plus tu vas dans le mur.

  • Il faut que tu redémarre sur une feuille blanche en y regroupant les données qui te sont nécessaires.
  • Penser à la modélisation et la normalisation.
  • Créer ensuite les tables qui vont bien et leurs relations.
  • Ensuite les requêtes principales pour l'interrogation...
  • Si tu sens que cela coince, modifie les tables qui ne te permettent pas des requêtes claires et simples.

Actuellement, on sent que l'on crée les tables, requêtes et formulaires - le tout en même temps selon les besoins que l'on découvre frown

Si tu essaies malgré tout de poursuivre avec la base en cours, commence par supprimer la source du formulaire "Machine chez plus de X" ainsi que le source controle de la liste de ce formulaire !

PS: Tu devrais analyser les petites base modèle fournie avec Access (à condition d'avoir fait une installation personnalisée et complète).
Via le menu Fichier, tu choisis "Modèle - Base de données" et  tu démarres  un des assistants.
Cela te permettra de une meilleure observation.

Courage,
Pierre(3stone)

[ Retour à la liste des sujets ]

Recherche



Préférences

Se reconnecter
---

Votre nom (ou pseudo) :

Votre code secret


 Nombre de membres 1 membre


Connectés :

( personne )

Haut