如何在 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 中评估字段名称的文本的主要内容,如果未能解决你的问题,请参考以下文章
VBA - Access 03 - 遍历列表框,使用 if 语句进行评估
如何使用文件对话框将文件路径保存在字符串中,使用 Access VBA?