使用VBA创建Access数据表
导读:
本期介绍如何在Access数据库中创建一张空数据表。下期将介绍如何将工作表中的数据存入数据库对应的表中,随后还将介绍如何从数据库的表中取出数据输出到Excel工作表中,以及如何在导入一个文本文件时(如信贷台账.csv),自动建立数据库,创建表,并将记录导入到数据库表中,完成Excel与Access的完美交互。
演示:
在下面的演示中,运行代码后,你将看到,在数据库中,创建了一张名为的空表,有4个字段。
代码:
Code:
Option Explicit
'需手动在VBE窗口,工具-引用 Microsoft ActiveX Data Objects 2.X Library
'声明全局变量cn
Public cn As ADODB.Connection
Public AccessDb As String '带扩展名的数据库完整路径
'****************************
'file:CreateAccTable
'author:杨开科
'fun:在Acc数据库中建表,如果存在,则删除重建
'指定带路径及扩展名的数据库完整路径,表名,带字段属性的字段名字符串
'也可在工作表或窗体中指定,而不是直接在代码中指定,需重写代码
'date:2017/12/25
'Modified By:
'****************************
'假定当前工作簿同目录中,数据库已存在
'将光标放在此过程体内任意位置,按F5,即可建出表来
'如不存在,可手工建或参阅往期推送文章【使用VBA创建Access数据库】
Sub CreateAccTable()
'变量声明
Dim strDbPath As String '数据库路径
Dim strDbName As String '数据库文件名
Dim strTable As String '表名
Dim strFields As String '带字段属性的字段名字符串
'指定路径为当前正在运行代码的工作簿的完整路径,不包括末尾的分隔符和应用程序名称
strDbPath = ThisWorkbook.Path
'指定要连接的数据库文件名
strDbName = "基础台账.accdb"
'指定数据库,如"C:信贷台账.accdb"
AccessDb = strDbPath & "" & strDbName
'指定要创建的数据表名称
strTable = "工资表"
'指定字段名及相关属性
'例,建客户信息表, 可用primary key将客户码指定为主键
'strFields = "客户码 text(20) primary key, 姓名 text(10)"
strFields = "身份证号码 text(18),姓名 text(10), 账号 text(50), 金额 double"
'如果数据库已连接
If AccDbConnection Then
'调用CreateTab建表,传入带文件路径及扩展名的数据库名称,表名称,字段名及其属性
Call CreateTab(AccessDb, strTable, strFields)
End If
End Sub
'****************************
'file:AccDbConnection
'author:杨开科
'fun:数据库连接
'指定数据库路径,指定数据库文件名
'date:2017/12/25
'Modified By:
'****************************
Function AccDbConnection() As Boolean
'如果发生任何错误(如,数据库不存在),则跳转
On Error GoTo ErrHand:
'new一个连接对象
Set cn = New ADODB.Connection
'Provider指定要打开的数据库驱动程序,Data Source指定数据库在计算机上的物理路径
ErrHand:
'如果出错
If err.Number Then
MsgBox "数据库" & AccessDb & "连接失败!" & vbNewLine _
& "请确认该数据库是否存在。", 4096 + 16, "错误"
Set cn = Nothing
Else
AccDbConnection = True
End If
On Error GoTo 0
End Function
'****************************
'file:CreateTab
'author:杨开科
'fun:在Acc数据库中建表,存在则删除重建
'传入参数:3个,带路径及扩展名的数据库完整路径,表名,带字段属性的字段名字符串
'date:2017/12/25
'Modified By:
'****************************
Function CreateTab(AccessDb$, strTable$, strFields$)
'使用 New 来声明对象变量,在第一次引用该变量时将新建该对象的实例
Dim rs As New ADODB.Recordset
Dim SQL As String
Dim Cmd As New ADODB.Command
' If AccDbConnection Then
'--------------------判断是否存在同名数据表,有则删除
'使用ADO OpenSchema 方法返回 Recordset 对象给变量rs
'可获取到数据库中的表名
Set rs = cn.OpenSchema(adSchemaTables)
'首次打开一个 Recordset 时,当前记录指针将指向第一个记录,
'同时 BOF 和 EOF 属性为 False
'如果没有记录,BOF 和 EOF 属性为 True。
'EOF属性:如果当前记录的位置在最后的记录之后,则返回 true,否则返回 fasle。
Do While Not rs.EOF
'' 如果表存在(表名转换为小写),则删除它
If LCase(rs!TABLE_NAME) = LCase(strTable) Then
'' 构建删除表sql语句
SQL = "drop table " & strTable
Set Cmd.ActiveConnection = cn
'' 执行删除
With Cmd
.CommandText = SQL
.Execute , , adCmdText
End With
'' 如果找到同名表,删除后及时退出Do循环
Exit Do
End If
'' 把记录指针移动到下一条记录
rs.MoveNext
Loop
' '可选,如存在同名数据表,不删除
' Do While Not rs.EOF
' '如果表存在(表名转换为小写),则删除它
' If LCase(rs!TABLE_NAME) = LCase(strTable) Then
'
' MsgBox "数据表已存在!", vbOKOnly + vbInformation, "创建数据表"
' GoTo Line
' '退出Function
' Exit Function
' End If
' '把记录指针移动到下一条记录
' rs.MoveNext
' Loop
'-----------------------建表
Set Cmd.ActiveConnection = cn
'使用CREATE TABLE 构造sql建表语句
SQL = "CREATE TABLE " & strTable & " (" & strFields & ")"
' ID autoincrement(1,1)
'使用Execute方法执行建表语句
With Cmd
.CommandText = SQL
.Execute , , adCmdText
End With
MsgBox "数据表创建成功!", vbOKOnly + vbInformation, "创建数据表"
'----------------关闭,释放对象变量
Line:
rs.Close: cn.Close
Set rs = Nothing
Set cn = Nothing
Set Cmd = Nothing
End Function
附件及源码下载:
此文已同步至【知嗒】知识号【Excel精英之家】,相关附件可下载安装【知嗒】app应用,注册一个账号,搜索并关注【Excel精英之家】,加群【Excel精英之家】下载。
说明:
【知嗒】知识号【Excel精英之家】受限较少,一天可以推送多篇文章,从文章数量看,要比微信公众号多一些,喜欢的朋友,可留意【知嗒】知识号【Excel精英之家】。
如需反馈,或有更好的解决方案,请【写留言】。
- OTL技术应用
- 网页中显示xml,直接显示xml格式的文件
- 【编程题】Java编程题一(10道)
- 【学习笔记】springboot教程(1)第一个demo
- Hyperledger Fabric 积分代币上链方案
- MySQL中的事务和锁简单测试(r10笔记第46天)
- 数据库无响应问题的紧急处理和分析 (r10笔记第42天)
- 【转载】记Golang数据库查询封装的坑
- Golang 基本语法学习笔记之流程控制
- Go 语言的演化历程
- JS 评分五角星随鼠标移动显示
- Golang标准库学习——buffio包 ---转
- 【Go 语言社区】Go语言条件变量的两个例子
- mysqlimport导入报错的排查(r10笔记第58天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux中没有rc.local文件的完美解决方法
- 详解linux lcd驱动编写
- Linux下安装telnet的方法
- Linux 安装二进制MySQL 及 破解MySQL密码的方法
- Linux创建进程达到65535的方法
- SSH 上传文件及文件夹到linux服务器的方法
- apache tika检测文件是否损坏的方法
- Linux下二进制编译安装MySql centos7的教程
- Linux 6 修改ssh默认远程端口号的操作步骤
- 基于python的Linux系统指定进程性能监控思路详解
- ubuntu下的虚拟环境中安装Django的操作方法
- 详解linux下umask的使用
- Linux下设置每天自动备份数据库的方法
- Linux常用命令之chmod修改文件权限777和754
- 解决CentOS 7升级Python到3.6.6后yum出错问题总结