如何在代码中查询记录源上的属性以获取Access 2002报告?

时间:2009-12-10 11:47:40

标签: ms-access vba

在报告的“代码隐藏”中,我可以在代码中查询记录源的属性。

对不起,我是新手访问和VB,但我想要实现这个方面的内容

If Me.RecordSource["MYFieldName"] = "dan" Then
   //do something
End If

这可能吗?

2 个答案:

答案 0 :(得分:2)

检查报表记录集中值的唯一方法是将字段绑定为报表上控件的ControlSource。如果它是一个不需要在报表上打印的字段,则必须添加一个不可见的控件。决定是将其放在表单的页眉/页脚还是详细信息中取决于报表的布局以及您尝试检查的数据类型。

您曾经能够在A97中直接执行此操作(没有隐藏控件),但结果往往令人困惑,因为报表背后的数据缓冲区通常比屏幕上显示的内容早一个记录。

此外,您必须小心尝试使用哪些事件,因为报表中的数据与显示的内容的关系与表单中的情况有很大不同。也就是说,某些事件不能引用数据或控件,因为它们发生在控件实际上不存在的时候(或者其中没有任何数据)。

通常,我在报告中使用的唯一事件是OnOpen,OnNoData,OnClose和Detail的OnFormat事件,我使用它们来设置记录源,控制源,控制宽度/可见性和绘制线,而不是其他。

编辑:在另一个答案中,@ GuinnessFan指出我不知道的事情,那就是如果您的报表上有一个控件绑定到您要在代码中引用的基础字段,那么您可以这样做。例如,如果您在底层RecordSource中有一个名为“Phone”的字段并且绑定了一个控件“txtPhone”,您可以直接在代码中引用Me!Phone。

我的猜测是,正在进行的是Access正在为字段设置一个VBA可用的包装器(即旧的隐藏属性,这就是为什么你得到像Me.Phone这样的引用的编译时检查)用作ControlSources。

但是仍然需要在代码中使用底层RecordSource的值,必须有一个控件将该字段作为ControlSource,无论它是否隐藏。新信息是您不必使用控件名称来获取值。这意味着可以区分字段的显示值和报表后面的记录集中的值,这些值并不总是对齐的。我认为通常情况下,在大多数情况下,您会想要使用控制值,因为不清楚基础记录源的光标是否与正在显示的记录在同一记录上。此外,如果您对页面上显示多条记录的报表使用页面级事件,那么您将从哪条记录获取数据并不明显。

答案 1 :(得分:-1)

如果您想在每次报告遇到“dan”时做某事

Private Sub Detail_Format(Cancel As Integer, PrintCount As Integer)
  If [MyFieldName] = "dan" Then
    ' do something here
  End If
End Sub

对于类似“我希望此字段包含红色文本”的内容,您应该查看条件格式。

使用detail_format而不是print。 [MyFieldName]而不是Me.MyFieldName