Access 中的 DLookup 直到在表单中单击 textBox 才运行

Posted

技术标签:

【中文标题】Access 中的 DLookup 直到在表单中单击 textBox 才运行【英文标题】:DLookup in Access not running until textBox clicked on in Form 【发布时间】:2009-09-25 08:09:19 【问题描述】:

我使用以下方法在我的表单中设置了 12 个 TextBox ControlSources:

... Me.Oct.ControlSource = "=DSum('GBPValue', 'MF YTD Actual Income & Adret', 'Month=10 AND Org_Type=[Key]')" Me.Nov.ControlSource = "=DSum('GBPValue', 'MF YTD Actual Income & Adret', 'Month=11 AND Org_Type=[Key]')" ...

[Key] 是表单中文本框的名称

当表单加载时,我会遇到一些奇怪的行为 -

所有摘要表单文本框和所有 dlookup 文本框都是空白的 如果我然后单击具有分配了 dlookup 控制源的文本框之一,其他列的摘要文本框开始填充 0 和 #Num 等,并且 dlookup 运行并显示预期的数字 一旦我点击了所有的 dlookup 字段,汇总数字就会正确计算。

在最终版本中,用户从 VBA 中单击后,查询将被重新编写,所以......这是让表单重新查询数据库的明智方法吗?如果是,我该怎么做DLookups 会自动运行/显示,以便在表单加载时立即显示所有内容?

【问题讨论】:

【参考方案1】:

您可能正在寻找 Recalc (Me.Recalc)。但是,我建议您使用记录集,而不是 DlookUp,并为表单使用 Current 事件:

Dim rs As DAO.Recordset 'Needs MS DAO 3.x library
Dim db As Database
Dim strSQL As String

Set db = CurrentDb()

'Guessing that key is a form value
'Note that Month is a reserved word

strSQL = "SELECT [Month], Sum(GBPValue) As SumVal " _
       & "FROM [MF YTD Actual Income & Adret] " _
       & "WHERE Org_Type= " & Me.[Key]  
       & " GROUP BY [Month]" 

Set rs=db.OpenRecordset(strSQL)

'You can probably use a Do While Loop, consider 
'naming the controls, eg, Month10

rs.FindFirst "[Month]=10" 
Me.Oct = rs!SumVal

'and so on

【讨论】:

谢谢你......在尝试让 recordSet 方法工作的过程中,我得到了它与 Recalc 的合作 - 将我遇到的问题作为一个单独的问题发布(@ 987654321@),再次感谢! 鉴于任何其他解决方案的复杂性,我已经返回添加大量 DSums,这种方法的唯一问题是仅显示当前屏幕上的文本框一旦 Recalc 运行,其他的已经被 calc-d 但只有在我点击该文本框时才会显示。这种形式的宽度约为 1024 像素 LCD 的 2 倍。我尝试使用多个 REcalc 并在两者之间移动焦点,几乎可以工作但看起来真的很笨拙 - 有没有更好的方法? 我猜上面应该是另一个问题 - ***.com/questions/1496072/… 对于连续表单,任何依赖于当前数据记录的未绑定控件将在表单的所有行上显示当前记录的结果 - 所有未绑定控件将显示相同的数据,但它可能会根据当前记录有所变化。

以上是关于Access 中的 DLookup 直到在表单中单击 textBox 才运行的主要内容,如果未能解决你的问题,请参考以下文章

MS Access DLookup 文本字段语法问题

通过“缓存”表或其他策略来提高 DLookup 的访问速度?

无法让 DLookup 函数在 Access 2013 中工作

如何在访问表单上的文本框的验证规则中使用 DLookup

查询或 dsum 中的 MS Access 性能 dlookup?

DLookup 中的错误作为访问表单中的控制源