当前位置:文档之家› Excel到SQLServer数据库的数据导入导出技术研究

Excel到SQLServer数据库的数据导入导出技术研究

Excel到S QL Server数据库的数据导入导出技术研究3王晓刚 杨春金(武汉理工大学信息工程学院 武汉 430063)摘 要 介绍Del phi中,采用新一代数据访问技术dbExp ress和OLE技术来实现Excel数据表到S QL Server数据库的数据导入和导出,及其在高速公路车辆查询系统中的应用。

关键词 dbExp ress S QL server Excel OLE中图分类号 TP317.31 引言办公自动化信息管理系统的用户常常会遇到需要把由Excel存储的数据资料导入到S QL Server 数据库,同时又要把S QL Server数据库中的数据导出到Excel数据表的问题。

不同的编程语言有不同的解决方法。

本文介绍应用Del phi编程来实现Excel数据表到S QL Server数据库的数据导入导出技术。

2 基本思路OLE自动化是W indows应用程序操纵另一个程序的一种机制。

被操纵的一方称为自动化服务器,操纵自动化服务器的一方称为自动化控制器。

通过引用这些对象实现对自动化服务器的调用,然后通过设置对象的属性和使用对象的方法操纵自动化服务器,实现两者之间的通讯。

Del phi在数据库方面提供的强大又富有弹性的能力给广大编程人员带来了方便。

dbExp ress是Del phi下一代的数据访问技术。

提供高效率数据访问以及提供跨平台能力的数据访问引擎。

dbEx2 p ress包含了7个组件,它们是TS QLConnecti on、TS QLDataSet、TS QLQuery、TS QLSt oredPr oc、TS QLT2 able、TS QLMonit or和TSi m p le DataSet,这些组件的功能就是让应用程序连接后端数据库,访问数据表中的数据,把修改的数据更新回数据库中以及让程序员观察dbExp ress向后端数据库下达命令等。

Del phi完全支持OLE应用程序自动化,提供的Servers栏控件可以很容易开发OLE自动化控制器实现对OLE自动化服务器的调用。

在Del phi内部运行OLE自动化程序需要在U ses语句中加入Co2 mobj来开始自动化程序。

通过调用Create O le Ob2 ject来检索一个自动化对象,Create O le Object调用大量系统内部的OLE函数,创建一个I dis patch的实例,并从Variant中返回一个Del phi变量类型,可以根据不同的环境提供不同的功能,这里我们使用Variant来引用Excel内部的对象以建立Del phi与Excel之间的连接。

并采用dbExp ress建立Del phi 和S QL Server之间的连接,来实现Excel数据表到S QL Server数据库的数据导入和导出。

3 dbExp ress访问S QL Server技术dbExp ress通过TS QLConnecti on组件同S QL Server数据库进行连接。

双击TS QLConnecti on,就会弹出它的组件编辑器,在这个组件编辑器里,我们就可以定义连接数据库的类型,数据库名称,登陆帐号、密码等信息。

以下就是我们连接名为DB2 SERVER的数据库服务器的具体情况:D river Name=MSS QL//数据库类型Host N a me=DBSERVER//数据库服务器Database=ETEST//数据库名U ser_Na me=sa//登陆帐号Pass word=sa//登陆密码B l obSize=-1LocaleCode=0000MSS QL Transls olati on=ReadComm itedOS Authenticati on=False在连接上数据库以后,dbExp ress提供了两种方法:一是使用TSi m p le DataSet组件;二是使用TS QLDataSet搭配T DataSetPr ovider和TClient D ata2 Set组件来对数据库进行访问。

在实现简单数据访85 计算机与数字工程 第35卷3收到本文时间:2006年6月8日作者简介:王晓刚,男,硕士研究生,研究方向:网络设计及信息管理。

杨春金,男,副教授,研究方向:信号与信息处理。

问操作中,这两种方法在功能上几乎是一模一样的,但是在有高性能要求的应用中,就需要使用第二种方法来实现对数据库的访问。

本文只涉及简单的数据访问功能,所以采用第一种方法来实现对数据库的访问操作。

定义待访问的数据表名为‘CS BY’,则具体的操作步骤如下:(1)在For m中放置TS QLConnecti on组件,按照连接数据库的方法建立与S QL Server数据库的连接,设置该组件的Connected属性为True以打开连接,LoginPr o mp t属性为False以避免每次连接数据库时都出现登陆框,设置Na me属性为S QLCon2 necti on1。

(2)在For m中放置TSi m p le DataSet组件,设置该组件的Connecti on属性为S QLConnecti on1,Data2 mandText为‘select3fr om CS BY’,设置Na me属性为Si m p le DataSet1。

