一种Excel数据动态导入数据库的方法

文档序号:6558297阅读:1246来源:国知局

专利名称::一种Excel数据动态导入数据库的方法
技术领域
:本发明涉及ー种Excel数据动态导入数据库的方法。这种方法是ー种从Excel到数据库的数据动态导入设计与实现。。
背景技术
:一般信息系统在将Excel数据导入数据库系统时,对Excel数据有比较严格的要求,如字段数量一致、名称一致、类型一致等。然而,人们也经常会遇到Excel数据与目标数据库表之间存在不一致的情况,这种不一致主要体现在三个方面字段数量不一致、字段名称不一致和字段类型不一致。为了解决Excel数据与数据库表之间存在不一致时的导入问题,因此发明了ー种Excel数据动态导入数据库的方法。
发明内容针对以上的不足,本发明的目的是提出ー种Excel数据动态导入数据库的方法,根据造成Excel数据与目标数据表不一致的两个主要因素,我们提出了Excel到数据库的通用导入设计。字段动态映射和映射合法性是本通用导入设计的两大关键步骤。字段动态映射是指操作用户针对目标数据库表中的每ー个字段从Excel数据清单中指定相应的导入字段;字段映射合法性主要包括字段类型转换验证和数据合法性验证,由于Excel中的数据类型与各种数据库系统的数据类型存在一些差异,需要对字段映射关系中源字段至目标字段的类型转换的有效性进行验证,另外,由于目标数据库表中往往对数据本身有一些约束(如数据长度等),因此,需要根据字段映射关系对源数据表中数据进行合性检查。Excel数据清单信息可表不为RTable={RFi|i=I,2,3…RTable.FieldCount},RFi表示Excel数据清单中的第i段,描述为RFi=<RFNamei,RFTypei,RFMaxLengthi)目标数据库表信息可表示为TTable={TFjIj=I,2,3…TTable.FieldCount},TFj表示目标数据库表中的第j段,描述为TFj=〈TFNamej,TFTypej,TFMaxLengthj>。字段动态映射就是要建立RTable’TTable的对应关系,即建立表示为FIELDMAP={〈RFi,TFj>|RFiRTable,TFjTTable}的序偶集,即对于TFjTTable,RFjRTable,使得〈RFi,TFj>FIELDMAP。这种对应关系可以是——对应,也可以是ー多对应,即Excel数据清单的某一字段可对应到目标数据库表的多个字段。字段映射建立后,需要进行字段映射合法性验证,其算法描述如下isVald=TrueForeach<RFi,TFj>inFIELDMAPIfnot(TypeMatch(RFTypei,TFTypej)andLenMatch(RFMaxLengthi,TFMaxLengthj))thenIsVald=FalseEndifNext函数TypeMatch用于验证RFTypei与TFTypej类型是否兼容,函数LenMatch用于验证RFMaxLengthi与TFMaxLengthj数据长度是否兼容。完成字段映射及合法性验证后,即可进行数据导入操作。Excel数据清单的数据表不为RTableData={RRowk|k=1,2,…RTableData.Count},RRowk显然是关系RTable的元组。目标数据表的数据可表示为TTableData={Trowx|x=1,2,3,4…TTableData.Count},TRowx显然是关系TTable的元组。数据导入的算法描述如下ForeachRRowkInRtableDataTRow=newTTableForeachTFiinTRowTRow(TFi)=RRowk(RFj)其中くRFj,TFi>FIELDMAPNextTTableData,Add(TRow)Next具体实施例方式微软的SQLSERVER是当前主流的DBMS,下面介绍将Excel数据动态导入SQLSERVER数据库的具体实现,编程语言采用Delphi7.O。CreateDataSetField过程用于创建ADODataSet对象DataSetField来保存从Excel数据清单中提取的结构信息,关键代码如下procedureTImportKDBMForm.CreateDataSetField;beginifDataSetField.ActivethenDataSetField.Close;DataSetField.Fields.Clear;DataSetField.FieldDefs.Clear;DataSetField.FieldDefs.Add(’fieldNo’,ftlnteger);DataSetField.FieldDefs.Add(’fieldName’,ftString,20);DataSetField.FieldDefs.Add(’fieldType’,ftString,20);DataSetField.FieldDefs.Add(’fieldWidth’,ftlnteger);DataSetField.CreateDataSet();end;然后,调用过程GetExcelTablelnfo获取Excel数据清单中各字段信息。CreateDataSetFieldMap过程用于创建ADODataSet对象DataSetFieldMap来字段映射关系,关键代码如下procedureTImportKDBMForm.CreateDataSetFieldMap;beginifDataSetFieldMap.ActivethenDataSetFieldMap.Close;DataSetFieldMap.Fields.Clear;DataSetFieldMap.FieldDefs.Clear;DataSetFieldMap.FieldDefs.AddCTFieldName’,ftString,20);DataSetFieldMap.FieldDefs.Add(,TFieldType’,ftString,20);DataSetFieldMap.FieldDefs.Add(’TFieldWidth',ftlnteger);DataSetFieldMap.FieldDefs.Add(’RFieldName*,ftString,20);DataSetFieldMap.FieldDefs.Add(’RFieldType',ftString,20);DataSetFieldMap.FieldDefs.Add(,RFieldwidth’,ftlnteger);DataSetFieldMap.CreateDataSet();End;然后,调用过程GetSQLTableInfoO获取SQL数据库表中各字段信息。操作用户指定好Excel各字段与SQL数据库表中各字段的映射关系后,即可以进行数据导入操作,关键代码如下IfnotCheckFieldMapOthenexit;//如果字段映射没有通过验证,则退出whilenotADOQueryl.EofdobeginDataSetFormatData.Append();DataSetFieldMap.First;while(notDataSetFieldMap.Eof)dobeginFieldNo:=DataSetFieldMap.fieldbyname(’RFieldNo’)AsInteger;FieldName:=DataSetFieldMap.fieldbyname(’TFieldName’).Asstring;FieldValue:-ADOQueryl.Fields[FieldNo].AsString;DataSetFormatData.FieldByName(FieldName).Value:-FieldValueDataSetFieldMap.Next;//处理下一个字段映射end;DataSetFormatData.Post();ADOQueryl.Next;//处理下一条Excel数据记录end;权利要求1.ー种Excel数据动态导入数据库的方法Excel数据清单信息可表示为RTable={RFiIi=I,2,3…RTable.FieldCount},RFi表示Excel数据清单中的第i段,描述为RFi=<RFNamei,RFTypei,RFMaxLengthi>。目标数据库表信息可表示为TTable={TFj|j=1,2,3…TTable.FieldCount},TFj表示目标数据库表中的第j段,描述为TFj=〈TFNamej,TFTypej,TFMaxLengthj>。2.根据权利要求I所述,Excel数据动态导入数据库的方法,其特征是字段动态映射就是要建立RTable’TTable的对应关系,即建立表示为FIELDMAP={〈RFi,TFj>|RFiRTable,TFj!Table}的序偶集,即对于TFj!Table,RFjRTable,使得〈RFi,TFj>FIELDMAP。这种对应关系可以是一一对应,也可以是ー多对应,即Excel数据清单的某一字段可对应到目标数据库表的多个字段。全文摘要Excel数据动态导入数据库的方法采用建立字段映射的方法,实现了Excel到数据库的动态导入,解决了一般导入方案中对Excel数据约束过严的问题,最后给出了该设计方案基于Delphi语言的具体实现。该方法应用于多个信息管理系统,取得了良好的实际使用效果,可供信息管理系统设计开发人员借鉴。文档编号G06F9/44GK102841784SQ20111017235公开日2012年12月26日申请日期2011年6月24日优先权日2011年6月24日发明者杨际荣申请人:镇江华扬信息科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1