MS Access dlookup超过两个表

时间:2014-07-02 18:24:21

标签: ms-access access-vba ms-access-2010

出来了,我在规范数据库时犯了一个错误。 再次标准化后,我的问题现在消失了。 非常感谢你的帮助,我非常感谢。

因此,以下问题不再需要回答。

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

我在Access中遇到了一个愚蠢的问题而无法在我的项目中继续,我将尝试解释它并希望你能帮助我。也许我认为复杂,因为我以前没有使用过Access。一切都可以提供帮助,如果您需要更多信息,请告诉我。谢谢!

我有tblForecastList PlanningCycleCalendarCategoryCalendarCategory无效。

PlanningCycle - 数字(plcNumber)如下所示:
201406,这意味着2014年第3季度

根据这个数字,我想用预测过程所需的接下来的18个月来填充tblForecastList。这看起来像这样(我将使用IDRefs的正确值而不是ID本身,因为它们无助于解释)

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

在查询预测列表时,我尝试使用基于DLookups的嵌套plcNumber来获取表tblCalendar中的CalendarID,看起来像这样,但它不起作用

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

*如果您已经阅读过这一点,那就太棒了,如果您可以帮助我解决问题,那么您就更加精彩了。 *

非常感谢你的时间。

enter image description here

1 个答案:

答案 0 :(得分:3)

假设calmMonthNo和calyYear都是文本类型,你可以改用它:

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

如果将其称为子查询,则可以在DLookup的WHERE子句中填充实际查询。 imo,比嵌套的DLookups更容易看到发生了什么。这里唯一的东西是calmMonthNo和calyYear的数据类型;我假设它们是文本,因此它们在查找术语周围有单引号。如果它们是数字类型,只需删除单引号即可。