资源描述:
《excel 轻松操作oracle数据库》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Excel通过ADO方式连接到Oracle并操作Oracle给那些编程能力不强的人带来很大的福音,结合着Excel的数据处理与图表制作,就能很轻松地处理一些常规工作。日常工作中需要查询各种数据,而且不断变化,处理这些数据的人不是技术人员,不会连接数据库自己查询,通过下面的办法就可以让技术人员编辑好包含查询语句的excel文件,让管理人员自己输入条件取数了。我的方法是编辑需要的SQL语句保存在单元格中,并在查询条件需要参数值的地方用问号“?”代替,再在其他单元格中保存查询条件所需的参数值,在“宏”中用参数值替换掉SQL语句中的问号,最后执行查询语句并将结果保存到exc
2、el表中。以下是通过Excel的VBA连接Oracle并读取Oracle相关数据的步骤: 1、引用ADO相关组件:打开VBA编辑器,在菜单中点选“工具”--》“引用”。确保“MicrosoftActiviteXDataObjects2.8Library”和“MicrosoftActiviteXDataObjectSRecordset2.8Library”被勾选上。 2、建立读取数据的过程:PublicSubget_data()'根据工作表中的查询语句读取数据OnErrorGoToErrMsg:DimcnnAsObject,rstAsObjectDimname,s
3、tat,sqls,fieldAsStringDimpm(4)AsStringDimi,j,linenoAsIntegerDimOraOpenAsBooleanSetcnn=CreateObject("ADODB.Connection")Setrst=CreateObject("ADODB.Recordset")sqls="connectdatabase"cnn.Open"Provider=msdaora;DataSource=dl580;UserId=sxjk;Password=sxjk;"OraOpen=True'成功执行后,数据库即被打开IfOraOpenThe
4、nlineno=[D65536].End(xlUp).RowElselineno=0'行数Fori=3Tolinenoname=Cells(i,2)'保存数据工作表名称stat=Cells(i,3)'是否需要读取数据field=Cells(i,4)'清除原表数据定位pm(1)=Cells(i,6)'参数值pm(2)=Cells(i,8)pm(3)=Cells(i,10)pm(4)=Cells(i,12)sqls=Cells(i,15)Forj=1To4Ifpm(j)<>""Thensqls=Replace(sqls,"?",pm(j),1,1)'用参数值替换SQL语
5、句中的问号'MsgBoxsqlsEndIfNextjIfstat="Y"Orstat="y"ThenSetrst=cnn.Execute(sqls)sqls="CopyFromRecordset"maxrow=Sheets(name).[A65536].End(xlUp).Row+1Sheets(name).Range("a3:"&field&maxrow).ClearContents'清除原表数据Sheets(name).Range("a2").CopyFromRecordsetrst'执行SQL并提取数据Cells(i,3)="成功"EndIfNextiWork
6、sheets("系统参数").Selectmsg=MsgBox("数据读取完毕!",vbOKOnly,"iamlaosong")ExitSubErrMsg:OraOpen=FalseMsgBoxsqls,vbCritical,"操作失败,请检查!"EndSub 3、SQL语句实例这是一个简单的语句:SELECT*FROMzdgc_sn_sj_gfltWHEREt.CLCT_DATE=to_date('?','yyyy-mm-dd')ANDt.JSBZ='1'ORDERBYt.CITY,t.SSXS这是一个复杂的语句:selectaa.zj_code,aa.zj_m
7、c,aa.clct_date,aa.sjzl,aa.jyqsjzl,nvl(bb.wgfsl,0),nvl(bb.jyqwgfsl,0)from(selectb.ssxs,b.zj_code,b.zj_mc,a.clct_date,count(*)sjzl,sum(casewhento_char(a.clct_time,'hh24mi')<='?'then1else0end)jyqsjzlfromtb_evt_mail_clcta,sncn_zd_jgbwherea.clct_bureau_org_code=b.zj_codeanda.time_limit_co