VB数据库编程_批量导出数据到Excel_第1页
VB数据库编程_批量导出数据到Excel_第2页
VB数据库编程_批量导出数据到Excel_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第II期椁战瑞:VB数据库编程 79 第7卷第11期2008年 II JJVB数据库编程批量导出数据到Excel廖战瑞(浙江省瑞安市人才培训中心,浙江瑞安325200)摘 要:以Access-据库为例,介绍了通过VR的Data Object 2.0 Ijbmiy和Excel 11.0 Object Library库牡合二 维敦细 实现了高效批量导出数据到Excel实例。关键词:VB;M据库;导出中图分类号:TP311.52文献标识码:A文章编号672-7800 (2008)11 -0078-02第II期椁战瑞:VB数据库编程 79 第II期椁战瑞:VB数据库编程 79 作者简介:專战瑞(197

2、9),男浙江瑞安人浙江石瑞安市人才培训中心助理工税师.研究方向为计算机应用、网络管理© 1994-2009 China Academic Journal Electronic Publishing House. All rights reserved, 1问题提出有时需将数据库中的数据代接导出到丧格编辑软件中二 次处理.Excel亦表格方而冇肴强大的功能,可用VB6控制Excel 并导入数据但现今流行的大部分该类程序执行效率低下因 此.通过实践,笔者总结出本文所述方法O2工作原理通过VB的ActiveX Data Object 2.0 Library库连接Access数 据咋渎取了段

3、和记录J卜分別肯存住两个一维数组屮再通过 Excel 11.0 Object IJbiaiy库控制Excel并建立新的工作簿,并把 两个二数组依次賦给丁作簿的Slieel,达到快速批数据 的目的。3主要窗体布置及算法描述新建工程pijOut«谢体fimOut、模块prom、两个命令按钮 cnidOut 和 cmdExil在“工具"菜单中选“引用",选择-Microsoft ActiveX Data Object 2.0 Ubtary"和"Microsoft Excel 11.0 Object Library几 个关键过程和数组,功能如下:(1)

4、 ExecuteSQL()过程'用于连接数据库及对表操作°(2) I)ataToAiray()U程 该过程用尸把所导数据的字段名和 数据分别暂存在两个动态二维数组ExcelTitle()和Mydata()里。(3) ExcelTiile()动杰一堆数纽。哲存所导数据的字段名。(4) MyIMa()动态二维数组。皆存所导除了字段名外数据(5) ExportToExcel()过程。实现数据导到Excel里。Excel的 毎个Shcel实际上为一张65536x256二维表格即为一个大的特 殊二维数组,它由无数个小的二维数组组成,毎个Sheel里一个 选定区域就为一个小的二维数组.利

5、用这点可以引进两个动 态二维数组MyDataO.ExcelTitleO分别存储所导数据及其字段 名,再分别把这个两个数组值股盖Sheel里两个选定的区域即 完成快速批呆导入Excel数据的目的。(6) ExchangeLetter()过程。在程序目录卜有个Letter.txt 件.内容如001A(换行)002B (换行)026Z (换行)027AA (换行) 052AZ (换行)256IV,因为每个Excel的Sheet有256个字段 (A、BC .Z,AA、AB、AC AZ IV),因此在导出数据时需考 虑所导数据的字段怎样对应到该256个中某些字母:比如,所导 数熔有2个字段,则Excel

6、里字段只有A与B字段彳有数据;如所 导数据有3个字段.则对应A、B与C有数据;依次类推、该过程利 用循环,读取Leltei.txt里毎行并把该行的3个字符转换为数值, 氏到所导数据字段数与该数值相等如所导数据冇3个字段. 当循环读取到Lettentxt第3行时停止,F是把003C中C取出这 就完成了从所导数据到Excel的字段对应。4主要程序代码Dim My Data ()'二维数组,用J:暂存所导数据记录Dim ExcelTitle()'二维数组,用于暂存所导数据的字段名Dim strSQL As StringDim Mycon As ADODB.Connection &qu

