当前位置: 首页 > news >正文

VBA数据库解决方案第二十二讲:根据工作表数据生成数据库中数据表

《VBA数据库解决方案》教程(版权10090845)是我推出的第二套教程,目前已经是第二版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作,教程第一版的修订内容主要是完成所有程序文件的32位和64位OFFICE系统测试。

这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:VBA数据库解决方案第二十二讲:根据工作表数据,生成数据库中新的数据表

【分享成果,随喜正能量】250 智者能容。越是睿智的人,越是胸怀宽广,大度能容。因为他洞明世事、练达人情,看得深、想得开、放得下,也因为他发现:“处世让一步为高,退步即进步的根本;待人宽一分是福,利人实利己的根基。。

第二十二讲 根据工作表数据,生成数据库中新的数据表

大家好今日我们继续讲解VBA数据库解决方案的第22讲:如何利用工作表数据,生成数据库新的数据表。在之前的讲解中我们讲了很多把数据从数据表中导出到工作表的方法,今日我们讲解如何把数据由工作表存储到数据库中的数据表。

为什么要有这样的操作呢?我们举个实例:如果您是一个部门的销售人员,每月的销售数据是一个EXCEL表格,如果可以把这些数据放到数据库中,这样会更方便的实现查找和统计。为什么要借助数据库呢?EXCEL不可以吗?当然,理论上是可以的,但实际不推荐。把数据保存在EXCEL中,容易误操作,而且当数据量大的时候,EXCEL的操作远比数据库操作要慢。这是我多年工作经验的体会。所以我们在学习的时候,该更新自己知识结构的要及时更新。比如有的朋友的EXCEL还是2003版本的甚至是2000版本的,还是建议你尽快的升级吧。

1 应用场景的具体分析

言归正传,我们还是研究如何实现上述的逆运算的过程。实例:在我的EXEL表格中有一份19年2月份的销售记录,我要新建立一个数据表保存它。EXCEL工作表内容如下截图:

导入的数据表名称为“19年销售情况”,下面我们看看如何能实现这个过程。

2 将工作表中的数据导入到数据表中的代码及代码解读

由于可能的方法很多,我要一个一个的给大家讲解,或许有的朋友会说,怎么不用那种方法啊?对的,你的方法也可以,或许我在后续的文章中会讲到你的方案,不要紧,先看我的思路,代码:

Sub mynz_22() '第22讲 如何利用工作表数据,生成数据库新的数据表

Dim cnADO As Object, rsADO As Object

Dim strPath As String, strSQL As String, strTable As String

Set cnADO = CreateObject("ADODB.Connection")

Set rsADO = CreateObject("ADODB.Recordset")

strPath = ThisWorkbook.Path & "\mydata2.accdb"

strTable = "19年销售情况"

cnADO.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath

Set rsADO = cnADO.OpenSchema(20, Array(Empty, Empty, strTable, Empty))

'如果存在这个数据表,那么删除

If Not rsADO.EOF Then

strSQL = "DROP TABLE " & strTable

cnADO.Execute strSQL

End If

'按工作表创建数据表

strSQL = "SELECT * INTO " & strTable _

& " FROM [Excel 12.0;Database=" _

& ThisWorkbook.FullName & ";].[" & ActiveSheet.Name & "$]"

cnADO.Execute strSQL

MsgBox "已经将工作表数据生成新数据表。", vbInformation, "数据表创建"

rsADO.Close

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

End Sub

代码截图:

代码解读:

1):Dim cnADO, rsADO As Object

Dim strPath, strSQL, strTable As String

Set cnADO = CreateObject("ADODB.Connection")

Set rsADO = CreateObject("ADODB.Recordset")

strPath = ThisWorkbook.Path & "\mydata2.accdb"

strTable = "19年销售情况"

cnADO.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath

Set rsADO = cnADO.OpenSchema(20, Array(Empty, Empty, strTable, Empty))

上述代码用于创建ADO对象和连接,不清楚的朋友要回过头看看我之前的讲解,这段代码其实是相对固定的,朋友可以作为固定的格式来利用,很多类似的地方都是如此的。

2 ):'如果存在这个数据表,那么删除

If Not rsADO.EOF Then

strSQL = "DROP TABLE " & strTable

cnADO.Execute strSQL

End If

这段代码我加了注释是如果存在这个数据表,那么删除,具体的解释我也不再多说,我之前都有详细的讲解

3 ):'按工作表创建数据表

strSQL = "SELECT * INTO " & strTable _

& " FROM [Excel 12.0;Database=" _

& ThisWorkbook.FullName & ";].[" & ActiveSheet.Name & "$]"

cnADO.Execute strSQL

SELECT INTO 语句:

SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。

SQL SELECT INTO 语法

①把所有的列插入新表:

SELECT * INTO new_table_name [IN externaldatabase] FROM old_tablename

②只把希望的列插入新表:

SELECT column_name(s) INTO new_table_name [IN externaldatabase] FROM old_tablename

4)rsADO.Close

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

上述代码用于关闭连接和释放内存。

下面我们看运行的结果:

今日内容回向:

1 如何把EXCEL数据备份到数据表中?

2 通过以前的学习你是否还有他的设想,可以实现把数据表中的数据备份到数据库的表中?

本讲内容参考程序文件:VBA与数据库操作(第一册).xlsm

我20多年的VBA实践经验,全部浓缩在下面的各个教程中:



http://www.dtcms.com/a/360976.html

相关文章:

  • 零售行业的 AI 革命:从用户画像到智能供应链,如何让 “精准营销” 不再是口号?
  • 百胜软件获邀出席第七届中国智慧零售大会,智能中台助力品牌零售数智变革
  • 百胜软件×OceanBase深度合作,赋能品牌零售数字化实践降本增效
  • leetcode 面试题17.19 消失的两个数字
  • Java学习笔记-反射(二)
  • 无公网IP,怎么实现远程调试与APP端api 接入?
  • 红楼梦 AI HTML 分析 - 好了歌
  • MySQL内置的各种单行函数
  • Kafka消息中间件安装配置
  • Ruoyi项目MyBatis升级MyBatis-Plus指南
  • sentinel异常处理机制
  • 2025机器人产业大洗牌:新兴初创企业的技术革命与崛起之路
  • 【Spring Cloud微服务】8.深度实战:微服务稳定性的守护神——Sentinel
  • Linux下usb设备驱动框架实现:定义核心结构体数据
  • 从Java全栈开发到微服务架构:一次真实的面试实录
  • leetcode算法刷题的第二十三天
  • GitLab 18.3 正式发布,更新多项 DevOps、CI/CD 功能【一】
  • Linux上perf工具的使用-基础采样
  • 云端虚拟云手机该如何进行使用?
  • 高并发场景下的热点数据处理:从预热到多级缓存的性能优化实践
  • 云手机和云游戏之间有着哪些区别?
  • 手机版碰一碰发视频源码搭建,技术实现与实操指南
  • 基于大数据的京东手机销售数据 可视化分析设计与开发03446原创的定制程序,java、PHP、python、C#小程序、文案全套、毕设程序定制、成品等
  • 【音视频】WebRTC QoS 概述
  • 云端虚拟手机:云手机的原理是什么?
  • 【科普向-第七篇】Git全家桶介绍:Git/Gitlab/GitHub/TortoiseGit/Sourcetree
  • 电动两轮车手机导航投屏方案调研报告
  • vscode翻译插件
  • hasOwnProperty是什么
  • Linux部署OSM本地服务测试环境