Поиск в MS Access по двум таблицам

#ms-access #vba #ms-access-2010

#ms-access #vba #ms-access-2010

Вопрос:

Оказалось, что я допустил ошибку при нормализации моей базы данных. После повторной нормализации мои проблемы исчезли. Большое вам спасибо за вашу помощь, я действительно очень ценю это.

Поэтому на приведенный ниже вопрос больше не нужно отвечать.

==================================================================

У меня глупая проблема в Access, и я не могу продолжить свой проект, я попытаюсь объяснить это и надеюсь, что вы сможете мне помочь. Может быть, я думаю, что это сложно, потому что я никогда раньше не работал с Access. Все может помочь, дайте мне знать, если вам нужна дополнительная информация. Спасибо!

У меня есть tblForecastList с PlanningCycle и CalendarCategory . CalendarCategory Не имеет значения.

PlanningCycle -Число ( plcNumber ) выглядит так, например:
201406 , что означает 3 квартал 2014 года

На основе этого числа я хочу заполнить tblForecastList следующие 18 месяцев, которые требуются для процесса прогнозирования. Это будет выглядеть следующим образом (я буду использовать правильные значения для IDREFS вместо самих идентификаторов, потому что они не помогут объяснить)

 fclID    fcl_plcIDRef    fcl_calcIDRef    Month1    Month2    ....    Month18
-----------------------------------------------------------------------------
12          201406       (not relevant)  2014June  2014July         2015December
  

В запросе для списка прогнозов я попытался использовать вложенный, DLookups основанный на plcNumber , чтобы получить calendarId из таблицы tblCalendar , который выглядел следующим образом, но он не работает.

DLookUp( [tblCalendar]![calID], "tblCalendar", "cal_calmIDRef = " amp; DLookUp( [tblCalendarMonths]![calmID], "tblCalendarMonths","calmMonthNo = 06") AND DLookUp( [tblCalendarYears]![calyID], "tblCalendarYears", "calyYear = 2014'))

* Если вы дочитали до этого места, вы потрясающий, и если вы можете помочь мне решить проблему, вы еще более потрясающий. *

Большое вам спасибо за ваше время.

введите описание изображения здесь

Комментарии:

1. Не лучше ли вам создать запрос на основе данных из ваших других таблиц вместо новой таблицы? И если вы говорите, что пытаетесь создать запрос для списка прогнозов, откуда берутся DLookups? Я немного запутался в том, чего вы пытаетесь достичь здесь.

Ответ №1:

Предполагая, что calmMonthNo и calyYear являются текстовыми типами, вы можете использовать это вместо:

 DLookup("[calID]", "tblCalendar", "[calID] = " amp; _
        "(SELECT tblCalendar.calID " amp; _
        "FROM (tblCalendar INNER JOIN tblCalendarMonths " amp; _
        "ON tblCalendar.cal_calmIDRef = tblCalendarMonths.calmID) " amp; _
        "INNER JOIN tblCalendarYears ON tblCalendar.cal_calyIDRef = tblCalendarYears.calyID " amp; _
        "WHERE (((tblCalendarMonths.calmMonthNo)='06') AND ((tblCalendarYears.calyYear)='2014')))")
  

Вы можете поместить реальный запрос в свое предложение WHERE в DLookup, если вы вызываете его как подзапрос. имо, гораздо проще увидеть, что происходит, чем вложенные DLookups. Единственное, что здесь есть, это типы данных calmMonthNo и calyYear; Я предполагаю, что они являются текстовыми, поэтому они заключены в одинарные кавычки вокруг терминов поиска. Если это числовые типы, просто удалите одинарные кавычки.

Комментарии:

1. Еще раз привет. Теперь я подошел к тому моменту, когда мне действительно понадобился ваш код. Я скопировал / вставил это вслепую в свой код, и это сработало мгновенно. Большое вам спасибо.