Comment voulez-vous créer une requête paramétrée dans MS Access 2003 et utiliser d'autres requêtes et des formulaires à remplir les paramètres et d'obtenir un jeu de résultats
Je voudrais être en mesure de créer une requête paramétrée dans MS Access 2003 et de nourrir les valeurs de certains éléments de formulaire à cette requête, puis obtenir le correspondant jeu de résultats et de faire quelques calculs de base avec eux. J'arrive pas à trouver comment obtenir les paramètres de la requête à être peuplée par les éléments de formulaire. Si je dois utiliser VBA, c'est bien.
OriginalL'auteur Tim Visher | 2008-09-18
Vous devez vous connecter pour publier un commentaire.
Références aux contrôles sur le formulaire peut être utilisé directement dans les requêtes Access, mais il est important de les définir en tant que paramètres (dans le cas contraire, les résultats dans les versions récentes d'Accès peut être imprévisible, où ils ont été une fois fiable).
Par exemple, si vous souhaitez filtrer une requête par le contrôle de Nom sur le Formulaire, il vous suffit d'utiliser ce que vos critères:
Vous devez alors définir la forme de référence comme paramètre. Le SQL qui en résulte pourrait ressembler à quelque chose comme ceci:
Je voudrais, toutefois, se demander pourquoi vous avez besoin d'avoir une requête enregistrée à cet effet. Que faites-vous des résultats? De les afficher dans un formulaire ou un état? Si oui, vous pouvez le faire dans la propriété Recordsource du formulaire de rapport et de laisser votre requête enregistrée épargnée par les paramètres, de sorte qu'il peut être utilisé dans d'autres contextes sans éclater les instructions pour remplir les paramètres.
D'autre part, si vous êtes en train de faire quelque chose dans le code, il suffit d'écrire du SQL à la volée et d'utiliser la valeur littérale de la forme de contrôle pour la construction de votre clause where.
OriginalL'auteur David-W-Fenton
Voici un extrait de code. Il met à jour une table en utilisant le paramètre txtHospital:
Voici un exemple de SQL:
OriginalL'auteur Fionnuala
Il y a trois façons de faire traditionnelles pour obtenir autour de cette question:
Je pense que c'est juste mauvais pour moi que vous ave à injecter quelque chose comme
[?enter ISO code of the country]
ou les références à des champs de votre formulaire comme :[Forms]![MyForm]![LastName]
.Cela signifie que nous ne pouvons pas réutiliser la même requête dans plus d'un endroit, avec les différents champs de la fourniture de données ou de se fier à l'utilisateur de ne pas encrasser la saisie de données lors de l'exécution de la requête. Je me souviens, il peut être difficile d'utiliser la même valeur plus d'une fois avec l'utilisateur saisie pour le paramètre.
Habituellement j'ai choisi la dernière option, un construit la requête à la volée, et la mise à jour de la requête de l'objet en tant que de besoin. Cependant, c'est monnaie courante pour une attaque par injection SQL (accidentelle ou sur le but de savoir que mes utilisateurs), et c'est juste dégueulasse.
J'ai donc fait quelques recherches et j'ai trouvé celui-ci ici (http://forums.devarticles.com/microsoft-access-development-49/pass-parameters-from-vba-to-query-62367.html):
(Je n'ai pas testé moi-même, juste quelque chose que j'ai recueillis au cours de mes voyages, car à chaque fois dans un certain temps, j'ai voulu faire cela, mais il a fini à l'aide de l'un de mes mentionné précédemment kludges)
Modifier
J'ai enfin eu l'occasion de les utiliser. Voici le code réel.
OriginalL'auteur BIBD
Prenons un exemple. la requête paramétrée ressemble à ça:
et que vous souhaitez être en mesure d'obtenir cette valeur (le [?entrez ... pays] un) à partir d'un formulaire, lorsque vous avez vos contrôles et de certaines données. Eh bien... ce sera peut-être possible, mais cela nécessite un peu de code de la normalisation.
Une solution serait d'avoir vos contrôles de formulaire nommé d'après une certaine logique, comme
fid_Country
pour le contrôle qui tiendra uneid_Country
valeur. Vous pouvez ensuite votre requête comme une chaîne de caractères:Une fois que vous avez entré toutes les données demandées dans le formulaire, appuyez sur la "requête". La logique permet de parcourir tous les contrôles et vérifier si elles sont dans la requête, finit par remplacer le paramètre par la valeur du contrôle:
De le faire, vous avez entièrement à jour de la requête, où les paramètres ont été remplacées par des données réelles. Selon le type de fid_country (string, GUID, date, etc), vous pourriez avoir à ajouter des supplémentaires guillemets ou pas, d'avoir une finale de la requête telles que:
Qui est entièrement d'Accès compatible requête, vous pouvez utiliser pour ouvrir un jeu d'enregistrements:
Je pense que vous avez fait ici.
Ce sujet est crucial lorsque votre objectif est de développer l'Accès des applications. Vous avez à offrir à l'utilisateur un moyen standard pour les données de la requête à partir de leur interface graphique, non seulement de lancer des requêtes, mais aussi filtrer les formulaires continus (juste à la façon dont Excel le faire avec son "filtre automatique" de l'option) et de gérer les rapports de paramètres. Bonne chance!
OriginalL'auteur Philippe Grondier
la méthode facile est ici Microsoft 'setparameter' info page
où le SQL de la requête Access comprend [frontMthOffset] en fait, dans le SQL.
par exemple,
Ça marche, tout simplement!
OriginalL'auteur Mart