Vba 将查询表中的字段名存储到动态数组MS Access中
我有一个查询Vba 将查询表中的字段名存储到动态数组MS Access中,vba,ms-access,Vba,Ms Access,我有一个查询qryRuleSets,它输出一个包含19个字段的表(在建议之前我不想将其保存到access表中)。我想获取字段名并将它们存储到一个数组中,以便稍后在for循环中使用该数组 为了找到查询结果中的字段数(稍后在for循环中使用),我实现了以下功能,其中字段数存储在变量numberfields- numberfields = CurrentDb.QueryDefs("qryrulesets").Fields.Count 要实际获取这些字段的名称并将其存储在数组中,我
qryRuleSets
,它输出一个包含19个字段的表(在建议之前我不想将其保存到access表中)。我想获取字段名并将它们存储到一个数组中,以便稍后在for循环中使用该数组
为了找到查询结果中的字段数(稍后在for循环中使用),我实现了以下功能,其中字段数存储在变量numberfields
-
numberfields = CurrentDb.QueryDefs("qryrulesets").Fields.Count
要实际获取这些字段的名称并将其存储在数组中,我遇到了两个问题:
一,。从查询结果中获取字段名
二,。设置一个动态数组,这样如果查询返回的表的字段数大于或小于19个,它仍然可以工作
关于我的第一个问题:
我试图按照以下链接中的步骤进行操作:但我无法理解
为了从qry结果中获取字段名,我尝试了以下方法,但我对vba/access的知识不是太多,所以即使在大量的谷歌搜索之后,也很难理解:
Dim qry As QueryDef
Dim fieldNames As QueryDef
Dim firstcol As String
Set fieldNames = CurrentDb.CreateQueryDef(qry.qryrulesets)
firstcol = fieldNames.field(0).Name
关于我的第二个问题:
为了在数组中存储值,我尝试了以下方法(作为测试),它可以工作,但我必须定义数组的大小。是否有一种方法可以使其成为动态的,即基于字段数的值(在上面存储在numberfields
中):
我尝试将上面的“30”设置为一个可变值,但它不喜欢这样
任何和所有的帮助都将不胜感激。谢谢 您可以这样做:
公共函数getFieldName(ByVal QueryName作为字符串)作为字符串()
Dim查询为DAO.QueryDef
Dim FieldNames()作为字符串
将索引设置为整数
Set Query=CurrentDb.querydfs(QueryName)
ReDim字段名(0到Query.Fields.Count-1)
对于索引=LBound(字段名)到UBound(字段名)
字段名(索引)=查询.Fields(索引).Name
下一个
GetFieldNames=FieldNames()
端函数
Dim vardata()作为Variant
然后ReDim
稍后将其删除。是的,但是当我ReDim时,我必须正确指定长度@braXyes,但您可以使用redim Preserve
重拨任意次数-您是否阅读了有关重拨的文档?显然不是很彻底!谢谢你,我认为你每次都必须手动指定一个长度——不是这样。谢谢你@Brax使用scripting.dictionary替换数组。使用.count方法提供密钥。
Dim vardata(30) As Variant
For i = 1 To numberfields
vardata(i) = "hello"
Next i