创建一维动态数组
Create One Dimensional Dynamic Array
当我不知道数组的大小时,如何将字段名称添加到数组中?在下面的两个函数中,我可以毫无问题地填充 table,但是当我尝试创建数组时,它只会打印 table 中的第一条记录。我必须做什么才能创建包含所有值的数组?
Function PopulateTable()
Set rs1 = db.OpenRecordset("MasterList")
For Each fld In rs1.Fields
StrSQL = "INSERT INTO HoldTable (FieldList) VALUES ('" & fld.Name & "' );"
DoCmd.SetWarnings False
DoCmd.RunSQL StrSQL
Next
'Create array of all fld.Name Values
PopulateArray
End Function
Function PopulateArray()
Dim rstData As DAO.Recordset
Dim v As Variant
Dim cn As Variant
Set rstData = CurrentDb.OpenRecordset("select fieldlist from HoldTable")
v = rstData.GetRows(rstData.RecordCount)
For Each cn In v
Debug.Print CStr(cn)
Next
End Function
您应该使用 ADODB.Connection 和 OpenSchema 方法来获取字段名称列表:List database objects (tables, columns..) using ADO/ADOX
您需要先使用 rstData.MoveLast
,然后使用 rstData.MoveFirst
才能获得准确的 RecordCount
。
Function PopulateTable()
Set rs1 = CurrentDb.OpenRecordset("MasterList")
For Each fld In rs1.Fields
StrSQL = "INSERT INTO HoldTable (FieldList) VALUES ('" & fld.Name & "' );"
'Create array of all fld.Name Values
DoCmd.SetWarnings False
DoCmd.RunSQL StrSQL
Next
PopulateArray
End Function
Function PopulateArray()
Dim rstData As DAO.Recordset
Dim v As Variant
Dim cn As Variant
Set rstData = CurrentDb.OpenRecordset("Select fieldlist FROM HoldTable")
rstData.MoveLast
rstData.MoveFirst
v = rstData.GetRows(rstData.RecordCount)
For Each cn In v
Debug.Print CStr(cn)
Next
End Function
您可以定义一个 "normal" 变量并为其分配一个空数组:
Dim v : v = Array()
然后你就可以重调了:
ReDim Preserve v(rstData.RecordCount)
这就是我创建动态数组的方式。
我会遍历数据并在每次迭代中增加数组的大小,然后将值设置为新增加的数组
Dim arraySize as Integer
Dim dynArray() As string
arraySize = -1 ' set to -1 so when you first increment the size by one it will start at index 0
' Iterating through rstData variable
for each fld in rstData.fields
arraySize = arraySize + 1
redim preserve dynArray(arraySize) as String
dynArray(sz) = fld ' not sure if can set it to fld directly or if need to access the value property of fld
next
' End of iterating through
当我不知道数组的大小时,如何将字段名称添加到数组中?在下面的两个函数中,我可以毫无问题地填充 table,但是当我尝试创建数组时,它只会打印 table 中的第一条记录。我必须做什么才能创建包含所有值的数组?
Function PopulateTable()
Set rs1 = db.OpenRecordset("MasterList")
For Each fld In rs1.Fields
StrSQL = "INSERT INTO HoldTable (FieldList) VALUES ('" & fld.Name & "' );"
DoCmd.SetWarnings False
DoCmd.RunSQL StrSQL
Next
'Create array of all fld.Name Values
PopulateArray
End Function
Function PopulateArray()
Dim rstData As DAO.Recordset
Dim v As Variant
Dim cn As Variant
Set rstData = CurrentDb.OpenRecordset("select fieldlist from HoldTable")
v = rstData.GetRows(rstData.RecordCount)
For Each cn In v
Debug.Print CStr(cn)
Next
End Function
您应该使用 ADODB.Connection 和 OpenSchema 方法来获取字段名称列表:List database objects (tables, columns..) using ADO/ADOX
您需要先使用 rstData.MoveLast
,然后使用 rstData.MoveFirst
才能获得准确的 RecordCount
。
Function PopulateTable()
Set rs1 = CurrentDb.OpenRecordset("MasterList")
For Each fld In rs1.Fields
StrSQL = "INSERT INTO HoldTable (FieldList) VALUES ('" & fld.Name & "' );"
'Create array of all fld.Name Values
DoCmd.SetWarnings False
DoCmd.RunSQL StrSQL
Next
PopulateArray
End Function
Function PopulateArray()
Dim rstData As DAO.Recordset
Dim v As Variant
Dim cn As Variant
Set rstData = CurrentDb.OpenRecordset("Select fieldlist FROM HoldTable")
rstData.MoveLast
rstData.MoveFirst
v = rstData.GetRows(rstData.RecordCount)
For Each cn In v
Debug.Print CStr(cn)
Next
End Function
您可以定义一个 "normal" 变量并为其分配一个空数组:
Dim v : v = Array()
然后你就可以重调了:
ReDim Preserve v(rstData.RecordCount)
这就是我创建动态数组的方式。 我会遍历数据并在每次迭代中增加数组的大小,然后将值设置为新增加的数组
Dim arraySize as Integer
Dim dynArray() As string
arraySize = -1 ' set to -1 so when you first increment the size by one it will start at index 0
' Iterating through rstData variable
for each fld in rstData.fields
arraySize = arraySize + 1
redim preserve dynArray(arraySize) as String
dynArray(sz) = fld ' not sure if can set it to fld directly or if need to access the value property of fld
next
' End of iterating through