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

时间:2011-04-04 21:17:30

标签: ms-access access-vba

我希望迭代一组字段作为遵循特定格式的表的一部分。该表包含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首先评估该文本?

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

2 个答案:

答案 0 :(得分:2)

您可以使用记录集的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

答案 1 :(得分:0)

根据HansUp建议的改进回答:

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