7、ot;创建数据库连接通道Dim MyR§ As ADODB.Recordset "创建数据集Dim MyFlag血Integer'标识数据库连接通道、数据集狀杰Dim MyMsg As StringPrivate Sub cnidOut.Click()"点击导出按钮On En(>i GoT(> eiihandleCall Busy(True)“系统忙该过程略本文不提供slrSQL = 11 select * from 员丁表"Call ExecuteSQL (Mycon, MyRst slrSQLt My Msg. MyFlag) ,

8、执行数据连接及表操作MsgBox ”导出即将开始,请耐心等待几秒钟! ”, vbQues- lion."提示"If Not MvRn.EOF ThenCall DalaroArrav,所导数据暂存到MvData数组9<End IfCall ExirtToExcel“导出到 ExcelCall CloseObjCMycon9 MyRs, MyRag)"关闭数据库Call Busy (False)啄统恢复空闲Exit Suberriiaiulle:MsgBox Err.Number & Err.Description t vbCritical,"

9、;错谋"Cal! Bimv(False)End SubPrivate Sub Data PoAnay ()"所导数据暂存到 My data 数组KeDim MyDala(MyKs.K(yconlC<)unt, MyKs.Fi(H<ls.Coiint)ReDim ExcelTitle( 11 MyKs.Fields.Count)Dim i As IntegerDim inllx>w As IntegerDim intCol As IntegerFor i = 0 To MyKs.Fields.Count - 1 “暂存字段名ExcelTille(Of i)

10、= Myl.Kiel(k(i).NameNextWendEnd SubPrivate Sub ExpirtToExcel() “该过程使数据导到ExcelDim MyXIsApp As Excel.Application "创建ApplicalioinDim Exbook As Excel.Workbook"创建WorkbookDim ExSlieet As Excel.Worksheet '创建sheetDim strLetter As StringSet MyXlsAj屮=CreateObject(nExcel.Application11)MyXIsApp. V

11、isible = TrueMyXIsApp. WorkbookmAlclCall Exchangeltter(slrl.etter)MyXlsApp.Kangp(wAl:w & strLetter & Mr,).SelectMyXlsA|>p.Kaiigp(MAl:w & strLetter & nlM).Value = ExcelPi- lle,导出字段名称MyXlsApp.Kange (f,A2:H & strLetter & MyRs.ReconlCount + 1 ).SeleclMyXlsApp.Range (MA2:tf &am

12、p; strLetter & MyRs.RecorHCount +1).Value = MvData* 导出数据My Xls/|>p. Display Alerts = TrueEnd SubPrivate Sub E(>rin_L>a<l()CoiiString = Mdriver =Microsoft Access driver (*.nidb)|;<lbq=H & App.Path & Mliuiiian.in<lb"End Sul)Public ConString As String “数据库连接字符串Public

13、Sub ExecuteSQL (Con As ADODB.Connection, n As ADODB.Recordset t strSQL As String* msg As Stringt Flag As Integer) Executesql过程用J连接数据库及数据农操作Dim Arr() As StringOn Error GoTo errhandleArr = Split (strSQL)S?t Con = New ADODB.ConnectionG)n.()|>en CoiiString "打开数据库通道II InStr (“DELETE, UPDATE .INSE

14、RT”,UCase (Arr(O) ThenFlag = 1Cott.Execute slrSQLElseElag = 2Set rs = New ADODB.Kecordsetrs.Olxm slrSQL, Con, a(l()|MknKeysett ailLnkOphinislicEnd IfExit Suberrhandle:MsgBox ErrAunil)er & Err. Descript ionCall Busy (False)Encl Sub5结束语(1) 本程序在 inxp+Access2OO3+Excel2OO3+VB6.O 下调试 通过。(2) 本文删去了一些非主要程序,增加了程序可读性,更加 符合逻辑思维。(3) 对之稍做修改,即可适用所有可通过Microsoft ActiveX Data Object 2.0 Library 存取的数据库系统如Oracle .SQL Serv er %Foxprn .Excel .Access、Dbase等增强了通用性。参考文献:1李毎茂社大越刘国宏.Visual Basic 6.0高级编税技巧M .北 京:电子工业出版社J99921( iCurtis Smith Michael

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论