Dlookup 作为导航子窗体中文本框的控制源
Posted
技术标签:
【中文标题】Dlookup 作为导航子窗体中文本框的控制源【英文标题】:Dlookup as Control Source for textbox in Navigation Subform 【发布时间】:2018-06-15 19:03:43 【问题描述】:我一直在寻找答案,我已经在每一个变量、引号、表单引用以及我能想到的让这个 DLookup 工作的所有内容中进行了调整。这是我在这里尝试做的背景信息:
PrimaryRouteID = 短文本数据(此查找中的关键角色)
SignSumtxt & SqFtSumtxt = 我希望我的 DLookup 值显示的文本框(通过更改 VBA 中的控制源)
PrimaryRoadInventoryTotals = 包含我想要的相关信息的查询
PrimaryRoadInventoryMaster = 嵌套在导航表单中的表单(要使用的主表单)
我将在此处解释其余部分:我正在设计一个 DLookup 函数,该函数使用从嵌套在导航表单中的表单上的文本框中获取的 PrimaryRouteID 查找 PrimaryRoad InventoryTotals 查询中的数量。这个 DLookup 本身在表单中起作用,但我一直在努力修复它以在导航表单中工作。
据我了解,由于我已将 MasterForm 放在 NavForm 中,因此它现在嵌套在 NavSubform 中,并且您必须引用 NavSubform 中的值,而不仅仅是您正在使用的表单。我似乎有找到了正确的语法(我认为)来获取我想要的值,但是我的 DLookup 仍然不能像它需要的那样运行。在下面的版本中,分配了 DLookups 的两个文本框都有 #Name?错误。我一辈子都不知道该怎么办!
代码(分开以便于查看):
Private Sub RouteSelectCombo_AfterUpdate()
SignSumtxt.ControlSource = DLookup("[TotalQuantity]", "[PrimaryRoadInventoryTotals]", "[PrimaryRoadInventoryTotals]![PrimaryRouteID] ='" & [Forms]![NavigationForm]![NavigationSubform].Form![PrimaryRouteIDtxt] & "'")
SqftSumtxt.ControlSource = DLookup("[TotalSqFt]", "[PrimaryRoadInventoryTotals]", "[PrimaryRoadInventoryTotals]![PrimaryRouteID] ='" & [Forms]![NavigationForm]![NavigationSubform].Form![PrimaryRouteIDtxt] & "'")
End Sub
我注意到一件奇怪的事情,并且可能表明这里出了什么问题,那就是当我将此代码嵌套到 msgbox 中时,它会读取“true”或“false”。不知道这是否有帮助,但我想我会提到它。
我很感激!
【问题讨论】:
这个问题真的令人困惑。 是的,我重新阅读了你的问题,无论你想做什么,你都需要找到一种方法来做到这一点更简单。 @ 987654322@ 只是意味着您的绑定错误,但是这里的相关信息太少,不相关的信息太多,无法将这些点联系起来。 我要做的就是让 Dlookup 根据导航表单内的表单上的文本框值从查询中获取值。我试图让它听起来很清楚,但我想它不是那样的。我可以提供哪些更相关的信息? 把它分解成碎片,你可能会有一个战斗的机会。获取对导航表单的引用。从该参考中获取文本框。从文本框中获取值。使用该值运行查询。从查询结果中获取所需数据。将所有内容包装在自定义查找函数中并返回结果数据。 因此,与其使用复杂的 DLookup,不如创建一个函数来根据该文本框值更改查询条件,然后只查找结果过滤值? 【参考方案1】:如果要为控件分配值,请使用.Value
属性,而不是.ControlSource
属性。 .ControlSource
属性采用字符串控制源,如果使用表达式,则应以 =
开头。
如果你真的想分配控制源,你可以在开始时添加"=" &
,但这确实是一个糟糕的设计。控制源不应该是可变的。
你可能应该做什么:
Private Sub RouteSelectCombo_AfterUpdate()
SignSumtxt.Value= DLookup("[TotalQuantity]", "[PrimaryRoadInventoryTotals]", "[PrimaryRoadInventoryTotals]![PrimaryRouteID] ='" & [Forms]![NavigationForm]![NavigationSubform].Form![PrimaryRouteIDtxt] & "'")
SqftSumtxt.Value= DLookup("[TotalSqFt]", "[PrimaryRoadInventoryTotals]", "[PrimaryRoadInventoryTotals]![PrimaryRouteID] ='" & [Forms]![NavigationForm]![NavigationSubform].Form![PrimaryRouteIDtxt] & "'")
End Sub
如果你真的想用它作为控制源:
Private Sub RouteSelectCombo_AfterUpdate()
SignSumtxt.ControlSource = "=DLookup(""[TotalQuantity]"", ""[PrimaryRoadInventoryTotals]"", ""[PrimaryRoadInventoryTotals]![PrimaryRouteID] ='"" & [Forms]![NavigationForm]![NavigationSubform].Form![PrimaryRouteIDtxt] & ""'"")"
SqftSumtxt.ControlSource = "=DLookup(""[TotalSqFt]"", ""[PrimaryRoadInventoryTotals]"", ""[PrimaryRoadInventoryTotals]![PrimaryRouteID] ='"" & [Forms]![NavigationForm]![NavigationSubform].Form![PrimaryRouteIDtxt] & ""'"")"
End Sub
【讨论】:
【参考方案2】:我想回到这个问题并就此主题作一些总结。虽然我在这里介绍的方法没有成功(而且我确信我没有正确实施它们),但我最终采取了简单的路线(根据罗伯特哈维的建议)而不是强迫我认为是最好的方法设置导航表单,而不是只创建一个具有按钮的表单,这些按钮通向要使用的其他表单。
这样,我不必在导航表单引用中的表单内执行任何类型的疯狂子表单,并且我的导航表单上没有一堆选项卡。
感谢大家的帮助和解答!
【讨论】:
以上是关于Dlookup 作为导航子窗体中文本框的控制源的主要内容,如果未能解决你的问题,请参考以下文章
C#winform中父窗体打开后下面有一排导航,导航打开子窗体,子窗体停靠在父窗体中间