数组与字典解决方案第三十讲:如何将记录集的数据记入数组(数组字典序排序)

数组与字典解决方案第三十讲:如何将记录集的数据记入数组(数组字典序排序)

VBA数组与字典方案》教程(10144533)是我推出的第三套教程,目前已经是第二版修订了。这套教程定位于中级,字典是VBA的精华,我要求学员必学。7.1.3.9教程和手册掌握后,可以解决大多数工作中遇到的实际问题。

这套字典教程共两册,一共八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:数组与字典解决方案第三十讲:如何将记录集的数据记入数组

【分享成果,随喜正能量】281工作中,不做伸手党,遇到问题自己先想办法,要锻炼自己思考的能力。问别人只是为了优化自己的答案。领导交代的工作,做之前先问清楚和领导确认一遍,这样做事有清晰的目标,有反馈。这样才能做得更好。

第三十讲 如何将记录集的数据记入数组

大家好,今日继续讲VBA数组与字典解决方案,今日讲解第30讲内容,记录集的数据,如何记入数组。这讲的内容涉及到数组在数据库中的应用,数组在EXCEL及其接口程序中的应用中有着不可替代的角色,利用好了,可以给自己的工作表处理和VBA数据处理带来很大的方便。

1 应用场景的具体分析

今日实例:在数据库中有如下的数据:

我要做的是打开这个数据库,然后把内容先存到一个数组中,最后在工作表中体现出来。

2 应用场景的代码实现及代码解读

代码如下:

Sub mynzUpdateRecords_30() '将数据记录存入数组的方案

Dim cnADO As Object, rsADO As Object, Fdsarr, arr

Dim strPath As String, strTable As String, strSQL As String, strMsg As String

Set cnADO = CreateObject("ADODB.Connection")

Set rsADO = CreateObject("ADODB.Recordset")

strPath = ThisWorkbook.Path & "\mydata2.accdb"

strTable = "员工信息"

cnADO.Open "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & strPath

'汇报给用户记录数

strSQL = "SELECT * FROM " & strTable

rsADO.Open strSQL, cnADO, 1, 3

Fdsarr = Array("员工编号", "姓名", "性别", "民族", "部门", "职务", "电话", "出生日期") '字段名

arr = Application.Transpose(rsADO.GetRows(, 1, Fdsarr)) '记录存入数组

For X = 1 To UBound(arr)

Cells(X + 1, 1).Resize(1, 8) = Application.Index(arr, X, 0)

Next

rsADO.Close

'释放内存

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

End Sub

代码截图:

代码讲解:

  1. Fdsarr = Array("员工编号", "姓名", "性别", "民族", "部门", "职务", "电话", "出生日期") '字段名

Arr = Application.Transpose(rsADO.GetRows(, 1, Fdsarr)) '记录存入数组

这里利用了一个方法:rsADO.GetRows(, 1, Fdsarr)

GetRows方法:此方法传回一个二维的数组,每一行对应Recordset中的一笔记录,且每一列对应到记录中的字段。

此方法的语法如下:varArray = rs.GetRows([Rows], [Start], [Fields])

参数:

  1. Rows是要读取记录的数量;如果想要取得Recordset所有记录,可用-1或省略此参数。
  2. Start 是指出第一个被读取记录的书签;也可以是下列列举常数中的一个:0-adBookmarkCurrent(目前记录)、1-adBookmarkFirst(第一笔记录)、或2-adBookmarkLast(最后记录)。
  3. Fields 是可选择的栏位名称字段,其用来限制要读取的资料量。(也可指定单一字段名称、单一栏位索引、或者一个栏位索引阵列)。

2) For x = 1 To UBound(Arr)

Cells(x + 1, 1).Resize(1, 8) = Application.Index(Arr, x, 0)

Next

上面的过程中也用到了一个函数Index(Arr, x, 0),是调用工作表函数index。INDEX 返回列表或数组中的元素值,此元素由行序号和列序号的索引值给定。

INDEX 函数有两种语法形式:数组和引用。数组形式通常返回数值或数值数组,引用形式通常返回引用。

当函数 INDEX 的第一个参数为数组常数时,使用数组形式。

语法:数组形式INDEX(array,row_num,column_num)

参数:

① Array 为单元格区域或数组常量。

