2009-02-04 7 views
0

Je "corrige" une ancienne base de données Access, et le client a demandé qu'un champ DATE soit ajouté à un formulaire. Le problème est, je n'ai jamais utilisé Access auparavant. Je suis un gars SQL, et je construis mes propres interfaces utilisateur. Cette forme de forme prend le dessus sur moi.Access 2003 - Champ d'une autre base de données sur le formulaire

Ok - J'ai donc deux tables: tblQuestionairre QuestionairreID EventID bla bla bla

tblEvent EventID DateTime bla bla bla

Maintenant, je suis l'édition du frmQuestionairre (questionairre formulaire) . Toutes les informations de la Table Questionairre (tblQuestionairre) sont ici. Le problème est que j'ai besoin d'ajouter le champ DateTime quelque part sur ce formulaire afin que le client puisse voir quand la question a été entrée. Comme vous pouvez le voir, mon élément de liaison est EventID. Essayez autant que je le peux, je ne peux pas simplement "ajouter" DateTime de la table d'événements en utilisant "expression constructeur". J'ai besoin de charger le DateTime correct pour le Questionairre actuel qui est chargé. Chaque Questionairre est lié à un événement. Comment ajouter ce champ au formulaire Questionairre?

Comment ajouter ce champ au formulaire Questionairre? Je continue à obtenir un #Name? erreur, ce qui est évidemment parce qu'il ne sait pas relier les deux tables sur EventID .. Idées?

Editer: Oui, il s'agit d'une relation simple de 1 à 1. Oui, le champ doit être modifiable.

RÉPONSE: = DLookUp (! "[DateEntered]", "tblEvent", "EventID =" & Formes frmQuestionnaire EventID)

Edit: Maintenant que je l'ai affichage, je ne peux pas le modifier !?

+0

Si vous voulez que ce soit éditable, je suggère l'approche de sous-formulaire que j'ai mentionné. Les données de la forme parent et enfant peuvent être modifiées (ou non, si vous définissez les propriétés en lecture seule). Alternativement, vous pouvez créer une requête (vue) qui fait une jointure: tant que toutes les clés primaires sont là, vous pouvez sauvegarder. – Godeke

+0

En outre, la réponse Dlookup est réalisable mais incorrecte. Regardez quelques-unes des réponses qui suggèrent de changer votre source d'enregistrement sous-jacente. Ils seront éditables et afficheront les données. – JohnFx

+0

Existe-t-il une relation 1: 1 entre tblQuestionairre et tblEvent? Si oui, la réponse de changer la source d'enregistrements du formulaire pour joindre les deux tables est correcte. Si c'est 1: N, alors vous avez besoin d'un sous-formulaire pour afficher les données de tblEvent. –

Répondre

0

Si je lis correctement à la question, vous avez une relation 1-1 sur EventID entre tblQuestionairre et tblEvent? Si oui, il suffit d'ouvrir la feuille de propriétés du formulaire et de modifier la propriété "source d'enregistrement" dans l'onglet "Données" afin qu'elle soit basée sur une requête qui joint les deux tables au lieu de simplement tblQuestionairre. Vous pouvez même utiliser le générateur directement depuis la feuille de propriétés pour générer la requête. Une fois que vous avez ce jeu, vous devriez pouvoir déposer une nouvelle zone de texte sur le formulaire et définir sa source de contrôle (à nouveau sur l'onglet de données de la feuille de propriétés) dans le champ "DateTime".

0

La méthode la plus rapide consiste à utiliser la fonction DLookup dans l'événement OnCurrent pour le formulaire. OnCurrent se déclenche lorsqu'un nouvel enregistrement est chargé et que DLookup effectue une recherche de base de données simple en retournant une valeur.

+0

Oui, le contrôle doit en fait être modifié ... Que fait l'événement OnCurrent? – Kolten

+0

Il s'est déclenché lorsqu'un nouvel enregistrement est chargé dans le formulaire - utile lorsque le formulaire peut faire défiler les enregistrements. Si le formulaire est effectivement une boîte de dialogue ne s'ouvre que pour afficher un enregistrement, alors OnLoad fera l'affaire. Si les données doivent être modifiées, vous devez enregistrer revenir à la base de données (ExecSQL) explicitement – Cruachan

+0

Ce n'est pas le moyen le plus rapide et il est une bidouille inutile. – JohnFx

0

Vous devez changer le RecordSource du formulaire de sorte qu'il est lié à une requête joignant les deux tables plutôt qu'un seul.

Dans votre cas, modifiez la propriété RecordSource et soit utiliser le concepteur pour créer la requête ou cliquez sur le bouton SQL pour entrer quelque chose comme ceci:

SELECT tblQuestionaire.QuestionaireID, 
     tblQuestionaire.EventID, 
     tblQuestionaire.blahblah, 
     tblEvent.DateTime, 
     tblEvent.blahblahblah 
FROM tblQuestionaire 
INNER JOIN tblEvent 
     ON tblQuestionaire.EventID=tblEvent.EnventID; 

Cela suppose que vous avez un strict 1 à 1 relation entre les tables, sinon, utilisez un LEFT JOIN s'il s'agit d'une relation de 1 à [0,1].