2009-06-01 10 views
1

Comment lier une zone de texte avec un champ qui n'appartient pas à la table "Source d'enregistrement" du formulaire via la vue de conception?

Exemple: J'ai "Order.cust_id" (Record Source = Order) et je veux afficher "Customers.name". Je crois que c'est trivial mais je n'ai aucune expérience avec MS Access. J'ai essayé d'utiliser la propriété "Control Source" de la zone de texte mais pas de chance.Comment afficher une valeur de champ * foreign * dans une zone de texte?

Répondre

1

Vous pouvez utiliser DLookup comme source de contrôle d'une zone de texte:

=DlookUp("[Name]", "Customer", "ID=" & Cust_ID) 

Syntaxe: Que rechercher, nom de la table, où la déclaration

La Où déclaration doit suivre les règles de Jet SQL, ce qui signifie que vous devez utiliser des délimiteurs si le champ est au format texte ou date.

Notez que Name est un très mauvais nom en effet pour quoi que ce soit. Je vous suggère de renommer le domaine immédiatement avant que les choses ne s'aggravent.

Il peut être utile de connaître la/les erreur (s).

+0

Pouvez-vous s'il vous plaît mettre à jour le code avec Customer.id, Customer.name, Order.Mots-clés cust_id VB n'est pas mon fort et je reçois quelques msgs d'erreur :) –

+0

Fait, avec quelques notes. DlookUp est assez standard pour les formulaires et vous obtiendrez des informations à ce sujet dans MS Help. Le constructeur d'expression peut également aider avec des fonctions intégrées. – Fionnuala

+0

C'est tout. Merci! –

0

Vous pouvez créer une nouvelle vue (par exemple OrdersAndCustomerNames), sélectionnez toutes les colonnes que vous souhaitez utiliser sous la forme, puis au lieu d'utiliser la table Order comme source d'enregistrement, vous suffit de passer à OrdersAndCustomerNames. Vous dites que vous n'avez aucune expérience avec MS Access, donc je suppose que vous ne construisez rien d'énorme et trop compliqué, alors je le ferais de cette façon. Je suis tout à fait sûr que cela peut être fait plus élégamment mais cela fera pour l'instant.

+0

Merci, mais j'ai besoin de plus de * contrôle * car j'utiliserai 4 à 5 tables. –

3

Une méthode consisterait à convertir la zone de texte en zone de liste modifiable. Définissez ensuite la source de ligne pour inclure à la fois le cust_Id et le Customer.Name de la table client. Exemple d'instruction SQL

Select Cust_ID, Name From Customer 
Order By Name; 

En définissant le nombre de colonnes sur 2 et les largeurs de colonne; la première colonne étant zéro (c'est-à-dire "0; 6"), la clé étrangère serait cachée à l'utilisateur et le nom du client serait affiché.

Notez que cette méthode vous oblige à définir la valeur limite sur true.

Aussi, vous finissez avec une liste déroulante qui peut ne pas être ce que vous voulez.

+0

Je souhaite afficher sur un formulaire les champs de différentes tables et j'ai les ID étrangers dans une table. Je vais utiliser des zones de texte et des combos. Je ne m'inquiète pas si je dois utiliser VBA pour l'accomplir. –

+0

OK Je suis heureux d'aider. Notez que vous pouvez le configurer dans la vue de conception de table - puis, lorsque vous créez un formulaire, il deviendra par défaut une zone de liste déroulante. Mais l'inconvénient est que vous cachez les valeurs de la clé étrangère de vous-même. – Mark3308

+0

Mauvais conseil, Mark3308 - les champs de recherche dans la conception de table sont terribles car ils causent tant de problèmes (vous pensez que vous pouvez interroger sur la valeur affichée, mais vous pouvez seulement interroger sur la valeur qui se trouve derrière, et vous ne pouvez pas voir cette). Les zones de liste déroulante sont un objet d'interface utilisateur, et les tables et les requêtes sont des objets de données, pas des objets d'interface utilisateur (même si l'on peut faire avec eux comme une interface utilisateur). Les listes déroulantes appartiennent à des formes et nulle part ailleurs. –

Questions connexes