Microsoft Access VBA pour modifier des requêtes SQL
J'ai une base de données Access avec une seule requête en elle. Je peux actuellement copie de la requête via VBA, à l'aide de DoCmd.CopyObject
. Cependant, j'ai besoin d'être en mesure de modifier le SQL dans chaque instance de la requête individuellement. Tous les exemples que j'ai vu, cependant, impliquent jeu d'enregistrements, ce qui est quelque chose que je ne suis pas à l'aide.
Des idées?
Vous devez vous connecter pour publier un commentaire.
La question est un peu mince sur ce genre de requête que vous souhaitez modifier, mais dire que c'est une requête select qui n'a pas besoin de paramètres dynamiques.
Puis, à l'aide de la
CopyObject
méthode, faire une copie de la requête que vous avez fait. Utiliser leCatalog
objet (vous aurez besoin de faire référence à l'ADO Ext). Ensuite, vous pouvez simplement modifier le SQL de la copie comme ci-dessous. En fonction de votre requête, il peut être d'une Vue ou d'une Procédure, mais d'une requête de sélection doit être répertorié comme un point de Vue.Je dissidence de toutes les réponses ici, même s'ils répondent à la question posée. Je suis en désaccord parce que je pense que la question est basée sur des hypothèses incorrectes -- il n'est pas nécessaire de réécrire le SQL à tous.
La question semble supposer que les requêtes dans l'Accès doivent être sauvegardées. Ils n'en ont pas. Vous pouvez exécuter n'importe quelle chaîne SQL à tout moment, que ce soit dans le code, ou (pour les non-SQL DML) comme la source d'un formulaire ou d'un rapport. Les chaînes SQL peut être construit à la volée et affecté comme nécessaires à l'exécution -- le seul avantage d'une sauvegarde d'un objet QueryDef est si vous avez besoin de l'utiliser dans de multiples endroits.
Enregistré un objet QueryDef est fondamentalement la même que celle VUE dans les bases de données du serveur.
Si l'objet QueryDef a des paramètres, il est équivalent à une simple PROCÉDURE STOCKÉE (c'est à dire, ceux qui le manque le code, comme SI/ALORS, ou choisissez de branchement).
Si vous souhaitez mettre en œuvre le SQL que d'une VUE sur un serveur de base de données, de l'enregistrer comme un objet QueryDef dans l'Accès. Si vous souhaitez faire comme une procédure stockée sur votre serveur de base de données, mettre en œuvre comme un paramètre enregistré requête.
Mais tout d'abord, déterminer si elle a besoin d'être sauvé.
Pour ce que ça vaut, j'ai été à la programmation de manière professionnelle dans l'Accès depuis 1996 et en général je n'ai pas d'économiser beaucoup de requêtes, et en particulier ne pas enregistrer critères dans les requêtes. Les critères sont spécifiques au contexte d'exécution et doit être fourni au moment de l'exécution, plutôt qu'enregistrées dans l'objet QueryDef. J'utilise enregistré QueryDefs pour SQL complexe que j'ai besoin de ré-utiliser ou pour la détermination des "points de vue" (en particulier ceux avec des jointures complexes) qui sont utilisés dans plus d'un endroit dans l'application.
La question d'origine ne permet pas d'identifier le contexte dans lequel une modification des critères est nécessaire, de sorte qu'il est vraiment impossible pour vous proposer la meilleure approche. C'est un cas où je voudrais faute la question de la forclusion de discussion, car il propose une SOLUTION spécifique et se demande comment le mettre en place, au lieu de décrire le PROBLÈME et en demandant la gamme de solutions réalisables. Afin de faire le dernier, nous aurions besoin de connaître le contexte (SQL DML ou d'un SELECT? est-elle utilisée dans le code ou que la source pour un formulaire ou un rapport? etc.), mais c'est complètement en manque ici, une gamme complète de solutions ne sera jamais offert.
Je fais ce genre de chose tout le temps! J'ai utilisé VBA pour réécrire les requêtes Access ainsi que les requêtes que "passer" à une base de données MySQL. Réécriture d'une requête en VBA dépend de la complexité que vous voulez obtenir.
J'ai toujours utilisé des
DAO
,ce qui est plus âgé de la technologie(voir les commentaires ci-dessous pour des précisions sur DAO vs ADO), mais il a travaillé pour moi dans ce cas. Vous aurez besoin d'ajouter une référence à DAO en VBA en allant dans Outils > Références, puis ajouter "Microsoft DAO 3.6 Object Library".Vous pouvez écrire une procédure qui ressemble à ceci:
Le code ci-dessus va changer le code SQL de la requête que vous spécifiez avec la requête SQL dans le code VBA avec la
strParameter
incorporé dans la requête SQL.Voici une autre façon de faire. C'est le code que j'ai utilisé dans une déclaration des ventes de demande de réécriture d'une requête sur la base d'un vendeur numéro:
Au lieu d'écrire la totalité de la requête, le code trouve tout simplement l'actuel représentant des ventes, le nombre et le remplace par le nouveau numéro. Je préfère la méthode de ce dernier. Cette dernière méthode a été utilisée pour envoyer directement une requête à MySQL, donc la syntaxe avec une requête Access peuvent être légèrement différentes.