② 如果数组只包含一行或一列,则相对应的参数 row_num 或 column_num 为可选。

如果数组有多行和多列,但只使用 row_num 或 column_num,函数 INDEX 返回数组中的整行或整列,且返回值也为数组。

③ Row_num 数组中某行的行序号,函数从该行返回数值。如果省略 row_num,则必须有Column_num。

④ Column_num 数组中某列的列序号,函数从该列返回数值。如果省略 column_num,则必须有 row_num。

特别说明:

① 如果同时使用 row_num 和 column_num,函数 INDEX 返回 row_num 和 column_num 交叉处的单元格的数值。

② 如果将 row_num 或 column_num 设置为 0,函数 INDEX 则分别返回整个列或行的数组数值。Row_num 和 column_num 必须指向 array 中的某一单元格;否则,函数 INDEX 返回错误值 #REF!。

例:=INDEX(A2:B3,2,2) 返回单元格区域的第二行和第二列交叉处的值;

=INDEX(A2:B3,2,1) 返回单元格区域的第二行和第一列交叉处的值。

下面看我们程序的运行结果:

今日内容回向:

1 如何把记录集传递给数组?

2 GetRows 和 INDEX 是否理解呢?

我多年的VBA实践经验,全部浓缩在以下教程中:

特别声明:[数组与字典解决方案第三十讲:如何将记录集的数据记入数组(数组字典序排序)] 该文观点仅代表作者本人,今日霍州系信息发布平台,霍州网仅提供信息存储空间服务。

猜你喜欢

蕾哈娜终于迎来“迷你日婆”:三胎得女,把“姐妹兵团”计划写进人生歌单(蕾哈娜right now)

据身边人士放风,这次怀孕并非“意外彩蛋”,而是她早早列好的“family list”最后一栏:两个哥哥,一个姐姐,年龄差不超过三岁,一起打打闹闹长大,把加勒比海岸的鼓点节奏直接搬进自家客厅。知情人士说,她计划…

蕾哈娜终于迎来“迷你日婆”:三胎得女,把“姐妹兵团”计划写进人生歌单(蕾哈娜right now)

『张馨予』的“腰臀比”也太惊人了!穿白上衣喇叭裤,真是人间尤物

最近流传的一组写真中,她以清新的白色基调为主,搭配独特的剪裁,展现出令人惊艳的腰臀比例,引发网友热烈讨论,成为广泛赞誉的焦点。将衬衫塞进高腰牛仔裤👖中,立刻抬高腰线,即使身高不算特别高也能呈现出更显修长的腿部比…

『张馨予』的“腰臀比”也太惊人了!穿白上衣喇叭裤,真是人间尤物

香港“新四大天王”出炉!网友集体傻眼:何时落到这收场……

首先是 香港顶流姜涛,这位应该没人不认识了吧。 他现在在香港的人气,还真不一定会输给当年的『刘德华』和黎明。小IN真的没在玩梗,不信大家看看最后和姜涛一起成团的队员们,就知道为什么姜涛能这么火了。 当时出…

香港“新四大天王”出炉!网友集体傻眼:何时落到这收场……

他曾是著名主持人,分手向前任讨要内裤,60岁公然出柜,现在怎样(他曾是著名主持人英语)

宝咏琴指责洪朝丰是同性恋和感情骗子,而洪朝丰则坚称自己是双性恋。这个决定,仿佛是对自己真实身份的一种宣告,也是对过去感情的一种告别。它不仅改变了洪朝丰的人生轨迹,也让公众对爱情和性取向有了更多的思考。 这…

他曾是著名主持人,分手向前任讨要内裤,60岁公然出柜,现在怎样(他曾是著名主持人英语)

SUPOR苏泊尔 JR71-G400:厨房里的智能炊具新宠(SUPOR苏泊尔 SY-50FC01Q说明书)

为何智能电饭煲悄然进入千家万户?本文为您解析SUPOR苏泊尔 JR71-G400的功能特性与实际意义,探讨其如何改变我们的烹饪方式,帮助您轻松驾驭这款智能炊具。从核心技术到应用场景,全方位了解它在现代厨房中的地位。

SUPOR苏泊尔 JR71-G400:厨房里的智能炊具新宠(SUPOR苏泊尔 SY-50FC01Q说明书)