+ -
当前位置:首页 → 问答吧 → 求EXCEL导入MSSQL数据库代码,可以用的,效率比较高的!

求EXCEL导入MSSQL数据库代码,可以用的,效率比较高的!

时间:2011-10-25

来源:互联网

如题,我现在是用这种方法,效率比较低
Delphi(Pascal) code
var
    ASql, APath: String;
    ExcelApp: Variant;
    AInt: Integer;
begin
 if messagebox(Self.Handle,'你确定要导入直送的数据吗?','系统提示',mb_yesno+mb_iconquestion)=idyes then
 begin
    If OpenDialog1.Execute Then
        APath := OpenDialog1.FileName
      Else
        Exit;

      If not FileExists(APath) Then
        Begin
          messagebox(self.Handle,'你选择的文件不存,请核对','提示信息',mb_iconinformation);
          Exit;
        End;
      Try
        Application.ProcessMessages;
        ExcelApp := CreateOleObject('Excel.Application');
        ExcelApp.Workbooks.Open(APath);
        ExcelApp.WorkSheets[1].Activate;

        ASql := 'select * from hy_zs where 1=2';
         ADOQuery1.Close;
         ADOQuery1.SQL.Text := ASql;
         ADOQuery1.Open;


        For AInt := 2 To ExcelApp.ActiveSheet.UsedRange.rows.count Do //AInt 起始行数,重哪行开始导入,Aint初始值就是几
          Begin
             ADOQuery1.Append;
             ADOQuery1.FieldByName('Invoice').AsString := ExcelApp.Cells[AInt, 1].Value;   //Aint是第几行,后面的数字是第几列,
             ADOQuery1.FieldByName('Zsdate').AsDateTime := ExcelApp.Cells[AInt, 2].Value;
             ADOQuery1.Post;
          End;
      Finally
        ExcelApp.WorkBooks.Close;
        ExcelApp.quit;
               messagebox(self.Handle,'直送数据导入成功,请核对','提示信息',MB_ICONINFORMATION);
      End;
      end;

作者: Calm_life   发布时间: 2011-10-25

提供一个EXCEL导入ACCESS的给你参考下

SELECT * INTO 临时表 FROM [Sheet1$] IN "'+ EXCEL的全路径文件名 + '" "EXCEL 8.0;"
Sheet1是EXCEL的表名

然后再把临时表的插入到正式表中 INSERT INTO SELECT语句

语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1

要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。

然后 DROP TABLE 表名
删除临时表

ACCESS大概就是这样操作的了

作者: ADSLAN   发布时间: 2011-10-25

用语句将需输出范围进行选择、复制到一个临时的WorkSheets,然后,整个临时WorkSheets导出,不要逐行枚举地输出,这样就快了。

作者: D_Parent   发布时间: 2011-10-25

引用 1 楼 adslan 的回复:
提供一个EXCEL导入ACCESS的给你参考下

SELECT * INTO 临时表 FROM [Sheet1$] IN "'+ EXCEL的全路径文件名 + '" "EXCEL 8.0;"
Sheet1是EXCEL的表名

然后再把临时表的插入到正式表中 INSERT INTO SELECT语句

语句形式为:Insert into Table2(field1,field2,...……


Delphi(Pascal) code
if OpenDialog1.Execute then
  begin

  ADOQuery2.Connection:=ADOConnection1;
  ADOQuery2.SQL.Clear;
  ADOQuery2.SQL.Append('insert into User_qx select * from OPENROWSET(');//将这个‘表’字改为你的数据库中的表名
  ADOQuery2.SQL.Append(quotedstr('MICROSOFT.JET.OLEDB.4.0'));
  ADOQuery2.SQL.Append(','+quotedstr('Excel 8.0;HDR=YES;DATABASE='+OpenDialog1.FileName)+' ,sheet1$)');
  ADOQuery2.ExecSQL;
  showmessage('ok');

  end;


这种方法不行,本机可以,远程客户端就不行了...求其它方法

作者: Calm_life   发布时间: 2011-10-25

自己顶一下

作者: Calm_life   发布时间: 2011-10-25

直接把Excel当成表来导

作者: wgywell   发布时间: 2011-10-25

自己在顶下

作者: Calm_life   发布时间: 2011-10-25