Référence à un champ dans un formulaire à l'intérieur d'une requête à l'aide de SQL
J'ai une base de données Access 2007 qui seront logement les tables qui se réfèrent au projet de loi de matériaux pour de multiples produits. Sur le formulaire principal, je veux un utilisateur d'être en mesure de sélectionner l'un des produits - OK, facile. Maintenant, j'en veux deux requêtes à exécuter une fois qu'ils appuyez sur un bouton après le choix de leur produit à partir d'une liste déroulante. La première requête est une simple requête suppression pour supprimer toutes les informations sur une table. La deuxième requête est là que je vais avoir mon problème avec ma syntaxe SQL. Je souhaite que les informations à partir d'un tableau statique à être ajouté à la table où la requête delete juste enlevé tout de.
Maintenant, chaque table qui abrite le projet de loi de matériel pour chaque produit est étiqueté avec le nom du produit. Donc je veux la liste déroulante (combo0
) pour être le point de référence pour le nom de la table dans le FROM
clause au sein de la chaîne SQL. Le Code est comme suit:
INSERT INTO tblTempSassyInfo (Concat, TableName, AddressName, PartNumber, [L/R], FeederSize, QtyPerBoard, SASSYname, RawBoard)
SELECT TableName & AddressName & PartNumber, TableName, AddressName, PartNumber, [L/R], FeederSize, QtyPerBoard, SassyName, RawBoard
FROM [FORMS]![DASHBOARD]![Combo0];
De sorte que vous pouvez voir où je suis en train de référence le nom du produit dans la liste déroulante dans le formulaire le nom de la table. S'il vous plaît laissez-moi savoir si cela est possible.
OriginalL'auteur ackdaddy | 2014-02-19
Vous devez vous connecter pour publier un commentaire.
"... Je suis en train de référence le nom du produit dans la liste déroulante dans le formulaire le nom de la table. S'il vous plaît laissez-moi savoir si cela est possible."
Il n'est pas possible avec Access SQL.
Le moteur de base de données ne peut accepter que le nom réel de la table --- il n'est pas équipée pour faire référence à un contrôle de formulaire pour trouver le nom de la table, ni à accepter n'importe quel autre type de paramètre pour obtenir le nom de la table.
Vous pouvez modifier la requête pour inclure votre combo de valeur que le nom de la table et puis réécrire le SQL à partir de la liste déroulante après l'événement de mise à jour.
Une approche similaire pourrait garder l'Accès heureux. Mais il peut ne pas être la meilleure solution pour votre application.
Select
Case
de référence et de la zone de liste déroulante? L'utilisateur peut affiner la "Requête Ajout' parCase
et avec plus de précision insérer des enregistrements dans la table appropriée. Je sais que l'utilisateur n'a pas implicite que cette méthode s'aligne avec son projet, mais je me demande si ce serait une alternative à votre suggestion?Désolé, Marque, mais je ne comprends pas. Pouvez-vous étoffer votre suggestion dans la forme d'une réponse?
Assurez-vous - voir mon post. (Supprimer si je suis totalement faux, s'il vous plaît!) @HansUp
Oui, merci, je comprends maintenant. Je crois que votre approche devrait fonctionner. Peut-être que son choix sera pilotée par le nombre de tables. Je ne sais pas combien il y a, ou pourquoi il n'y a plus d'un.
Commencé avec SQL dans FoxPro siècle dernier. Plus tard est venu Oracle, PostGres, SQL Server et. Commencé Accès en 2005. Je ne sais pas vraiment quoi faire pour l'apprentissage du SQL. J'ai entendu dire SQL pour les Smarties par Joe Celko est bien considéré.
OriginalL'auteur HansUp
Ainsi, l'utilisateur veut essentiellement 2 requêtes à exécuter. Un
DELETE * FROM Table
requête, et unAppend
requête. L'utilisateur veut savoir ce que la table à utiliser pour laAppend
requête à l'aide de la zone de liste déroulante (peut-être que mon hypothèse/interprétation). Cela étant dit, pourquoi ne pas utiliser quelque chose le long des lignes de:C'est juste essayer d'utiliser les utilisateurs de " zone de liste déroulante de valeurs pour déterminer quelle table pour exécuter les requêtes contre, à la place de l'utilisateur qui tente d'utiliser la zone de liste déroulante la valeur d'un nom de table.
OriginalL'auteur Mark C.
Vous d'appuyer sur un bouton pour le faire. Ceci implique qu'une partie du code VBA est en cours d'exécution derrière la scène (l'événement Click du bouton). Dans ce cas, la réponse est un Oui retentissant.
Vous devrez peut-être ajuster un peu, mais il devrait vous obtenir assez proche.
Vous POUVEZ avoir besoin d'utiliser [FORMULAIRES]![Tableau de bord]![Combo0].Les colonnes(0) ou des Colonnes(1) à la place, je ne me souviens pas...
OriginalL'auteur Johnny Bones
Comme l'a dit; l'Accès (et juste au sujet de n'importe quelle marque de base de données) peuvent certainement faire ajouter et de supprimer des requêtes.
Le problème est la conception. Plus précisément:
À PARTIR DE [FORMULAIRES]![Tableau de bord]![Combo0];
De la clause doit être un ensemble d'enregistrements (table) pas un appel à un contrôle sur un formulaire.
Ma suggestion est d'abord d'établir une requête Select qui a le bon de données que vous souhaitez ajouter. Enregistrer avec un nom. Vous devez être capable de faire cela en premier.
Une fois que c'est fait - puis créer une requête Ajout qui utilise cette enregistrée, Sélectionnez la requête à partir d'enregistrer ensemble.
Vous suffit ensuite de déclencher l'Ajout de la requête (la requête Select sera exécuté automatiquement) à l'aide de vba derrière votre événement clic du bouton:
Docmd.OpenQuery "Ajouter Le Nom De La Requête"
OriginalL'auteur Cahaba Data
C'est 100% possible dans MS Access 2010 en fonction de mon expérience. Je n'ai pas utilisé de 2007, mais MS dit que c'est possible (voir le lien ci-dessous). Je suis à l'aide de requêtes paramétrées dans quelques bases de données.
La chose la plus importante que j'ai trouvé est à l'aide d'un formulaire que l'utilisateur va interagir avec et de réglage de la Date "DateTime" dans le paramètre. Voici une vidéo de Microsoft qui montre comment et dit qu'il s'applique à 2007.
Utilisez les Paramètres de MS Access les Requêtes
En outre, si vous voulez faire une suppression ou l'ajout, de l'enregistrer comme une requête puis placez un bouton sur le formulaire qui exécute le docmd.runquery pour le nom de qui a sauvé supprimer/ajouter requête.
OriginalL'auteur Robert Trent