先交代下写此文的背景 其一,上次举办HUSA技术交流会时,有高人在台下踩场说我对开源的认识太肤浅了。被鄙视过后,一直想找机会好好学学。 其二,最近为了“蓝云

作者:iamlaosong

日常工作中需要查询各种数据,,而且不断变化,处理这些数据的人不是技术人员,不会连接数据库自己查询,通过下面的办法就可以让技术人员编辑好包含查询语句的excel文件,让管理人员自己输入条件取数了。

我的方法是编辑需要的SQL语句保存在单元格中,并在查询条件需要参数值的地方用问号“?”代替,再在其他单元格中保存查询条件所需的参数值,在“宏”中用参数值替换掉SQL语句中的问号,最后执行查询语句并将结果保存到excel表中。

相关数据的步骤:

引用

Microsoft

ActiviteX Data Objects 2.8 Library

2、建立读取数据的过程:

Public Sub get_data()

'根据工作表中的查询语句读取数据

On Error GoTo ErrMsg:

Dim cnn As Object, rst As Object

Dim name, stat, sqls, field As String

Dim pn(4), pm(4) As String

Dim i, j, kk, pmkk, lineno As Integer

Dim OraOpen As Boolean

Set cnn = CreateObject("ADODB.Connection")

Set rst = CreateObject("ADODB.Recordset")

sqls = "connect database"

cnn.Open "Provider=msdaora;Data Source=dl580;User Id=sxjkuser;Password=sxjkpasswd;"

OraOpen = True '成功执行后,数据库即被打开

If OraOpen Then lineno = [D65536].End(xlUp).Row Else lineno = 0

'行数

Application.Calculation = xlManual

For i = 3 To lineno

stat = Trim(Cells(i, 3))

If stat = "Y" Or stat = "y" Then

name = Cells(i, 2)

field = Cells(i, 4)

pn(1) = Cells(i, 5)

pm(1) = Cells(i, 6)

pn(2) = Cells(i, 7)

pm(2) = Cells(i, 8)

pn(3) = Cells(i, 9)

pm(3) = Cells(i, 10)

pn(4) = Cells(i, 11)

pm(4) = Cells(i, 12)

pmkk = Cells(i, 13)

sqls = Cells(i, 15)

'MsgBox sqls

For kk = 1 To pmkk '用于参数多次使用,如联合SQL语句中每个子句都需要日期参数

For j = 1 To 4

If pn(j) <> "" Then

sqls = Replace(sqls, "?", pm(j), 1, 1)

'MsgBox sqls

End If

Next j

Next kk

MsgBox sqls

Set rst = cnn.Execute(sqls)

sqls = "clear sheets"

maxrow = Sheets(name).UsedRange.Rows.Count

Sheets(name).Range("a2:" & field & maxrow).ClearContents

sqls = "CopyFromRecordset"

Sheets(name).Range("a2").CopyFromRecordset rst

Cells(i, 3) = "成功"

'MsgBox i

End If

Next i

'rst.Close

'Set rst = Nothing

cnn.Close

Set cnn = Nothing

Application.Calculation = xlAutomatic

'Sheets("分析").PivotTables("数据透视表1").PivotCache.Refresh

Worksheets("系统参数").Select

msg = MsgBox("数据读取完毕!", vbOKOnly, "iamlaosong")

Exit Sub

ErrMsg:

OraOpen = False

MsgBox sqls, vbCritical, "操作失败 ,请检查!"

End Sub

3、SQL语句实例

这是一个简单的语句:

SELECT * FROM zdgc_sn_sj_gfl t

WHERE t.CLCT_DATE = to_date('?', 'yyyy-mm-dd')

AND t.JSBZ = '1'

ORDER BY t.CITY, t.SSXS

这是一个复杂的语句:

select aa.zj_code,

aa.zj_mc,

aa.clct_date,

aa.sjzl,

aa.jyqsjzl,

nvl(bb.wgfsl, 0),

nvl(bb.jyqwgfsl, 0)

from (select b.ssxs,

b.zj_code,

b.zj_mc,

a.clct_date,

count(*) sjzl,

sum(case

when to_char(a.clct_time, 'hh24mi') <= '?' then

1

else

0

end) jyqsjzl

from tb_evt_mail_clct a, sncn_zd_jg b

where a.clct_bureau_org_code = b.zj_code

and a.time_limit_code <> '6'

and a.mail_kind_code <> '10401'

and a.addi_service_code <> '1'

and (a.rcv_area like '23%' or a.rcv_area like '24%')

group by b.ssxs, b.zj_code, b.zj_mc, a.clct_date) aa

left join (select b.ssxs,

b.zj_code,

b.zj_mc,

a.clct_date,

count(*) wgfsl,

sum(decode(jybz, 'b', 1, 0)) jyqwgfsl

from sncn_zd_jg b, zdgc_sn_sj_errfc a

where a.zj_code = b.zj_code

and a.jsbz = '1'

and a.jybz = 'b'

group by b.ssxs, b.zj_code, b.zj_mc, a.clct_date) bb on aa.ssxs =

bb.ssxs

and aa.zj_code =

bb.zj_code

and aa.clct_date =

bb.clct_date

where aa.clct_date = to_date('?', 'yyyy-mm-dd')

and aa.ssxs = '?'

order by aa.zj_code, aa.zj_mc

4、操作界面

这是一个:

这是另一个:

5、说明

1)使用者需要安装Oracle客户端并进行本地服务名配置(运行客户端程序Net Configuration Assistant配置,本例配置的服务名是DL580),实际就是配置tnsnames.ora文件。也可以安装简易oracle客户端,并用记事本修改tnsnames.ora文件,本例就是需要在该文件中增加如下内容(本例Oracle数据库服务器地址是10.178.10.197,SID是ORCL):

