Comment peut-on définir des valeurs de paramètre de l'INSERTION de requêtes SQL par le biais de VBA dans Microsoft Access?
Je suis nouveau à l'Accès et je suis venue à partir de C#, SQL Server & .Net. Il y a un projet qui est venu à ma façon et j'ai pour compléter certaines parties.
Le scénario peut être décrite comme suit:
- Un formulaire d'Accès avec un sous-formulaire
- Une requête Access qui est la source de données de ladite sous-formulaire, avec deux paramètres, affiché comme:
Parametername1 String(255),Parametername2 String(255)
. - Code VBA module(s)
Mon plan est de définir les valeurs de ces paramètres de la requête à l'intérieur d'une procédure dans mon code VBA module. Je crois que cela devrait actualiser mon sous-formulaire comme si la requête est la source de données du sous-formulaire.
Le problème est que je ne sais pas comment faire pour mettre ce plan en œuvre.
Je veux utiliser une requête parce que je ne veux pas gâcher mon Code VBA en ligne de SQL.
Je suis aide d'Access 2010.
Inline SQL dans un module VBA est une mauvaise idée non seulement pour des raisons de lisibilité, mais aussi parce qu'il pourrait jeter des erreurs inattendues et poser un menace pour la sécurité.
OriginalL'auteur Romi24 | 2012-08-04
Vous devez vous connecter pour publier un commentaire.
J'ai eu exactement cette question, j'ai voulu utiliser la même "stockées" requête de mise à jour, mais de l'exécuter à partir de deux formes différentes de sorte voulais passer le paramètre à la requête lors de l'exécution. C'est ce que j'ai trouvé (dans un autre forum) qui fait exactement ce que je veux:
?
où la valeur du paramètre devrait aller?Avez-vous un lien vers le forum où vous avez trouvé cet extrait? J'ai cherché, mais j'ai pu trouver étaient des références à ce post.
Pour ceux d'entre vous qui se demandent. "qry_YourQyery" est le nom de la requête enregistrée que vous avez dans la liste des requêtes dans la base de données access, comme qryUpdateSalary. "yourParam" est le nom du paramètre que vous avez dans votre requête, c'est à dire de mise à Jour tblSalary set Salaire = salaire*workhrs où PersonId = [personne]. Dans ce cas, le paramètre est personne pour l'exemple ci-dessus ressemblerait à
code With CurrentDb.QueryDefs("qryUpdateSalary") .Parameters("person") = personID 'this variable comes from another step in the VBA code .Execute End With
OriginalL'auteur Ben
Le point de l'ensemble d'un sous-formulaire est qu'il est contrôlé par la source d'enregistrement, et le lien de l'enfant et de maître des champs. Permettez-nous de vous dire la forme de l'Entreprise et le sous-formulaire, c'est les Employés, la source d'enregistrement pour le sous-formulaire peut être:
Le lien de l'enfant et de maître des champs serait CompanyID. Comme vous l'avez déplacé à travers le formulaire principal, seuls les dossiers pertinents de la société actuelle s'affiche. Permettez-nous de vous dire, vous souhaitez afficher uniquement les employés qui sont dans une position technique, vous pouvez changer la source d'enregistrement au moment de l'exécution:
Ou si c'est toujours d'être un filtre sur le formulaire, ajoutez une zone de liste déroulante, disons, pour le formulaire principal et de l'utiliser comme un deuxième lien de maître du champ, de façon à avoir:
Enfin, vous pouvez simplement définir le filtre de la propriété à partir du formulaire principal :
Si ce n'est pas ce que vous avez à l'esprit, s'il vous plaît ajouter des notes à votre question.
MODIFIER
Vous pouvez fournir des paramètres à une requête par le référencement d'un contrôle sur un formulaire:
Vous pouvez changer complètement le SQL d'une requête et que vous pouvez utiliser ADO, toutefois, la modification de la requête SQL est similaire à la configuration de la source d'enregistrement en ce que le SQL est changé dans le code et à l'aide d'ADO n'est généralement pas le meilleur pari pour les formulaires.
Ce que vous ne pouvez pas faire est de changer un paramètre, et l'ont "accroché" avec un formulaire ou un sous-formulaire.
Par exemple:
L'accès est différent et la principale différence est que vous pouvez faire beaucoup de choses sans aucun code, ce qui est quelque chose que les gens oublient souvent. Dans ce cas, les paramètres de votre requête doit venir à partir d'un formulaire, et j'ai été en soulignant les moyens que cela pourrait se produire. Il y a d'autres options que j'ai raté et je les ajouterai.
merci encore Remou...je pense que nous sommes proches d'une solution. la seule chose est que je ne veux pas l'application à l'invite pour le paramètre défini dans la requête. Je veux régler la valeur du paramètre dans mon code VBA.... Pour reprendre votre exemple - où la position = "Technique", je tiens à fournir la valeur de "Technique" dans mon code VBA
Peut-être que vous aimeriez relire ma réponse? Je l'ai dit, vous ne pouvez le faire que dans les limites que vous avez fixées. Si vous voulez fournir "technique", de l'écrire à un contrôle de référence et le contrôle dans votre requête, il peut être caché de contrôle. Où est "technique" vient-il? Si l'utilisateur fournit, alors vous avez déjà un contrôle.
Salut Remou je ne pense pas que j'ai été en mesure d'expliquer le problème correctement. Nous avons passés à une tangente. De ma faute, entièrement. La valeur de la requête est une commande du formulaire. Ce dont j'ai besoin est un moyen par lequel je éviter d'avoir à intégrer le SQL dans le code VBA que je suis en train d'écrire. Je voulais quelque chose de l'utilisation sur les lignes d'un paramètre d'une procédure stockée avec la procédure stockée sql comme suit Select <certains champs> où <Champ1 = prmcontrol1value>. Je voulais transmettre la valeur de la commande à la requête et de référence dans la requête comme prmcontrol1value. Merci
OriginalL'auteur Fionnuala
Vous pouvez créer une fonction et l'utilisation de cette fonction (au lieu de régulièrement un paramètre) dans votre source d'enregistrement du formulaire de requête.
La source d'enregistrement de la requête:
Plus tard, lorsque vous souhaitez afficher un autre ensemble de lignes dans le sous-formulaire, modifiez la valeur attribuée à
PositionParam()
etRequery
le sous-formulaire.OriginalL'auteur HansUp
Le sous-formulaire est lié à une question et que la requête ne devrait pas avoir tous les paramètres.
Vous pouvez certainement stocker le SQL pour les sous-formulaire dans une requête et qui élimine la en ligne de sql mais alors tourner autour et de l'écriture HORIONS de code pour obtenir autour de cette question n'a pas de sens à tout ça?
Comme l'a noté le filtrage et d'affichage sous forme de ré-encode est automatique et se produit sans code si vous configurez le maître de lien et de l'enfant paramètres de la sous de la commande. Il est probable que vous n'avez PAS besoin de n'IMPORTE quel code ici.
Cependant, si pour quelque raison réelle, vous devez écrire du code ou vous voulez plus d'heures facturables, alors vous pouvez utiliser ce code:
De sorte que vous n'avez pas besoin de tous les paramètres dans le sql mais il suffit d'utiliser le COURANT et la MÊME requête, le sous-formulaire est basé sur. En outre, si vous ajoutez des paramètres, alors vous êtes codage en dur les 2 valeurs dans la requête et la requête ne peut pas être utilisé pour un autre code et des tâches, à moins de fournir les 2 MÊMES paramètres codés en dur (donc ce qui donne si peu de souplesse dans l'utilisation de cette requête ailleurs avec divers choix).
Afin de laisser les paramètres de la requête et même de l'argent et du temps et les heures facturables.
C'est une simple question de tirer la requête SQL que ci-dessus et ajouter des critères à la SQL. Cependant, si vous cherchez à insérer les données dans le sous formulaire, puis vous pouvez utiliser le formulaire de la source de données et reocrdset directement. par exemple:
OriginalL'auteur Albert D. Kallal