如何在 Access VBA 中评估字段名称的文本

Posted

技术标签:

【中文标题】如何在 Access VBA 中评估字段名称的文本【英文标题】:How to evaluate text of a Field Name in Access VBA 【发布时间】:2011-04-04 21:17:29 【问题描述】:

我希望遍历一组字段作为遵循特定格式的表的一部分。该表包含 N 对这些字段(Var_1、Value_1、Var_2、Value_2 等)。

我需要遍历这些字段并提取数据以将其写入文本文件。我想使用一个循环,我不想将每个字段硬编码到我的 VBA 中,因为这些字段可能会随着时间的推移而增长,并且不会为每条记录填充每个字段。我想如果在字符串中动态创建字段名称时,是否有办法“评估”字段,那将解决我的问题。

所以,例如...

For i = 1 to FieldCount
' Write data to each field

一开始我是这么想的

For i=1 to FieldCount
    myStr = "!Var_"+CStr(i) + " = " + "!Value_" + CStr(i)
WriteLine(myStr)

但当然,它会按字面意思打印文本……有什么方法可以让 Access 首先评估该文本?

也许有更好的方法来完全解决这个问题?

【问题讨论】:

这可能不在你的控制范围内,但数据结构看起来非常非常糟糕。 【参考方案1】:

您可以使用记录集的 Fields 集合,并通过引用字段名称来引用任何单个字段的值。

rs.Fields("field_name").Value

您通常可以删除显式 .Value,因为这是该字段的默认属性。

Public Sub printFieldPairs()
    Dim strSql As String
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim N As Long
    strSql = "SELECT * FROM tblJoeS;"
    Set db = CurrentDb
    Set rs = db.OpenRecordset(strSql)
    With rs
        Do While Not .EOF
            For N = 1 To 3
                Debug.Print .Fields("Var_" & N) & " = " & _
                    .Fields("Value_" & N)
            Next N
            .MoveNext
        Loop
    End With
    rs.Close
    Set rs = Nothing
    Set db = Nothing
End Sub

这就是我认为你所要求的。但是,如果字段对的数量增加,您将不得不修改表结构。所以我倾向于使用不同的表结构。

row_identifier fKey  fValue
1              Var_1 foo
1              Var_2 bar
1              Var_3 baz
2              Var_1 abcd

【讨论】:

哇,我在这里的第一个问题得到了很好的回答。非常感谢汉斯普。我可以摆脱我的应用程序的第一个实现,但我喜欢你对不同表结构的建议。谢谢!【参考方案2】:

建议改进 HansUp 答案:

....
Dim fld as DAO.Field
For Each fld in rs.fields
    debug.? fld.value
Next fld

【讨论】:

以上是关于如何在 Access VBA 中评估字段名称的文本的主要内容,如果未能解决你的问题,请参考以下文章

Access 子表单中的字段名称填充了 vba 记录集

VBA - Access 03 - 遍历列表框,使用 if 语句进行评估

MS Access中的VBA中不接受变量名称

如何使用文件对话框将文件路径保存在字符串中,使用 Access VBA?

需要表单上的按钮以将表的字段名称插入 Access 中的另一个表

如何使用 MS Access 2016 在 VBA 表达式中编写数字字段?