0

我通常是 VBA 和 Access 的新手,在尝试使用我问过的另一个问题中建议的替代实现时遇到了这个问题(Access 中的 DLookup 直到 textBox 在 Form 中点击才运行

下面的代码运行,问题是 Me.Key 对于表单中显示的每条记录都不同,并且在表单打开事件中运行它意味着它仅从第一条记录中获取分配给 Me.Key 的第一个值。我怎样才能让这个运行,以便 Me.Key 对于显示的每条记录/行都不同?

Dim rs As DAO.Recordset
将 db 作为数据库
将 qdf 调暗为 QueryDef
将 prm 作为参数调暗

设置 db = CurrentDb
设置 qdf = db.QueryDefs("[MF INCOME - STREAM MONTHLY]")
对于 qdf.Parameters 中的每个 prm
    prm.Value = Eval(prm.Name)
下一次

设置 rs = qdf.OpenRecordset(dbOpenDynaset)
rs.FindFirst "[MyMonth]=10 AND [Org_Type]='" & Me.Key & "'"
Me.Oct = rs!SumVal
'...其他月份的作业
4

3 回答 3

0

如前所述,您可以尝试表单的当前事件:)

于 2009-09-25T21:26:22.083 回答
0

我猜 Me.Key 是指位于表单详细信息部分的控件。在这种情况下,为了列出控件采用的所有值,您需要浏览所有记录。这样做的方法之一可以是:

Dim m_position as Long
for m_position = 1 to Me.recordset.recordcount
   me.seltop = m_position
   debug.print me.key
next m_position

不幸的是,您在浏览所有行时会看到屏幕闪烁。您当然可以在网上找到一些用于 VBA 的“screenFreezer”实用程序(只要我记得,就有一个称为 LockWindowUpdate)。

另一种解决方案是浏览底层记录集的克隆(浏览记录集将引发与以前相同的屏幕行为)。假设 Me.Key 控件绑定到记录集的“Key”列,代码可以是:

Dim rsClone as DAO.recordset
set rsClone = Me.recordsetclone
if rsClone.EOF and rsClone.BOF then
Else
    rsClone.moveFirst
    Do while not rsClone.EOF
        debug.print rsCLone.fields("Key")
        rsClone.moveNext
    Loop
Endif
set rsClone = nothing

我最喜欢的是第一个,添加了“冻结”选项。您的代码可以管理表单的 seltop 和 selheight 值。这意味着您可以浏览用户选择的特定记录和/或在浏览完所有记录后返回到原始记录选择。

编辑:

在@Ben 的评论之后,我将补充一点,如果您的“myControl”控件位于详细信息部分并且未绑定,那么您将无法管理每行一个值。当窗体显示为“连续”时,控件的所有行将具有相同的值。

如果您的“myControl”控件绑定到记录集的“myField”字段,则以下任何代码都将同时增加“myControl”控件值和“myField”字段值。您将能够在每一行上拥有不同的值:

解决方案1:

Dim m_position as Long
for m_position = 1 to Me.recordset.recordcount
   me.seltop = m_position
   me.controls("myControl") = m_position
next m_position

解决方案2:

Dim rsClone as DAO.recordset, _
    i as long

set rsClone = Me.recordsetclone
if rsClone.EOF and rsClone.BOF then
Else
    rsClone.moveFirst
    i = 1
    Do while not rsClone.EOF
        rsClone.fields("myField") = i
        rsClone.update
        rsClone.moveNext
        i = i+1
    Loop
Endif
set rsClone = nothing
于 2009-09-26T07:01:00.953 回答
0

目前尚不清楚您在该查询中需要什么参数。我建议您只需构建一个没有任何参数的查询,其中包含您需要的所有列。

然后基于此查询构建小型表单。然后,您可以将此小表单拖放到现有表单中,并根据键值设置显示多个数据字段。(只需确保为子表单设置链接主设置和子设置)。这是一个表单的样子:

替代文字
(来源:shaw.ca

因此,在上面的账单中,根据客户 ID 显示客户信息,并且是发票中的相关表。

换句话说,要根据另一个表中的键值显示多个数据字段,您不需要编写一行代码。因此,您的整个过程和目标可以通过鼠标拖放来完成。我经常有发票或采购订单之类的东西,而我只有客户 ID。通过使用子表单,我可以显示整个地址和多个数据字段,而无需编写任何代码。当您从一个记录移动到另一个记录时,这整套字段将更新并始终显示正确的相关数据。

于 2009-09-26T14:30:15.267 回答