我是VBA和Access的新手并且遇到了这个问题,同时尝试使用我提出的另一个问题提出的备用实现(DLookup in Access not running until textBox clicked on in Form)
下面的代码运行,问题是Me.Key对于表单中显示的每个记录都不同,并且以打开事件的形式运行它意味着它只抓取从第一个记录分配给Me.Key的第一个值。如何进行此运行以使Me.Key对于每个显示的记录/行都不同?
Dim rs As DAO.Recordset Dim db As Database Dim qdf As QueryDef Dim prm As Parameter Set db = CurrentDb Set qdf = db.QueryDefs("[MF INCOME - STREAM MONTHLY]") For Each prm In qdf.Parameters prm.Value = Eval(prm.Name) Next prm Set rs = qdf.OpenRecordset(dbOpenDynaset) rs.FindFirst "[MyMonth]=10 AND [Org_Type]='" & Me.Key & "'" Me.Oct = rs!SumVal '...other month assignments
答案 0 :(得分:0)
您可以尝试表单的当前事件,如前所述:)
答案 1 :(得分: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
不幸的是,在浏览所有线条时,您会看到屏幕上的blincker。你当然可以在网上找到一些'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
答案 2 :(得分:0)
根本不清楚您在该查询中需要什么参数。我建议你只是构建一个没有任何参数的查询,其中包含你需要的所有列。
然后根据此查询构建小表单。然后,您可以将此小表单放入现有表单中,并根据键值设置显示多个数据字段。 (只需确保为子表单设置链接主设置和子设置)。这是表格的样子:
alt text http://www.members.shaw.ca/AlbertKallal/Articles/invoice2.gif
因此,在上面的账单中,根据客户ID显示客户信息,并且是发票中的相关表格。
换句话说,要根据另一个表中的键值显示多个数据字段,您不需要编写一行代码。因此,您的整个过程和目标都可以通过鼠标拖放来完成。我经常有发票或采购订单等东西,我只有客户ID。通过使用子表单,我可以显示整个地址和几个数据字段而无需编写任何代码。当您从一个记录移动到另一个记录时,这整个字段集将更新并始终显示正确的相关数据。