记录集的基本操作讲解到此结束,下面再讲些可能不太常用的或者属性。 第一个方法:GetString(字符串类型,想获取的行数,字段分隔符,记录分隔符,空值表达式) 最后一个参数没仔细研究过。有时候,我们需要把所有符合条件的记录合并成一个文本字符串,这时候,这个函数就派上用场了: - Sub GetStr1()
- Dim rst As New ADODB.Recordset
- Dim s As String
- rst.Open "select 企业代码 from myTable2 where 违规月份='9月'", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
- s = rst.GetString(adClipString, , , ",")
- Debug.Print "9月违规的企业分别是:" & Left(s, Len(s) - 1)
- End Sub
复制代码改成循环语句则是这样:
- Sub GetStr2()
- Dim rst As New ADODB.Recordset
- Dim s As String
- rst.Open "select 企业代码 from myTable2 where 违规月份='9月'", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
- Do Until rst.EOF
- s = s & "," & rst(0)
- rst.MoveNext
- Loop
- Debug.Print "9月违规的企业如下:" & Right(s, Len(s) - 1)
- End Sub
复制代码 相比之下,孰优孰劣自不待言。——当然,更复杂的写法是用GetRows方法: - Sub GetStr3()
- Dim rst As New ADODB.Recordset
- Dim s()
- Dim i As Long, j As Long
- Dim k As String
- rst.Open "select * from myTable2 where 服务代码='10669967'", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
- s = rst.GetRows()
- For i = 0 To UBound(s, 2)’ UBound(s, 2)
- For j = 0 To UBound(s, 1)
- k = k & ":" & s(j, i)
- Next
- Next
- Debug.Print k
- End Sub
复制代码
这是因为GetRows返回的是一个二维数组。二维数组?这是神马啊?——估计有人会问了。这里先简单普及下吧,有时间再发一些扫盲贴: 数组下限是默认从0开始的。二维常数数组,通常是像下面这样写的: - Sub test()
- Dim arr(1, 2)’定义一个2列×3行的数组。如果希望从1开始,则改为:arr(1 to 2,1 to 3)
- arr(0, 0) = "1"
- arr(0, 1) = "2"
- arr(0, 2) = "3"
- arr(1, 0) = "4"
- arr(1, 1) = "5"
- arr(1, 2) = "6"
- Debug.Print “行数上限是:” & UBound(arr, 2) & ”列数下限是:” & LBound(arr,1)
- ‘最后一个参数表示的是维度。
- End Sub
复制代码当然,还有三维、四维数组等等,例如arr(0 to 1, 2 to 4, 3 to 5),但在Access里应用不太广泛。数组普及至此结束,下面回来看看GetRows的参数: 第一个参数:需要获取的行数,默认为全部行数。 第二个参数:起始行标, 第三个参数:列标。 第二、三个参数下标均从0开始,可以理解吗? 最后,我们来点更有意思的:保存记录集和读取本地记录集文件。先贴代码: - Sub SaveRecord()
- Dim rst As New ADODB.Recordset
- rst.Open "select * from mytable where 违规月份='1月'", CurrentProject.Connection, adOpenKeyset, adLockOptimistic, adCmdText
- rst.Save "E:\myReordset.xml", adPersistXML
- rst.Close
- Set rst = Nothing
- End Sub
复制代码就这么几句,一个记录集就以XML格式保存在E盘了。XML比较直观,用记事本或者IE浏览器就能打开。是不是觉得安全性太低?,那我们改为ADTG格式试试: - rst.Save "E:\myReordset.adtg", adPersistADTG
复制代码还能用记事本打开吗?要不,看看Access能不能导入?好像也没有这个格式…是不是有种锁门准备出去时才发现钥匙落在房间里面的感觉呢?不过这次我们不用请锁匠,用ADO来读取就可以了。 - Sub ReadRecord()
- Dim rst As New ADODB.Recordset
- rst.Open "E:\myReordset.ADTG", , adOpenKeyset, adLockOptimistic, adCmdText
- Do Until rst.EOF
- Debug.Print rst(3)
- rst.MoveNext
- Loop
- End Sub
复制代码跟前面比较,发现什么了吗? 保存记录集时仍需数据连接参数,但读取时却不再需要了,这是最大的不同。另外,最后一个参数为可选参数,可填可不填。 当然,Recordset里还有很多有趣的属性,但在Access里不是很常用,这里便稍稍提一下,有兴趣的版友可以自行研究一下。 1、用AbsolutePosition属性用于显示当前记录的光标位置,请参考盗梦的实例。 2、用PageSize和PageCount属性来分页,这常常应用于网页中。由于Access缺少Table类控件,我也不建议这样做,不过还是做了个例子供大家参考。 3、用Filter属性来筛选记录集的一个子集。这个也应用很少,因为这个子集既然可以能够通过条件来筛选,那么,何不在开始时就设置条件呢? ADO讲解到此暂告一个段落,后面如果不太忙的话,或许会再谈谈流文件(stream)。
【新手入门】之一:If分支语句
【新手入门】之二:分支语句总结
【新手入门】之三:循环语句For
【新手入门】之四:循环语句Do和死循环
【新手入门】之五:公共变量与传址过程、传值过程
【新手入门】之六:“悲欢离合总无情”——浅谈Split和Join
【新手入门】之七:嵌套与并列——再谈If流程问题
【新手入门】之八:“连就连”——浅谈“&”和“+”连接符的区别
【新手入门】之九:从百钱百鸡谈起——浅谈“规划求解”兼答lingjiang问
【新手入门】之十:书到用时方恨少——自定义菜单(Access 2003)的制作
【新手入门】之十一:浅谈ADO之序言
【新手入门】之十二:浅谈ADO之Connection
【新手入门】之十三:浅谈ADO之Conmmand(上)
【新手入门】之十四:浅谈ADO之Command(下)
【新手入门】之十五:浅谈ADO之Recordset(上)
【新手入门】之十六:浅谈ADO之Recordset(下)
【新手入门】之十七:浅谈列表框的使用
【新手入门】之十八:双击列表框修改数据
【新手入门】之十九:从“书与女友恕不外借”谈起——浅谈“Bookmark”的使用
【新手入门】之二十:“书与书签”——bookmark属性答疑
【新手入门】之二十一:记录集的“凌迟”——逐条导出记录集
【新手进阶】之一:基础算法(一)
【新手进阶】之二:基础算法(二)
【新手进阶】之三:基础算法(三)
【新手进阶】之四:基础算法(四)
【新手进阶】之五:排序搜索(一)
【新手进阶】之六:排序搜索(二)
【新手进阶】之七:递归算法
【新手进阶】之八:冒泡排序
【新手进阶】之九:浅谈不绑定数据源操作记录
【新手进阶】之十:工作日的计算
【新手进阶】之十一:“庖丁解牛”和“纪昌学射”——浅谈表格式文本数据的导入
【新手进阶】之十二:从四脚腾空的奔马谈起——原来界面可以这样设计
【新手进阶】之十三:Outlook风格导航界面
【新手进阶】之十四:仓库管理系统
|