DL580 =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 10.178.10.197)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = orcl)

)

)

通过工作表保护使使用者只能修改参数值和状态,其他不能修改,防止破坏相关设置。

excel的ADO读取ORACLE,【VBA研究】利用ADO让普通人用excel读取oracle数据库表的通用办...相关推荐

  1. 【工具篇】利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档(转

    对于DBA或开发来说,如何规范化你的数据库表结构文档是灰常之重要的一件事情.但是当你的库,你的表排山倒海滴多的时候,你就会很头疼了. 推荐一款工具DBExportDoc V1.0 For MySQL( ...

  2. python 读取邮件内容_利用Python imaplib和email模块 读取邮件文本内容及附件内容...

    python使用imap接收邮件的过程探索 https://www.cnblogs.com/yhlx/archive/2013/03/22/2975817.html #! encoding:utf8 ...

  3. navicat查询oracle表结构,利用Navicat Premium导出数据库表结构信息至Excel的方法

    因为要编写设计文档,需要用到数据库表结构,想要在word文档中以二维表格的形式展示,故借助Excel形成二维表格样式,还是很方便的样子! 1.新建查询,并将以下SQL语句修改至需要 SELECT CO ...

  4. oracle vba 数组_vba 数据库目录

    利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档 对于DBA或开发来说,如何规范化你的数据库表结构文档是灰常之重要的一件事情.但是当你的库,你的表排山倒海滴多的时候,你 ...

  5. 如何创建最简单的 ABAP 数据库表,以及编码从数据库表中读取数据 (下)

    在本文的前续篇章:如何创建最简单的 ABAP 数据库表,以及编码从数据库表中读取数据 (上) 我们已经在系统里创建了两张数据库表 ZPERSON 和 ZMYORDERS, 并插入了对应的记录: 文章的 ...

  6. phpexecl保存mysql_【PHP】将数据库表保存为Excel(PHPExcel)

    今天有一个朋友问了我一个PHP下载数据库表单并保存为Excel的功能问题.下面我就将代码贴出来,大家可以看下.<?php public function exptable($name){ ven ...

  7. vba ado返回集合_利用ADO,实现同一文件夹下多个EXCEL工作表的数据汇总

    大家好,今天继续讲解<VBA数据库解决方案>,今日讲解的是第37讲,利用ADO,实现同一文件夹下多个EXCEL工作表的数据汇总.最近的内容实用性比较强,如今日的内容,只把需要汇总的EXCE ...

  8. vba 循环读取单元格_利用VBA打开顺序文件,并读取

    大家好,疫情施虐,国外各地更有爆发的迹象,但无论怎样,我们一定要坚信,疫情终将会过去,曙光一定会到来.后疫情时代将会是一个全新的世界,很多理念都将被打破,大多数人不会再享受体制内的保护,对于我们每个人 ...

  9. ado.net能访问oracle,利用ADO.NET访问Oracle数据库的实现

    1.前言随着互联网的发展,人们对Web网页的要求越来越多的趋向于动态交互性,而这很大程度上依赖于Web数据库.因为动态交互需要强大的信息系统支持,信息数据以数据库形式表示更容易更新和管理.通过网页如何 ...

最新文章

  1. 连鸽14年的哈勃望远镜“继任者”终于发射了!耗资600亿,能给136亿年前星系拍照...
  2. 新疆银行招聘计算机,新疆2017年银行招聘考试计算机学_计算机基础试题(19页)-原创力文档...
  3. python核心教程第二版答案_《python核心教程》课后题答案注解
  4. Linux信号 五 信号挂起与信号掩码操作接口集
  5. rust(53)-智能指针
  6. MVC实现实现文件流打包成压缩包
  7. python 数据科学 包_什么时候应该使用哪个Python数据科学软件包?
  8. Swarm的进化和大规模应用
  9. c语言编程从键盘上输入两个整数m和n,C语言习题 求键盘输入的两个正整数的最大公约数和最小公倍数...
  10. nrf52832开发配置文件小记
  11. 使用Hyperlegder Fabric体验区块链智能合约的乐趣----编写一个简单的BookstoreApp(上)...
  12. 高等数学常用符号大全及符号的含义
  13. java 动态性之反射机制 详解 案例,一起来聊聊Synchronized底层实现原理
  14. java 免费发短信_java实现发短信功能---腾讯云短信
  15. CAP、BASE理论
  16. 【持续更新】【产品相关名词解释】CBD、BOM、DFM、EVT、EOF、CMF、PP、MP等
  17. Enhancement spot 的实现
  18. 程序员客栈:程序员的经纪人_对于程序员:如何处理干扰和打扰
  19. 【对比+转载】麦子:我奋斗了18年才和你坐在一起喝咖啡清华大学硕士: 我奋斗了18年,不是为了和你一起喝咖啡
  20. nhanes数据库挖掘教程3--对数据进行多重插补

热门文章

  1. IO Visor Project Use Cases
  2. 2021年四月中旬推荐文章
  3. Linux系统调用表(system call table)
  4. FD.io VPP配置文件详解
  5. python爬虫接口_python爬虫之百度API调用方法
  6. 某计算机系统中 时钟中断处理程序,2017年北京语言大学计算机系统结构839计算机系统与设计之计算机操作系统考研题库...
  7. SciPy 积分的计算
  8. idea+maven打包Java项目
  9. mysql源码目录在哪_Mysql源码学习——源码目录结构
  10. linux内核 端口,Linux内核中IO端口资源管理