(3)在For m中放置T DataSource组件,设置该组件的DataSet属性为Si m p le DataSet1,设置Na me 属性为DataSource1。

(4)在For m中放置T DBGrid组件,设置该组件的DataSource属性为DataSource1,设置Name属性为DBGrid1,表CS BY中的数据将显示在T DBGrid 组件中。

4 Excel数据表到S QL Server数据库的数据导入导出技术的应用:在襄十高速公路车辆查询系统中,有很多由Excel数据表存储的数据资料需要导入到S QL Server数据库中,例如《载货类汽车质量参数调整更正表》就需要导入到S QL Server数据库中以便用来查询。

如果由人工录入,工作量太大。

解决的方法有两种,一是利用S QL Server企业管理器的导入导出向导功能直接将Excel数据表中的数据导入到S QL Server数据库中,但是这样数据库将暴露在普通用户面前,一旦用户误操作,就会造成很大的损失。

二是在襄十高速公路车辆查询系统中实现数据导入的功能,这样可以避免数据库直接面向普通用户。

这里采用方法二来实现数据导入功能。

襄十高速公路车辆查询系统查询出来的结果需要导出到Excel数据表中,以报表的形式向上提交。

这就需要在襄十高速公路车辆查询系统中实现能够将S QL Server数据库中的数据导出到Excel 数据表中的功能。

能够实现这个功能的方法很多,本文采用预先设置好Excel模板,然后再将数据导入到模板中的方法。

这种方法灵活、方便,可以制作较复杂的Excel数据表,创建Excel对象的过程是在后台运行,避免用户在自动化运行期间干预Excel,而出现误操作。

主要代码的实现:4.1 打开连接在前面的For m中添加Excel A pp licati on、Excel2 Workbook和Excel W orksheet三个控件。

然后打开Excel应用程序,创建一个工作薄,如果打开工作薄失败,就断开与Excel的连接,然后关闭Excel应用程序。

源程序如下:varwkbk:_Workbook;//用于表示打开的工作薄,与excel应用连接beginOpenD ial og1.I nitial D ir:=extractFile D ir(para m str(0));//Excel 文件打开的初始路径if not(OpenD ial og1.Execute)thenraise excep ti on.Create(‘没有选择EXCE L文件!’);try//调用Connect方法,连接ExcelExcel A pp licati on1.Connect;Excep tshowmessage(‘M icr os oft Excel启动失败!’);exit;end;Excel A pp licati on1.V isible[0]:=false;//设置EXCEL不可见Excel A pp licati on1.Workbooks.Add(EPara m,0);//打开选择的Excel文件//Excel W orkbook1与Excel A pp licati on1建立连接Excel W orkbook1.ConnectT o(Excel A pp licati on1.Active Work2 book);//Excel W orksheet1与Excel W orkbook1建立连接Excel W orksheet1.ConnectT o(Excel W orkbook1.Worksheets[1]as _worksheet);end;4.2 Excel数据表的数据导入到S QL Server数据库取出Excel数据表的每一行信息插入到已建好的,名为“CS BY”的S QL Server数据表中。

为了保护数据的完整性,利用TS QLConnecti on的Start2 Transacti on方法激活一个独立的数据库事务,以确保在S QL Server数据表更新出现错误的时候,能够调用TS QLConnecti on的Rollback方法将S QL Server 数据表恢复到进行更新操作之前的状态。

源程序如下:vari:integer;aT D:TTransacti onDesc;//定义一个描述事务内容的参数Sheet,Te mpSht:variant;beginaT D.Transacti on I D:=1;//指定事务的I DaT D.Is olati onLevel:=xil READCOMM I TTED;//指定事务的级别95第35卷(2007)第3期 计算机与数字工程 TempSht:=Excel A pp licati on1.Sheets;TempSht.ite m[1].Activate;Sheet:=Te mpSht.ite m[1].U sedRange;For i:=1t o Sheet.Rows.Count dobeginSi m p le DataSet1.insert;Si m p le DataSet1.FieldBy Na me(‘cs1’).A sI nteger:=Excel W ork2 sheet1.Cells.Ite m[i,1];……Si m p le DataSet1.edit;tryS QLConnecti on1.StartTransacti on(aT D);//开始这个事务Si m p le DataSet1.App ly Updates(0);S QLConnecti m it(aT D);excep tS QLConnecti on1.Rollback(aT D);//若发生错误,将数据回滚end;end;end;4.3 S QL Server数据库中的数据导出到Excel数据表中向预设的Excel模板中写入数据,就是利用Excel W orksheet的Cells属性添加数值的过程。

相关主题