Access 2003 - поле из другой базы данных в форме - PullRequest
0 голосов
/ 05 февраля 2009

Я «ремонтирую» старую базу данных Access, и клиент попросил добавить поле DATE в форму. Проблема в том, что я НИКОГДА не использовал Access раньше. Я парень по SQL и создаю свой собственный пользовательский интерфейс. Эта форма становится лучше меня.

Хорошо - у меня есть две таблицы: tblQuestionairre QuestionairreID EventID бла-бла-бла

tblEvent EventID DateTime бла-бла-бла

Теперь я редактирую frmQuestionairre (Форма для вопросов). Вся информация из таблицы Questionairre (tblQuestionairre) находится здесь. Проблема в том, что мне нужно добавить поле DateTime где-то в этой форме, чтобы клиент мог видеть, когда вопрос был введен. Как видите, моя ссылка - EventID.

Как ни старайся, я не могу просто "добавить" DateTime из таблицы событий, используя "построитель выражений". Мне нужно загрузить правильный DateTime для текущего загруженного вопросника. Каждый вопрос связан с событием.

Как я могу добавить это поле в форму Questionairre? Я продолжаю получать #Name? ошибка, которая, очевидно, потому что он не знает, чтобы связать две таблицы на EventID .. Идеи?

Edit: Да, это простые отношения 1 к 1. Да, поле должно быть редактируемым.

ОТВЕТ: = DLookUp ("[DateEntered]", "tblEvent", "EventID =" & Forms! FrmQuestionnaire! EventID)

Редактировать: Теперь, когда он у меня отображается, я не могу его редактировать!?

Ответы [ 3 ]

0 голосов
/ 05 февраля 2009

Самый быстрый способ - использовать функцию DLookup в событии OnCurrent для формы. OnCurrent срабатывает при загрузке новой записи, и DLookup выполняет простой поиск в базе данных, возвращая одно значение.

0 голосов
/ 19 февраля 2009

Вам необходимо изменить RecordSource формы, чтобы он связывался с запросом, соединяющим две таблицы, а не только с одной.

В вашем случае отредактируйте свойство RecordSource и либо используйте конструктор для создания запроса, либо нажмите кнопку SQL, чтобы ввести что-то вроде этого:

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

Предполагается, что между таблицами существует строгое отношение 1 к 1, в противном случае используйте LEFT JOIN, если это отношение от 1 до [0,1].

0 голосов
/ 05 февраля 2009

Если я правильно читаю вопрос, у вас есть отношение 1-1 к EventID между tblQuestionairre и tblEvent?

Если это так, просто откройте лист свойств формы и отредактируйте свойство «источник записей» на вкладке «Данные», чтобы оно основывалось на запросе, объединяющем две таблицы, а не на tblQuestionairre. Вы даже можете использовать конструктор прямо из листа свойств для построения запроса.

Как только вы установите этот набор, вы сможете просто перетащить новое текстовое поле в форму и установить его управляющий источник (снова на вкладке данных таблицы свойств) в поле "DateTime".

...