VBA实例:读取/写入Access数据库

文摘   2024-08-24 13:06   四川  
大家好,这是Excel小火箭的第48次分享,若有不妥之处,欢迎批评指正。

最近黑神话·悟空真是太出圈了,恍然间想起了阿达和小马儿。阿达是我刚毕业时的室友,Xbox十级玩家,每每有新游戏出来,总是在客厅通宵通宵的闯关,不知疲倦,也不知此时他又身在何方?

小马儿是阿达跳槽之后搬进来的,同样做为游戏达人,通宵通宵刷魔兽世界的副本也是常态。那时候我喜欢玩3C,每到周末雷打不动要去网吧玩几把,用小马儿的话说,网吧才有C啦C啦的游戏氛围

宿舍距离网吧大概1KM,我们总是在乌漆嘛黑的凌晨,借着偶尔路过的汽车灯光夜行,有一次我们发现前方有一个落单的赶路人,我打赌说如果我们跑起来,前面的人肯定会飞奔,果然,直到他飞身闯入了旁边的小区,还能听到我们放肆的大笑~

小马儿后来去了重庆,也不知他是否还记得这个好笑的夜,但我想他一定不会忘记因为魔兽世界在火车上结识的那个姑娘,哈哈哈

游戏总是让人着谜,记忆的碎片也是。所以,今天想和大家探讨下VBA和Access数据的互动,毕竟数据库永远不会忘。

01
Access数据库


首先,你得安装了Access,Office全家桶自带,在数据存储和读取方面,和Excel完全不在一个量级,但我们今天只是将它做为数据存储和读取做为实例和大家一起研究研究。


本次示例场景定义为:记录用户操作日志,表头包含用户名,用户日志,录入日期。


你可以在Access中新建表并录入表头信息,也可以在Excel中设计好表头后直接导入,至此数据库准备完成。

02
与VBA的互动

回到VBA中,我们只需声明数据库,打开数据库,通过SQL命令读取或写入数据库即可。

▲ 回复"小火箭",获取源代码


按照惯例,附上源码。


Sub btn_Rocket2Access()'// VBA写入Access数据示例'// 2024-08-24 By Sdx孙大侠//公众号: Excel小火箭
Dim Cnn As Object Dim SQL As String, dbPath As String, str As String Dim ws As Worksheet Dim i As Double Dim UserName As String, UserAction As String, Userdate As Date UserName = Environ("UserName") '//获取用户名 UserAction = "操作了小火箭" '//获取操作记录 Userdate = Now()
Set Cnn = CreateObject("adodb.connection") dbPath = ThisWorkbook.Path & "\userlogs.accdb"
str = "'" & UserName & " '" & "," & "'" & UserAction & "'" & "," & "#" & Userdate & "#" '//值 SQL = "Insert into userLogs (UserName, UserActions, UserDate) VALUES (" & str & ")" With Cnn            .provider = "microsoft.ace.oledb.1.0"      '//打开数据库 .connectionstring = "data source=" & dbPath .Open .Execute (SQL) .Close End With
Set Cnn = Nothing End Sub
Sub btn_Access2Rocket()'// VBA读取Access数据示例'// 2024-08-24 By Sdx孙大侠//公众号: Excel小火箭
Dim Cnn As Object, Rst As Object Dim SQL As String, dbPath As String, str As String Dim ws As Worksheet Dim i As Double
Set Cnn = CreateObject("adodb.connection") Set Rst = CreateObject("ADODB.Recordset") dbPath = ThisWorkbook.Path & "\userlogs.accdb" With Cnn        .provider = "microsoft.ace.oledb.1.0"      '//打开数据库 .connectionstring = "data source=" & dbPath .Open End With SQL = "select * from userlogs " Set Rst = Cnn.Execute(SQL) Set ws = ActiveWorkbook.Worksheets(1) With ws For i = 1 To Rst.Fields.Count .Cells(1, i) = Rst.Fields(i - 1).Name Next .Range("a2").CopyFromRecordset Rst End With Cnn.Close
Set Rst = Nothing Set Cnn = Nothing End Sub

▲ 回复"小火箭",获取源代码


03
常用SQL语句

数据库真是太强大了,今天只是和大家一起探讨下与VBA的基础互动,附上一些SQL基本语句,供诸位参考。

插入数据 INSERT INTO 表名[(列名1,…)]修改数据 UPDATE 表名SET 列名1=表达式1,列名2=表达式2,… WHERE 条件;删除数据 DELETE FROM 表名 WHERE 条件;查询数据 SELECT 字段 FROM 表名 WHERE 条件;数据排序 SELECT * FROM 表名 ORDER BY NO DESC;


希望本期文章对你有所启发,VBA源代码已同步上传,回复"源码"获取下载地址。


推荐阅读

VBA实例:自动关闭Msgbox

VBA实例:字典的详解与应用


-END-

客官都看到这儿了
记得点赞加关注哦
下次更新时间,周日21:35

Excel小火箭
一个专注于Excel技巧分享的公众号