关于execl数据导入sql的问题或是execl通过delphi导入sql搜索了很多,都没有成功,有以下三种,很疑惑,到底有没有导入的方法呢?1.procedure TForm1.Button1Click(Sender: TObject); 
var 
  sSql, mdbpath, xlspath: string; 
begin 
  if (trim(edit1.Text) = '') or (trim(edit2.Text) = '') then 
  begin 
    MessageBox(GetActiveWindow(), '请正确选择相关路径!', '警告', MB_OK +  MB_ICONWARNING); 
    exit; 
  end; 
  mdbpath := trim(edit1.Text);          //MDB路径 
  xlspath := trim(edit2.Text);          //Excel路径 
  ADOConnection1.Connected := False; 
  try 
    ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' +  mdbpath + ';Persist Security Info=False'; 
    ADOConnection1.Connected := true; 
    try 
      //删除所有的记录 
      adoquery1.Close; 
      adoquery1.SQL.Clear; 
      sSql :='Delete * from Classes'; 
      adoquery1.SQL.Text := sSql; 
      adoquery1.Execsql; 
      //添加记录 
      adoquery1.Close; 
      adoquery1.SQL.Clear; 
      sSql :='Insert into  Classes (名次, 姓名, 性别, 总分)' + ' SELECT' + ' 名次, 姓名, 性别, 总分' + ' FROM [excel 8.0;database=' + xlspath + '].[Classes$]'; 
      adoquery1.Parameters.Clear; 
      adoquery1.ParamCheck := false; 
      adoquery1.SQL.Text := sSql; 
      adoquery1.Execsql; 
      MessageBox(GetActiveWindow(), '批量导入EXCEL成功!', '警告', MB_OK + MB_ICONWARNING); 
    except 
      MessageBox(GetActiveWindow(), '批量导入EXCEL失败!', '警告', MB_OK +  MB_ICONWARNING); 
    end; 
  except 
    MessageBox(GetActiveWindow(), '连接ACCESS失败!', '警告', MB_OK + MB_ICONWARNING); 
  end; 
end; 2.SELECT   *   INTO  ww1.dbo.ee
  FROM   OPENROWSET('Microsoft.Jet.OLEDB.4.0',     
                                  'Excel   8.0;Database=c:\ee.xls',  
3.SELECT   *   FROM   [ee$]')   SELECT   *     
  FROM   OpenDataSource(   ’Microsoft.Jet.OLEDB.4.0’,     
      ’Data   Source="xls文件的地址";User   ID=Admin;Password=;Extended   properties=Excel   5.0’)...工作区的名称   
  
    

解决方案 »

  1.   

    你跟踪一下,看看具体的报错信息,不要显示except中的提示
      

  2.   

    ' SELECT' + ' 名次, 姓名, 性别, 总分' + ' FROM [excel 8.0;database=' + xlspath + '].[Classes$]';  先 在查詢分析器看下有沒有數據。 
      

  3.   

    我给你个例子,是导入access的,超级简单
    procedure TForm1.Button1Click(Sender: TObject);
    var
      sSql, mdbpath, xlspath: string;
    begin
      if (trim(edit1.Text) = '') or (trim(edit2.Text) = '') then
      begin
        MessageBox(GetActiveWindow(), '请正确选择相关路径!', '警告', MB_OK +  MB_ICONWARNING);
        exit;
      end;
      mdbpath := trim(edit1.Text);          //MDB路径
      xlspath := trim(edit2.Text);          //Excel路径
      ADOConnection1.Connected := False;
      try
        ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' +  mdbpath + ';Persist Security Info=False';
        ADOConnection1.Connected := true;
        try
          //删除所有的记录
          adoquery1.Close;
          adoquery1.SQL.Clear;
          sSql :='Delete * from Classes';
          adoquery1.SQL.Text := sSql;
          adoquery1.Execsql;
          //添加记录
          adoquery1.Close;
          adoquery1.SQL.Clear;
          sSql :='Insert into  Classes (名次, 姓名, 性别, 总分)' + ' SELECT' + ' 名次, 姓名, 性别, 总分' + ' FROM [excel 8.0;database=' + xlspath + '].[Classes$]';
          adoquery1.Parameters.Clear;
          adoquery1.ParamCheck := false;
          adoquery1.SQL.Text := sSql;
          adoquery1.Execsql;
          MessageBox(GetActiveWindow(), '批量导入EXCEL成功!', '警告', MB_OK + MB_ICONWARNING);
        except
          MessageBox(GetActiveWindow(), '批量导入EXCEL失败!', '警告', MB_OK +  MB_ICONWARNING);
        end;
      except
        MessageBox(GetActiveWindow(), '连接ACCESS失败!', '警告', MB_OK + MB_ICONWARNING);
      end;
      BitBtn1.Enabled:=true;
    end;
      

  4.   

    可以直接用ADO打开EXCEL,然后循环插入到SQL中,如果用DBF导的话EXCEL还要另存为,而且EXCEL里如果单元格字符数多又没有给单元格拉到足够显示的长度那么DBF里的数据会自动截断的,会造成数据丢失.
      

  5.   

    select 字段名 from  OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 5.0;Database=c:\aa.xls, 'SELECT * FROM [sheet1$]')注:要导入的excel文件,也就是aa.xls文件必须关闭.
      

  6.   

    特别说明:如果数据库服务器和客户程序不是同一台电脑,要用网络地址,c:\aa.xls换成\\192.168.0.23\app\aa.xls;如果访问客户程序所在的机器需要用户名密码,就麻烦多了.
      

  7.   

    在sql7查询分析器里执行以上语句提示
    服务器: 消息 7312, 级别 0, 状态 1, 行 1
    [OLE/DB provider returned message: Microsoft Jet 数据库引擎找不到对象'Sheet1$'。请确定对象是否存在,并正确地写出它的名称和路径。]耗时: 
     188执行select type2,snw from  OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 5.0;Database=\\192.168.150.69\app\ee.xls','SELECT * FROM [Sheet1$]') 
    提示
    服务器: 消息 7399, 级别 16, 状态 1, 行 2
    OLE DB 提供程序 'Microsoft.Jet.OLEDB.4.0' 报错。提供程序未给出有关错误的任何信息。耗时: 
     47
    我用的时客户端,sql装在服务器上,我的机器ip为192.168.150.69;
    你确信这样能行吗,试过?