前文已经介绍过数据库的增、删、改操作,这三个操作命令简单而且和MySQL等传统数据库并无二致,因此并未着重介绍。
然使用频率极高的查询操作,会稍有不同(展示方式稍有不同,MySQL直接在后台终端展示,Access直接在内存留存,需要载体存放),特别是对于第一次使用数据库的用户来讲,可能会比较抽象,故而将其单独成文。
在使用Access数据库之前,我们先看一下MySQL查询数据时的返回情况:
MySQL数据库是一个交互性的界面,而VBA没有交互性的环境,因此查询出的数据只能暂存内存中,称为查询集,然后读取查询集,将数据读取到某一文件中即可。
具体表示如下:
Sub 查询数据() Call 连接数据库 Dim sql As String sql = "Select * from 学生" '从学生表中取数,*代表所有字段 '与INSERT、ALTER、UPDATE等不同,SELECT直接从数据库中取数然后返回记录集(查询集),RecordSet对象。 Set rs = con.Execute(sql) '记录字段名称 Dim i As Integer For i = 0 To rs.Fields.Count - 1 Sheet1.Cells(1, i + 1) = rs.Fields(i).Name Next i '存储数据 Sheet1.Range("A2").CopyFromRecordset rs 'Excel单元格自动调整,以适应单元格内容大小 Sheet1.Columns.AutoFit Debug.Print "查询数据成功" Call 释放变量空间End Sub
公共过程
Tips:用于代码解耦。
Option Explicit Dim con As New ADODB.Connection Dim rs As ADODB.RecordsetSub 连接数据库() con.Open "Provider=microsoft.ace.oledb.12.0; data source=" & _ ThisWorkbook.Path & "\学生管理.accdb"End SubSub 操作数据库() Call 连接数据库 '数据库取数操作,详见下一标题 Call 清除工作表数据 Call 释放变量空间End SubSub 释放变量空间() con.Close Set con = Nothing rs.Close Set rs = NothingEnd SubSub 清除工作表数据() ActiveWorkbook.Sheets(1).Cells.ClearEnd Sub
查询语句
简单查询
SELECT 字段列表 FROM 表名
条件查询
SELECT 字段列表 FROM 表名 WHERE 条件
分组查询
SELECT 字段,聚合函数(字段列表) FROM 表名 Group By 字段
排序查询
SELECT 字段列表 FROM 表名 Order By 字段
跨表查询
内连接查询
WHERE
-> SELECT t1.字段, t2.字段 FROM table1 as t1, table2 as t2 where t1.字段=t2.字段
INNER JOIN
-> SELECT t1.字段, t2.字段 FROM table1 as t1 INNER JOIN table2 as t2 ON t1.字段=t2.字段
外连接查询
左连接 查询
SELECT t1.字段, t2.字段 FROM table1 as t1 LEFT JOIN table2 as t2 ON t1.字段=t2.字段
右连接查询
SELECT t1.字段, t2.字段 FROM table1 as t1 RIGHT JOIN table2 as t2 ON t1.字段=t2.字段
全连接查询
VBA并不支持,但是MySQL等常规数据库支持,就是笛卡尔积,可自行百度。
Sub 插入数据() Call 连接数据库 Dim sql As String '在此处输入"SQL查询语句"' con.Execute (sql) Debug.Print "插入数据成功" Call 释放变量空间End Sub
后面,我们就针对增删改查进行实例化操作。
对未来最大的慷慨是将一切都献给现在。