[ADODB] Connection, Recordset 对象常用属性和方法
ADO是基于OLEDB接口的数据访问技术,主要有9个对象,本文只讲述常用的Connection和RecordSet
[Connection] 对象, 负责建立与数据源的连接
创建: Set cnn = CreateObject("ADODB.Connection")
常用属性:
- cnn.ConnectionString ;连接数据源的字符串,包含了连接数据源所需各种信息, 如<File Name>, <DB IP>, <DB Name>, <DB User>,<DB Password>,<Folder Path>
连接字符串的内容,依数据源种类不同会有所不同:
'1)连接Access数据库:
"PROVIDER=microsoft.jet.oledb.3.51;persist security info =false;data source=<FileName>;Jet OLEDB:Database Password=<DBPasswrod>"
'2)连接Oracle数据库:
"PROVIDER=MSDAORA.1;Password=<DBPasswrod>;User ID=<DBUser>;Data Source=<FileName>;Persist Security Info=True"
'3)连接VF的DBF库:
"PROVIDER=MSDASQL.1;Persist Security Info=False;Driver={Microsoft Visual FoXPro Driver};UID=<DBUser>;SourceDB=<FileName>;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;"
'4)连接SQL的数据库
"PROVIDER=MSDataShape;Data PROVIDER=MSDASQL;uid=<DBUser>;pwd=<DBPasswrod>;DRIVER=SQL Server;DATABASE=<DBName>;WSID=GQSOFT;SERVER=<DBIP>"
也可以简写为: "Provider=SQLOLEDB;Data Source=<DBIP>;DATABASE=<DBName>;UID=<DBUser>;pwd=<DBPasswrod>"
'5)连接Excel文档
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=<FileName>;Extended Properties='Excel 8.0;HDR=Yes;IME=1';"
'6)连接Text、CSV 文档
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=<FolderPath>;Extended Properties="text;HDR=Yes;FMT=Delimited(,);"
注:是逗号分隔的文本。注意DataSource是文件夹名
- cnn.ConnectionTimeout : 连接超时时间,默认15 秒
- cnn.State : 连接的状态
- cnn.CursorLocation : adUseNone——不使用游标服务;adUseClient——使用客户端游标;adUseServer——使用服务端游标
注:这是用来约定临时表的存放位置,使用客户端游标访问速度更快
- cnn.Provider : 返回连接数据源的名字
常用方法:
-cnn.Open : 建立数据源的物理连接
如:cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\txtfolder;Extended Properties="text;HDR=Yes;FMT=Delimited(,);"
-cnn.Close : 关闭连接
-cnn.OpenSchema : 建立数据源的信息,如查询数据源中所有表的名称
-cnn.Execute : 执行1个SQL查询
[RecordSet] 对象,
创建对象: Set rs = CreateObject("ADODB.Recordset")
主要方法与属性:
- rs.Open Sql, cnn, 0, 1 : 打开数据集
其中:SQL 是SQL的查询语句。cnn是查询要使用的连接,0是游标类型,1是游标锁定方式
游标类型是指,
'0 = adOpenForwardOnly (默认值)打开仅向前类型游标。
'3 = adOpenStatic 打开静态类型游标。
'1 = adOpenKeyset 打开键集类型游标。
'2 = adOpenDynamic 打开动态类型游标。
其中,0,3静态结果集,1,2是动态结果集,结果集更改变动所有用户可见
游标锁定方法是指
'1 = adLockReadOnly 默认只读锁定 — 不能改变数据。
'2 = adLockPessimistic 保守式锁定(逐个) — 在编辑时立即锁定数据源的记录。
'3 = adLockOptimistic 开放式锁定(逐个) — 只在调用 Update 方法时才锁定记录
'4 = adLockBatchOptimistic 开放式批更新 — 用于批更新模式(与立即更新模式相对)。
注:rs属性会根据游标类型,锁定方法不同而不同。 见后附对照表。
- rs.BOF :是否第一条纪录前边
- rs.EOF :是否最后一条纪录后边
- rs.RecordCount :记录集的行数
- rs.AddNew :新建一行记录
- rs.Update :保存当前行被修改的记录
- rs.Delete :删除当前行
- rs.Close :关闭记录集
- rs.Fields: Fields属于Recordset的一个默认集合,可以省略,以下写法都是省略了Fields
rs() '括号内可以是列名也可以是列的序号例如:rs("姓名")、rs(3) 都是可以的
rs(3).Name '返回列名
rs(3).Type '返回列的类型
rs(3).Value '返回当前行的值
rs.Fields.Count '返回列数
举例:不打开文件情况下,提取c:\excel\requests.xlsx文件pad工作表上的字段数据
----------------------------------------------------------
Set cnn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\excel\requests.xlsx;Extended Properties='Excel 8.0;HDR=Yes;IME=1';"
Sql = "select [申请单号],[提交人],[提交时间],[审批人1],[审批时间1]from [PAD$] "
rs.Open Sql, cnn, 0, 1
Do While Not rs.EOF
If sn <> rs("申请单号") Then
Sheet4.Cells(i, 1) = rs("申请单号")
Sheet4.Cells(i, 3) = rs("提交人")
Sheet4.Cells(i, 4) = rs("提交时间")
Sheet4.Cells(i, 5) = rs("审批人1")
Sheet4.Cells(i, 6) = rs("审批时间1")
sn = rs("申请单号")
i = i + 1
End If
rs.MoveNext
Loop
注:
1.SQL引用Excel数据源列名(即字段名)要中括号括起,工作表名后加$符号并中括号括起。
2.HDR=Yes情况下,数据表首行被认定rs的字段名,HDR=No情况下, RS的字段名会以F1,F2,F3 代表数据表第1,2,3列。
3.在SQL的查询语句中,可以使用SQL的函数对字段加工或处理。