学以致用——Excel连接Oracle生成iKB报告——Part1(使用VBA从数据库提取汇总数据)
来源:互联网 发布:linux c服务器端开发 编辑:程序博客网 时间:2024/05/20 06:56
iKB程序开发出来了,用的很好,很舒服。
用来管理自己的知识库是个非常好的工具,小到一个生字、单词,大到一本书,随便往里装。随意增删改查,都是因为底层使用了强大的Oracle数据库。
那么,有没有办法生成一个报告,告诉我每天更新了多少词条,词条总量等汇总数据呢。
这不,学习数据分析的时候,有个很好的例子出现了,即:Excel报告自动化。
原示例用Excel连接Access,速度明显比Oracle慢。还是自己写的代码看着最舒服,哈哈。
分享代码:
Sub initialize()'声明定义VBA语句中需要使用到的各个变量类型Dim AdoConn As New ADODB.Connection '定义变量AdoConn为连接数据库对象(ADODB是数据库访问组件,Connection是其中的一个对象),用于实现连接数据库连接等操作Dim MyData As String '定义变量MyData为字符串型变量,用于数据库路径赋值Dim D1 As Date '定义D1为日期型变量,用于业务日期赋值Dim D2 As Date '定义D2为日期型变量,用于业务日期赋值Dim i As Integer '定义i为循环变量,用于初始化时基于数据库数据循环赋值'定义SQL语句所需要的4个字符串变量Dim strSQL1 As StringDim strSQL2 As StringDim strSQL3 As StringDim strSQL4 As Stringi = 2 '表头占用一行,数据从第二行开始MyData = ThisWorkbook.Path & "\业务数据库.accdb" '制定Access数据库文件完整路径'需在工程中手动添加引用:工具-引用-Microsoft ActiveX Data Objects 2.8 'Library,Microsoft ActiveX Data Objects Recordset 2.8 Library'建立数据库连接'AdoConn.Open ("provider=msdaora; data source=orcl; user id=C##SCOTT;password=scott") 'Oracle 12.1.0.2.0-64 版本+Excel2016专业增强版,使用此种连接方式不可行AdoConn.Open ("provider=OraOLEDB.Oracle.1; data source=orcl; user id=C##SCOTT;password=scott")'从第二行开始循环赋值Do While ActiveSheet.Cells(i, "B").Value <> "" D1 = ActiveSheet.Cells(i, "B") D2 = D1 + 1 '设置SQL查询语句 strSQL1 = "SELECT count(termid) FROM ikb" '当日词条总数 strSQL2 = "SELECT count(distinct phase) FROM ikb WHERE date_updated < to_date('" & D2 & "') AND date_updated >= to_date('" & D1 & "')" 'Phase词条数(去重不为空,下同) strSQL3 = "SELECT count(distinct type) FROM ikb WHERE date_updated < to_date('" & D2 & "') AND date_updated >= to_date('" & D1 & "')" 'type词条数 strSQL4 = "SELECT count(distinct subtype) FROM ikb WHERE date_updated < to_date('" & D2 & "') AND date_updated >= to_date('" & D1 & "')" 'subtype词条数 strSQL5 = "SELECT count(termid) FROM ikb WHERE date_updated < to_date('" & D2 & "') AND date_updated >= to_date('" & D1 & "')" '更新日期为该日期的词条总数 strSQL6 = "SELECT count(distinct en) FROM ikb WHERE date_updated < to_date('" & D2 & "') AND date_updated >= to_date('" & D1 & "')" 'EN词条数 strSQL7 = "SELECT count(distinct cn) FROM ikb WHERE date_updated < to_date('" & D2 & "') AND date_updated >= to_date('" & D1 & "')" 'CN词条数 strSQL8 = "SELECT count(distinct jp) FROM ikb WHERE date_updated < to_date('" & D2 & "') AND date_updated >= to_date('" & D1 & "')" 'JP词条数 strSQL9 = "SELECT count(distinct ed) FROM ikb WHERE date_updated < to_date('" & D2 & "') AND date_updated >= to_date('" & D1 & "')" 'ed词条数 strSQL10 = "SELECT count(distinct cnd) FROM ikb WHERE date_updated < to_date('" & D2 & "') AND date_updated >= to_date('" & D1 & "')" 'cnd词条数 strSQL11 = "SELECT count(distinct jpd) FROM ikb WHERE date_updated < to_date('" & D2 & "') AND date_updated >= to_date('" & D1 & "')" 'jpd词条数 '执行查询并赋值 ActiveSheet.Cells(i, 12).CopyFromRecordset AdoConn.Execute(strSQL1) ActiveSheet.Cells(i, 3).CopyFromRecordset AdoConn.Execute(strSQL2) ActiveSheet.Cells(i, 4).CopyFromRecordset AdoConn.Execute(strSQL3) ActiveSheet.Cells(i, 5).CopyFromRecordset AdoConn.Execute(strSQL4) ActiveSheet.Cells(i, 13).CopyFromRecordset AdoConn.Execute(strSQL5) ActiveSheet.Cells(i, 6).CopyFromRecordset AdoConn.Execute(strSQL6) ActiveSheet.Cells(i, 7).CopyFromRecordset AdoConn.Execute(strSQL7) ActiveSheet.Cells(i, 8).CopyFromRecordset AdoConn.Execute(strSQL8) ActiveSheet.Cells(i, 9).CopyFromRecordset AdoConn.Execute(strSQL9) ActiveSheet.Cells(i, 10).CopyFromRecordset AdoConn.Execute(strSQL10) ActiveSheet.Cells(i, 11).CopyFromRecordset AdoConn.Execute(strSQL11) i = i + 1LoopAdoConn.CloseSet AdoConn = NothingMsgBox "数据提取完毕!"End Sub
提取结果:
阅读全文
1 0
- 学以致用——Excel连接Oracle生成iKB报告——Part1(使用VBA从数据库提取汇总数据)
- 学以致用——ikb知识库英文词条词频分析-Part1-数据提取(VBA)
- 学以致用——Excel连接Oracle生成iKB报告——Part3(功能优化)
- 学以致用——Excel连接Oracle生成iKB报告——Part2(Excel日报自动化的数据转换及用户界面)
- 学以致用——ikb知识库英文词条词频分析-Part3-使用Excel制作高频词标签云(VBA)
- 学以致用——将iMovie数据批量添加到iKb数据库中
- 学以致用——iKB知识库日报(改进版)
- 学以致用——ikb知识库英文词条词频分析-Part2-大数据中高频词分析(Spotfire)
- 学以致用——英文姓名高词频分析-使用Excel制作高频词标签云(VBA)
- Excel在统计分析中的应用—第三章—数据库统计函数与数据透视表-Part1-(数据查询与筛选、分类汇总)
- Excel VBA 连接Oracle数据库
- 学以致用——初次使用GraphLab Create分析数据
- 数据分析(入门篇)-第四章-让报告自动化(VBA)-Part1(Excel报告自动化)
- Excel VBA简单使用——数据缺失处理
- 【vba】——整合excel数据
- 以实例说明如何使用C#从数据库中提取数据,按要求自动生成定制的Excel表格
- 以实例说明如何使用C#从数据库中提取数据,按要求自动生成定制的Excel表格
- 以实例说明如何使用C#从数据库中提取数据,按要求自动生成定制的Excel表格?
- git教程
- java写的二叉搜索树(生成和前序遍历)
- UVA540Team_Queue
- nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
- 【死磕Java并发】-----J.U.C之Java并发容器:ConcurrentSkipListMap
- 学以致用——Excel连接Oracle生成iKB报告——Part1(使用VBA从数据库提取汇总数据)
- 最长上升子序列[模板]
- 顺序队列求解迷宫(最优解)
- 多情况下的边界塌陷问题
- opencv学习笔记(1)——读取路径显示图片和保存jpg图片
- linux vim文本编辑器
- Android 手势 正则匹配图片
- Windows中,为开启了BitLocker的磁盘添加右键锁定菜单
- Java语言基础(八)