【问题标题】:How to retrieve values from a DAO recordset dynamically?如何动态地从 DAO 记录集中检索值?
【发布时间】:2016-07-29 23:07:35
【问题描述】:

我有一个 DAO 记录集,例如

    Set rst = CurrentDb.OpenRecordset("Select * from EMPLOYEES")

记录集具有以下字段 - NAME、AGE、SALARY、TITLE

现在我创建了一个包含特定字段列表的数组 -

     Dim Fields As Variant
     Fields = Array("NAME", "SALARY")

并希望使用数组元素动态地从记录集中检索字段

     rst.MoveNext

     MsgBox(rst![Array(0)])

我收到一条错误消息,指出“在集合中找不到项目”。

我知道我在这里缺少的是在感叹号('!')符号后传递字段名称变量的正确方法,但我不知道如何。任何人都可以帮忙吗?

【问题讨论】:

  • 试试 rst.Fields(Fields(0)).value 和 iirc 你可以更好地使用序数:rst.Fields(0).value

标签: ms-access vba ms-access-2007


【解决方案1】:
rst!FieldName

该语法实际上是以下的语法糖:

rst.Fields("FieldName").Value

换句话说,通过编写 rst![Array(0)],您正在寻找一个名为 [Array(0)] 的字段 - 感叹号后面的部分是字面意思。

只需使用低糖语法 :-)

rst.Fields(Fields(0)).Value

请注意,Array 不是您的数组变量的名称,因此[Array(0)] 并不像您想象的那样指代Fields(0)(而Array(0) 将创建一个新的值数组,包含值0)。如果名称 Fields 令人困惑,试试这个:

Dim fieldList As Variant
fieldList = Array("NAME", "SALARY")

...

MsgBox rst.Fields(fieldList(0)).Value

【讨论】:

    【解决方案2】:
    rst.Fields(Fields(0)) or rst.Fields(Array(0))
    

    【讨论】:

      猜你喜欢
      • 2010-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多