注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

鑫淼梦园的博客

圆你的梦想 从这里开始

 
 
 

日志

 
 

【转载】把Excel中的数据导入数据库  

2014-05-02 15:53:35|  分类: delphi xe5 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
本文转载自智能双色球《把Excel中的数据导入数据库》

很多关于delphi 的书籍上都有怎么把数据库中的数据导出到Excel 里去,可是偶却从没见过它们描述 怎么把 Excel 中的数据反导回数据库中。。。
在网上搜索后也没找到什么解决的方法,于是就自己研究了一下。。

数据库用的是 Paradox 7,搞Delphi 的都知道的数据库。
使用的控件有:
BDE中的TTable,Data Access中的TDataSource,Dialogs中的TOpenDialog和TSaveDialog,Servers中的TExcelApplication、TExcelWorksheet以及TExcelWorkbook

这里只提供静态载入的方法,动态的可根据Excel 的字段名来动态创建数据库的字段来实现。

把Excel中的数据导入数据库,代码分析如下:
procedure TForm1.Button1Click(Sender: TObject);
Var
  i,Excel_ROW:integer;
begin
  if OpenDialog1.Execute then
   begin
   if Application.MessageBox('数据量大时导入时间可能较长,请耐心等待!','提示',MB_OKCANCEL+MB_ICONWarning)=IDOK then
    try
     //清空数据表
     Table1.Close;
     Table1.TableType:= ttParadox;
     Table1.EmptyTable;
     Table1.Open;
     //连接 Excel
     ExcelApplication1.Connect;
     //将 Excel 设置为不可视
     ExcelApplication1.Visible[0]:=false;
     //打开要读取的 Excel 文件
     ExcelApplication1.Workbooks.Open(OpenDialog1.FileName,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0);
     //连接工作簿
     ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);
     //连接工作表
     ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _Worksheet);
     //获取工作表中已用区域数据的行数
     Excel_ROW:=ExcelWorkSheet1.UsedRange[1].Rows.Count;
     //将 Excel 中的数据写入数据表
     for i:=2 to Excel_ROW do
       begin
         Table1.Append;
         Table1.Edit;
         Table1.FieldbyName('序号').AsString:=ExcelWorksheet1.Cells.Item[i,1];
         Table1.FieldbyName('工号').AsString:=ExcelWorksheet1.Cells.Item[i,2];
         Table1.FieldbyName('姓名').AsString:=ExcelWorksheet1.Cells.Item[i,3];
         Table1.FieldbyName('部门').AsString:=ExcelWorksheet1.Cells.Item[i,4];
         Table1.FieldbyName('日期').AsString:=ExcelWorksheet1.Cells.Item[i,7];
         Table1.FieldbyName('星期').AsString:=ExcelWorksheet1.Cells.Item[i,8];
         Table1.FieldbyName('上班1').AsString:=ExcelWorksheet1.Cells.Item[i,9];
         Table1.FieldbyName('下班1').AsString:=ExcelWorksheet1.Cells.Item[i,10];
         Table1.FieldbyName('上班2').AsString:=ExcelWorksheet1.Cells.Item[i,11];
         Table1.FieldbyName('下班2').AsString:=ExcelWorksheet1.Cells.Item[i,12];
         Table1.FieldbyName('上班3').AsString:=ExcelWorksheet1.Cells.Item[i,13];
         Table1.FieldbyName('下班3').AsString:=ExcelWorksheet1.Cells.Item[i,14];
         Table1.FieldbyName('请假总计').AsString:=ExcelWorksheet1.Cells.Item[i,17];
         Table1.Post;
       end;
     Application.MessageBox('数据载入成功!','提示',MB_OK);
    except
      //清空数据表
      Table1.Close;
      Table1.TableType:= ttParadox;
      Table1.EmptyTable;
      Table1.Open;
      Application.MessageBox('数据读取失败,请查看Excel文件格式是否正确!','提示',MB_OK+MB_ICONWarning);
    end;
    //关闭 Excel
    ExcelApplication1.Quit;
    //解除与 Excel 的连接
    ExcelApplication1.Disconnect;
   end;
end;
  评论这张
 
阅读(62)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017