VBA与数据库——写个类操作ADO_读取表名
2023-03-20 15:40:26 时间
ADO的Connection对象有一个OpenSchema方法,能够获取数据库的很多信息,比如表的名称等信息、字段的名称等信息,具体可以查看SchemaEnum枚举类型。
在操作数据库的过程中,很多时候会需要得到一些数据库的信息,这个时候就可以使用OpenSchema,在CADO里面增加一个最基础的获取表的名称的函数:
Function GetTablesName(ret() As String) As Long
On Error GoTo errHandle
Dim rst As ADODB.Recordset
Set rst = AdoConn.OpenSchema(adSchemaTables)
Dim k As Long
Do Until rst.EOF
'过滤掉系统的一些表
If rst.Fields("TABLE_TYPE").Value = "TABLE" Then
ReDim Preserve ret(k) As String
ret(k) = rst.Fields("TABLE_NAME").Value
k = k + 1
End If
rst.MoveNext
Loop
rst.Close
Exit Function
errHandle:
StrErr = Err.Description
GetTablesName = RetCode.RetErr
End Function
上面的方法是通过循环读取Recordset的信息,再判断TABLE_TYPE,最后得到需要的表名,OpenSchema后面还有2个参数,再使用Restrictions进行一个简化处理:
Function GetTablesName(ret() As String) As Long
On Error GoTo errHandle
Dim rst As ADODB.Recordset
Dim Restrictions
Restrictions = Array(Empty, Empty, Empty, "TABLE")
Set rst = AdoConn.OpenSchema(adSchemaTables, Restrictions)
ReDim ret(rst.RecordCount - 1) As String
Dim k As Long
Do Until rst.EOF
ret(k) = rst.Fields("TABLE_NAME").Value
k = k + 1
rst.MoveNext
Loop
rst.Close
Exit Function
errHandle:
StrErr = Err.Description
GetTablesName = RetCode.RetErr
End Function
Restrictions参数的作用就是对Recordset的每一列设置一个筛选条件,TABLE_TYPE位于第4列,所以前面设置3个Empty。
这个函数可以很好的获取Access数据库的表名、Excel表格的Sheet名等,但sqlite数据库似乎不能够获取到,这可能是驱动程序的原因。
不过sqlite数据库可以使用其他方式来读取所需要的信息,并不一定要使用OpenSchema。
至于其他的数据库类型,因为个人较少使用,所以也没有去测试。
相关文章
- 使用navcat为mysql数据库创建用户并对特定数据库指定权限
- PostgreSQL 与 MySQL 相比,优势何在?
- PowerDesigner逆向工程导入MYSQL数据库总结
- 使用PD(PowerDesigner)图如何快速生成创建数据库表的SQL脚本并生成表在数据库
- 【统计学习方法】感知机对鸢尾花(iris)数据集进行二分类
- 【统计学习方法】K近邻对鸢尾花(iris)数据集进行多分类
- 【统计学习方法】朴素贝叶斯对鸢尾花(iris)数据集进行训练预测
- 【统计学习方法】线性可分支持向量机对鸢尾花(iris)数据集进行二分类
- 42 张图带你撸完 MySQL 优化 上
- 42 张图带你撸完 MySQL 优化 中
- 42 张图带你撸完 MySQL 优化 下
- redis中处理带有空格的key
- 认识零拷贝
- 基于redis的分布式锁
- 【文本分类】采用同义词的改进TF-IDF权重的文本分类
- 【nacos】本机电脑、服务器上如何安装配置nacos
- 阿里技术号强推:慢SQL治理分享 上
- 阿里技术号强推:慢SQL治理分享 下
- Fluent Mybatis 牛逼!做到代码逻辑和sql逻辑的合一
- SQL语法题合集(持续更新)