MS access, SÉLECTIONNEZ en vba
Je vais avoir quelques problèmes avec certaines fonctionnalités de mon application. Il est un cas particulier où j'ai un exemple d'une " instance de la classe sur un formulaire pour un administrateur de l'examen. Le formulaire est rempli avec les étudiants associés à cette attente de la classe. Après leurs notes sont finis, j'ai un bouton dans le pied de page qui va supprimer cette classe de mes "en cours" de la table et ajouter les notes de tous les élèves. Les travaux de cette.
Cependant, je tiens essentiellement à copier dans l'attente de cette classe, qui a juste le nom de la classe, de la date et de l'enseignant d'une classe de table avant qu'il soit supprimé de l'attente. Depuis pas de données sur cette classe autre que la clé primaire(nombre de classes) persiste tout au long de cette forme, je ne peux pas remplir les autres champs(nom de la classe, la date) de la ligne dans mon terminé la classe de la table.
Je suis en train d'essayer un "SÉLECTIONNEZ DANS" l'opération en VBA pour obtenir ces valeurs. Il va comme ceci:
dim cname as String
dim classdate as Date
dim pid as integer
dim teacher as String
dim qry as String
pid = [Forms]![frmClasses]![txtID]
qry = "Select className INTO cname FROM tblPending WHERE tblPending.id = " & " ' " & pid & " ' " & ";"
db.execute qry
debug.print qry
debug.print cname
À partir d'ici, je fais la même opération pour l'autre variable, à construire ma requête d'INSERTION, et de l'exécuter. Le problème, c'est-- mon sélectionnez dans la sont pas de travail. Debug.imprimer montre que les variables locales n'ont jamais été initialisé à partir de l'instruction SELECT INTO. Toutes les pensées?
Je ne peux pas utiliser le mot clé Me dans ce cas. Au lieu d'ouvrir le formulaire avec un param, je suis en utilisant un champ de la forme précédente. Le champ avec txtID (une zone de texte avec la corporation de la classe ID) est sur la forme précédente. Aussi, cette partie fonctionne comme prévu. La requête imprimé est "Sélectionnez un nom de Classe DANS cName tblPending Où tblPending.id = '17';" j'ai aussi essayé de supprimer les guillemets simples autour de l'id de critères, qu'il est un entier, mais il ne fait pas de différence.
Selon la sélection que j'ai faite à partir de la forme précédente, j'ai le correspondant de l'ID de classe
SÉLECTIONNEZ EN crée une table, ce que vous voulez INSÉRER DANS, qui ajoute à une table. Aussi, ajouter
db.execute qry, dbFailOnerror
- votre requête échoue si la table existe et vous ne serez pas obtenir un avertissement autrement.Dans microsoft Access, vous pouvez utiliser
DLookup()
de "sélectionner dans une variable" office.microsoft.com/en-us/access-help/... Vous pouvez trouver d'autres "fonctions de domaine" utile: DMin(); DMax(); DAvg(); etc.
OriginalL'auteur Scotch | 2012-07-05
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, toutes les classes dans un tableau et juste, un "NotPending" ou "Terminé" colonne serait mieux.
Avoir deux tableaux identiques pour les classes et le déplacement des valeurs de l'un à l'autre pour indiquer les changements de statut est une mauvaise conception de base de données.
Si vous vraiment besoin de le faire à l'aide de deux tables et de copier des lignes, alors vous avez besoin un
INSERT INTO
de la requête (et pasSELECT INTO
), comme déjà mentionné par Remou dans les commentaires, parce queSELECT INTO
crée une nouvelle table (ou remplace un existant avec le même nom, si déjà là).La syntaxe pour
INSERT INTO
ressemble à ceci:Et enfin, vous avez demandé à ce dans un commentaire:
À la charge d'une ligne dans une variable, vous devez utiliser un Jeu d'enregistrements.
Exemple de code pour charger votre requête dans un jeu d'enregistrements et de sortie de la
ClassName
champ:Je ne sais pas si ma question était ambiguë ou mes intentions n'étaient pas claires, mais je vais aller de l'avant et marquer ce que répondit "-- il n'est PAS possible d'utiliser "SELECT INTO' en VBA pour affecter une valeur à partir d'une ligne à une variable. Pour ce faire, j'aurais besoin d'Ouvrir un jeu d'enregistrements de la nécessaire requête. Est-ce un résumé approprié à votre avis?
Je ne sais pas Oracle et PL/SQL, donc je ne peux pas dire comment ça fonctionne, à l'exception de ce que vous avez dit. Pour affecter une valeur à partir d'une ligne à une variable, vous avez besoin d'un
Recordset
ou, si vous juste besoin d'UNE valeur, vous pouvez utiliserDLookup
. Mais si vous voulez juste pour copier une ligne à une autre table, j'utilise unINSERT INTO
requête. IMO c'est la meilleure façon de le faire.Sonne bien, Merci pour l'entrée. Je vais aller de l'avant et à l'accepter et considérer qu'il a répondu
OriginalL'auteur Christian Specht
Semble que vous voulez récupérer une valeur de texte,
className
, detblPending
oùtblPending.id
correspond à la valeur trouvée dans la zone de texte,txtID
et stocker cette valeur de texte dans une variable de chaîne nomméecname
.Si cette interprétation est correcte, vous n'avez pas besoin de s'embêter avec une requête et le jeu d'enregistrements. Utilisez simplement le Fonction DLookup pour récupérer la valeur, similaire à ce code non testé l'échantillon.
Notes:
J'ai supposé que le type de données de la
id
champ danstblPending
est numérique. Si c'est effectivement le type de données texte, changerstrCriteria
comme ceci:strCriteria = "id = '" & pid & "'"
DLookup()
renvoie la valeur Null si aucune correspondance trouvée. Puisque nous sommes de l'affectation de la valeur renvoyée de la fonction à une variable de type chaîne, j'ai utiliséNz()
pour convertir la valeur Null à une chaîne vide. Alternativement, vous pouvez déclarer cname Comme Variante (de sorte qu'il peut accepter une valeur Nulle) et de se débarrasser deNz()
.Une fois, il m'est apparu que vous avez vraiment envie de les SÉLECTIONNER EN variable,
DLookup()
apparue comme la solution la plus simple. Quand j'ai lu votre question, j'en ai mal interprété le but que le stockage d'une valeur Sélectionnée dans une table (nouveau ou existant).Je pense que c'est ce Remou et de la pensée Chrétienne aussi. Je suis habitué à l'aide de SELECT INTO pour obtenir des valeurs d'un tableau dans une variable locale en PL/SQL. C'est là que la confusion découle. Je ne voulais pas "SÉLECTIONNER", je voulais savoir ce que l'Accès équivalent de cette opération. DLookup est la réponse que je cherchais.
OriginalL'auteur HansUp