从今天开始,我们将进入ADO SQL操作数据库的这一系列,今天先来做一个简单的数据查询,主要是先熟悉数据库的连接操作。
案例:
假定表格中的“数据库”工作表是我们要查询的表格(我们暂且将这个表格当成数据库),现在我们要通过SQL查询语句将'数据库'表中的所有记录都提取到'数据库查询结果'表中。
见下图:
代码运行前,数据库查询结果表中是空的:
代码运行后,数据库查询结果表中将数据库表中的所有记录都提取到数据库查询结果表中了
代码部分:
相关知识点:
引用ADO组件,同字典的引用一样:工具-->引用-->找到系统中的Microsoft ActiveX Data Objects (...) Library 最高版本打勾即引用成功。
创建连接对象:
可以如本案例代码中的写法:
Dim cnn As ADODB.Connection '连接对象变量
Set cnn = New ADODB.Connection '创建对象,保存到变量中
也可以一步到位:
Dim cnn As New ADODB.Connection '这一句同上两句效果一样
连接数据库:
连接数据库的写法根据数据库类型不同因而会出现连接语句的各不相同,但是本身数据库连接的写法也有两种(且根据Office版本不同,要选择对应的连接语句)
我们今天就只看连接Excel的几种不同写法
03版Office以后版本
3.1)
With cnn '直接操作连接对象
'给cnn的Provider属性赋值(连接指令)
.Provider = 'Microsoft.Ace.Oledb.12.0;Extended Properties=Excel 12.0'
.Open ThisWorkbook.FullName '给cnn的Open方法指定文件路径
End With
3.2)
Dim strCon As String '定义一个连接字符串
strCon = 'Provider=Microsoft.Ace.Oledb.12.0;Extended Properties=Excel 12.0;Data Source=' & ThisWorkbook.FullName '对连接字符串进行赋值
cnn.Open strCon '用连接对象打开连接字符串
03版Office以前版本
同03版本Office以后的版本一样,也有两种形式,只是关键字有一些变化,这里只列举其中一种,另一种更改对应关键字即可
3.3)
With cnn
.Provider = 'Microsoft.Jet.Oledb.4.0;Extended Properties=Excel 4.0'
.Open ThisWorkbook.FullName
End With
sql查询语句并将该查询语句交给ADO三大中心任意一中心进行执行,一般情况下查询获取记录集建议用Recordset对象来执行sql指令,因为我们需要获取数据,只有Recordset.Open方法执行的SQL命令所获取的记录集我们是可以对其进行处理的,其他的方法执行的sql命令对记录集我们只能看,不能做其他的处理。
完成数据查询的操作,我们需要做如下工作:
Dim sql As String '定义sql变量用来存储sql命令字符串
Dim rst As New ADODB.Recordset '定义记录集对象变量
sql = 'select * from [数据库$]' '给sql变量赋值(即写命令语句)
'用rst.Open的方法执行sql命令
rst.Open sql, cnn, adOpenKeyset, adLockOptimistic
rst.Open方法的解释:
第一参数:执行的命令语句
第二参数:连接对象
第三参数:游标类型,一般根据自动提示选择第三个记录即可,或者直接写数字3
第四参数:锁定类型,一般根据自动提示选择第二个记录即可,或者直接写数字2
将获取到的记录集返回到表格中
返回分两步:
第一步:标题
For i = 0 To rst.Fields.Count - 1 '循环字段,取标题
.Cells(1, i 1).Value = rst.Fields(i).Name
Next i
第二步:记录
Range('A2').CopyFromRecordset rst '将记录集内容copy到单元格中
返回到表格还是比较简单的,一般以上代码时固定套路,记住就可以了。
6.关闭记录集对象、连接对象,清空对象变量
rst.Close: Set rst = Nothing
cnn.Close: Set cnn = Nothing
这样就完成了从打开数据库连接到完成取数再关闭数据库连接的整个过程.
这是VBA中较为难懂的部分内容,光'连接字符串'我学了好久,每次写都还很难记住,不过对工作表的数据进行操作老师一般不建议使用ADO SQL的技术,因为我们一般不能保证工作表数据的规范性,而SQL是专门操作数据库的一门语言,对数据结构的要求比较高,所以一般情况下我们用它来对数据库进行操作,在编一些小系统的时候,用它来对操作界面和数据库做数据交互的时候用的比较多。单纯在表格中对数据进行的处理还是建议使用数组和字典的方法较好。
穆德 2021-02-18
topphoenix 2021-01-25
犀牛望月 2020-01-08
蛛蛛妹 2022-10-01
沙场漫步 2020-04-06
阳雨 2023-01-04
我心飞翔 2022-12-13
大海无边 2021-06-17
碧浪晴空 2021-01-09
阳雨 2020-12-02