EXCEL VBA操作ACCESS数据库,操作表(创建、修改、删除),ADO的OpenSchema方法,获取所有表名【扩展篇】

文摘   教育   2024-11-03 23:10   江苏  

关于本公众号】了解一下,欢迎关注谢谢!

快速浏览

实用案例

|日期控件||简单的收发存||收费管理系(Access改进版)|

|电子发票管理助手||电子发票登记系统(Access版)|

|文件合并||表格拆分||审计凭证抽查底稿|

|中医诊所收费系统(Excel版)||中医诊所收费系统(Access版)||银行对账单自动勾对|

|印章使用登记系统|

收费使用项目

|财务管理系统||工资薪金和年终奖个税筹划||新税法下工资表模版|

内容提要

  • SQL语句操作表(CREATE TABLE创建表、ALTER TABLE修改表结构、DROP TABLE删除表)
大家好,我是冷水泡茶,前段时间,我们分享了:

EXCEL VBA操作ACCESS数据库,实现增删改查【基础篇】(免费)!

EXCEL VBA操作ACCESS数据库,获取表头字段,SQL查询语句自定义函数【提高篇】

今天我们继续分享余下内容:SQL语句操作表
在“基础篇”中,我们手动创建了一个表“tb员工”,但有时候手工创建太麻烦,或者不可能,比如你这个数据库已经给了客户,你不可能再操作到,但客户自己也不会操作,这时候,我们根据一定的规则,使用代码创建数据库表就显得非常重要,必须要搞定。
我们前面也分享过类似的内容:

Excel VBA 操作Access数据库/根据excel表中储存的字段信息创建数据库表

Excel VBA【数据库】数据迁移:MySql数据库批量创建表、批量导入数据

创建Access数据库表,使用SQL语句,Create Table令,基本SQL语句格式是:
CREATE TABLE 表名 (字段1 字段类型,字段类型 )
我们创建一个“tb销售”表:
sql = "Create table tb销售 " _    & "(ID AUTOINCREMENT primary key,日期 Date," _    & "销售单号 text(255),产品名称 text(255)," _    & "数量 double,单价 double,金额 double," _    & "业务员 text(255),备注 text(255))"
再使用我们上期分享的自定义函数ExecuteSQL就可以了。
我们执行一次,成功创建一个tb销售”表,但如果我们重复执行,则会报错:

出错原因很简单,不能创建同名的表,要避免这样的报错,简单处理的话,我们加一句“On Error Resume Next”,也可以预先检查一下是否存在“tb销售”表,如果不存在我们才创建,如果存在的话,我们就退出程序。我们可以定义一个自定义函数IsTableExists,用来检查指定名称的数据库表是否存在,通过以下语句查询所有表信息到记录集对象:
'//查询表信息 Set rs = conn.OpenSchema(20)
然后再遍历记录集对象,与指定表名比较,如果相等,则存在此表,如果遍历结束仍然没有相等的表名,则不存在此表。
我们可能还需要知道数据库中有哪些表,我们再定义一个自定义函数,getAllTables,取得一个数据库中所有的表到一个数组,同样的,我们使用OpenSchema方法取得所有表名到记录集对象rs,然后循环rs,把表名逐一存入数组。在我们前期分享的案例【有了这款小工具,轻松备份ACCESS数据库数据:批量导出ACCESS数据库表到EXCEL表】中就有类似用法。
有时候,我们需要对已创建的表进行修改,我们可以直接打开数据库进行修改,也可以通过SQL语句来实现。
修改表字段的数据类型,比如我们要把tb销售表中的“日期”字段修改短文本,50个字符长度:
'// 日期修改为文本sql = " ALTER TABLE tb销售 ALTER COLUMN 日期 TEXT(50"
再把日期修改回来,仍为日期类型:
'// 日期修改为日期类型sql = " ALTER TABLE tb销售 ALTER COLUMN 日期 Date "
添加字段,比如我们添加一个“销售类型”字段:
'// 添加字段sql = " ALTER TABLE tb销售 ADD " & fieldName & " TEXT(10) "
删除字段,我们再把添加的“销售类型”删除:
'// 删除字段sql = " ALTER TABLE tb销售 DROP " & fieldName
前面我们通过Create Table命令来创建表,如果我们根据已有表来创建,可以用“Select Into”语句来创建
sql = "select * into tb员工bak from tb员工"
如果我们不需要原表数据,只要表结构,我们添加一个条件“Where False”:
sql = "select * into tb员工bak from tb员工 where false"
也可以指定字段:
sql = "select 姓名,年龄 into tb员工bak from tb员工"
删除表,我们把刚刚创建的tb员工bak表删除:
sql = "DROP TABLE " & tbl

完整代码详见当天另一条推文!

后记

1、一般情况下,我们设置好数据库,不会经常去修改它,换言之,我们应该在一开始就整体规划好各种表的结构,尽量不要后期再改来改去,容易引起不必要的麻烦。

2、有一些比较危险的操作,比如删除字段、删除表,应该谨慎,要做好数据备份,以免造成严重后果。

好,今天就到这里,我们下期再会!


~~~~~~End~~~~~~

安利小店
安利的牙膏非常不错,用了以后就不想再用其他的了;洗洁精洗衣液也是日常必备,用过都说好!

合谷医疗
合谷医疗专攻各种疑难杂症,尤其擅长抑郁症焦虑失眠儿童神经发育异常多动症自闭孤独症腰颈椎疾病治疗,可谓神乎其技!体验过的直呼早点来就好了

喜欢就点个、点在看留言评论、分享一下呗!感谢支持!

案例文件分享说明

  • 案例文件可免费分享,但需符合以下要求:

  • 关注点赞点在看点...留言,方便的话分享一下就完美啦!如果不便走上面的“流程”,请打赏,万分感谢!

  • 请添加上方我的合谷医疗企业微信,案例文件通过微信发送。如有定制需求,亦可通过微信联系。

  • Excel问题,请在文章下面留言讨论!或者加入我的付费交流群提问

VBA编程实战
Excel应用案例、Excel VBA、公式函数使用技巧分享,思路解读...... 这里有鲜活案例、实用的技巧......
 最新文章