代码如下:
procedure TForm1.Btn_importClick(Sender: TObject);
var
  SqlStr: string;
  SqlStr1: string;
begin
  SqlStr1:='Data Source='+Trim(Ed_ExcelFile.Text)+';User ID=Admin;Password=;Extended properties=Excel 8.0';
  SqlStr:='INSERT INTO text([姓名],[年龄]) SELECT [姓名],[年龄] FROM ';
  SqlStr:=SqlStr+' OpenDataSource( '+''''+'Microsoft.Jet.OLEDB.4.0'+''''+',';
  SqlStr:=SqlStr+''''+SqlStr1+'''';
  SqlStr:=SqlStr+')...sheet1$';
  //Memo1.Text:=SqlStr;
  with Qry do
       begin
         Sql.Clear;
         Sql.Add(SqlStr);
         ExecSql;
         showmessage('成功! :) ')
       end;
end;上面的代码是为了实现按字段导入Sql server,但在测试时,只能导入到本机上的SqlServer,用另一台机器上的SqlServer测试时,则出错!
错误信息:“OLEDB提供程序'MS JET.OLEDB.4.0'报错,提供程序未给出有关错误的任何信息”
不知道什么原因!:(

解决方案 »

  1.   

    >>,用另一台机器上的SqlServer测试时说明你登录的权限,或者另外一台机器的 ado 连接串没写对
      

  2.   

    应该不是权限或连接串的问题,我测试过用普通的插入语句很正常的写入数据!
    再查询分析器里报如下错误:
    OLE DB 提供程序 'Microsoft.Jet.OLEDB.4.0' 报错。提供程序未给出有关错误的任何信息。如果连接的是本机SqlServer,执行完全正常!
      

  3.   

    我想datasource中的路径是相对于sqlserver实例所在的机器的,因为你在将程序连接到除本机以外的sql server服务器的时候,执行这段代码时实际上是到当前sql server实例所在的机器去寻找Excel文件,是找不到的,所以会报错,但是直接加上引用程序本机IP的话,好像就是权限问题不能访问了,我现在也没有找到解决的办法的,希望能尽快找出一个解决的办法
      

  4.   

    一、SQL SERVER 和ACCESS的数据导入导出常规的数据导入导出:使用DTS向导迁移你的Access数据到SQL Server,你可以使用这些步骤:   1在SQL SERVER企业管理器中的Tools(工具)菜单上,选择Data Transformation   2Services(数据转换服务),然后选择  czdImport Data(导入数据)。   3在Choose a Data Source(选择数据源)对话框中选择Microsoft Access as the Source,然后键入你的.mdb数据库(.mdb文件扩展名)的文件名或通过浏览寻找该文件。   4在Choose a Destination(选择目标)对话框中,选择Microsoft OLE DB Prov ider for SQL Server,选择数据库服务器,然后单击必要的验证方式。   5在Specify Table Copy(指定表格复制)或Query(查询)对话框中,单击Copy tables(复制表格)。 6在Select Source Tables(选择源表格)对话框中,单击Select All(全部选定)。下一步,完成。 Transact-SQL语句进行导入导出:1.         在SQL SERVER里查询access数据:-- ======================================================SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:\DB.mdb";User ID=Admin;Password=')...表名------------------------------------------------------------------------------------------------- 2.         将access导入SQL server -- ======================================================在SQL SERVER 里运行:SELECT *INTO newtableFROM OPENDATASOURCE ('Microsoft.Jet.OLEDB.4.0',       'Data Source="c:\DB.mdb";User ID=Admin;Password=' )...表名------------------------------------------------------------------------------------------------- 3.         将SQL SERVER表里的数据插入到Access表中-- ======================================================在SQL SERVER 里运行:insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',  'Data Source=" c:\DB.mdb";User ID=Admin;Password=')...表名 (列名1,列名2)select 列名1,列名2  from  sql表实例:insert into  OPENROWSET('Microsoft.Jet.OLEDB.4.0',    'C:\db.mdb';'admin';'', Test) select id,name from TestINSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'c:\trade.mdb'; 'admin'; '', 表名)SELECT *FROM sqltablename-------------------------------------------------------------------------------------------------二、           SQL SERVER 和EXCEL的数据导入导出1、在SQL SERVER里查询Excel数据:-- ======================================================SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]下面是个查询的示例,它通过用于 Jet 的 OLE DB 提供程序查询 Excel 电子表格。SELECT * 
    FROM OpenDataSource ( 'Microsoft.Jet.OLEDB.4.0',
      'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
    -------------------------------------------------------------------------------------------------2、将Excel的数据导入SQL server :-- ======================================================SELECT * into newtableFROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',  'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]实例:SELECT * into newtableFROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',  'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions-------------------------------------------------------------------------------------------------3、将SQL SERVER中查询到的数据导成一个Excel文件-- ======================================================T-SQL代码:EXEC master..xp_cmdshell 'bcp 库名.dbo.表名out c:\Temp.xls -c -q -S"servername" -U"sa" -P""'参数:S 是SQL服务器名;U是用户;P是密码说明:还可以导出文本文件等多种格式实例:EXEC master..xp_cmdshell 'bcp saletesttmp.dbo.CusAccount out c:\temp1.xls -c -q -S"pmserver" -U"sa" -P"sa"' EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout C:\ authors.xls -c -Sservername -Usa -Ppassword'在VB6中应用ADO导出EXCEL文件代码: Dim cn  As New ADODB.Connectioncn.open "Driver={SQL Server};Server=WEBSVR;DataBase=WebMis;UID=sa;WD=123;"cn.execute "master..xp_cmdshell 'bcp "SELECT col1, col2 FROM 库名.dbo.表名" queryout E:\DT.xls -c -Sservername -Usa -Ppassword'"-------------------------------------------------------------------------------------------------
    4、在SQL SERVER里往Excel插入数据:
    -- ======================================================
    insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:\Temp.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...table1 (A1,A2,A3) values (1,2,3)T-SQL代码:
    INSERT INTO   OPENDATASOURCE('Microsoft.JET.OLEDB.4.0',   'Extended Properties=Excel 8.0;Data source=C:\training\inventur.xls')...[Filiale1$]   (bestand, produkt) VALUES (20, 'Test')  -------------------------------------------------------------------------------------------------总结:利用以上语句,我们可以方便地将SQL SERVER、ACCESS和EXCEL电子表格软件中的数据进行转换,为我们提供了极大方便!把文本文件导入到ACCESS
    在Form上放一个ADOConnection,连结指向目标Access库
    比如txt文件在c:\temp\aaaa.txt
    就执行
    ADOConnection.Connected := True;
    ADOConnection.Execute('Select * Into abcd From [Text;Database=c:\temp].aaaa.txt');=============================================================================================把DBF(Foxpro数据库)导入到SQLSERVER
    告诉你一个最快的方法,用SQLServer连接DBF(Foxpro数据库)
    在SQLServer中执行
    SELECT * into bmk
    FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0,
     'Data Source="e:\share";User ID=Admin;Password=;Extended properties=dBase 5.0')...bmk
      

  5.   

    Function TM_DataModule.GetMaxRow(filename:string;PK:integer):integer;
    //求出filename对应的Excel文件的主键PK列的最大行数.
    var
      n:integer;
    begin
      if (trim(filename)='') then
      begin
        MessageBox(GetActiveWindow(),'请正确选择相关路径!', '警告',MB_OK+MB_ICONWARNING);
        exit;
      end;  xlsFilename:=trim(filename);
      try
        Excel := CreateOLEObject('Excel.Application');
      except
        Application.MessageBox('Excel没有安装!','提示信息',MB_OK+MB_ICONASTERISK+MB_DEFBUTTON1+MB_APPLMODAL);
        Exit;
      end;  Excel.Visible := false;
      Excel.WorkBooks.Open(xlsFilename);
      n:=1;
      while Trim(Excel.WorkSheets[1].Cells[n,PK].Value)<>'' do
        n:=n+1;
      Result:=n-1;
    end;
    Procedure TM_DataModule.LoadFromExcel(filename:string;StartRow,StartCol,EndRow,EndCol:integer;ADOStoredProc:TADOStoredProc;StoredProcName:String;PK:integer;Flag:integer);
    //将filename对应的Excel文件导入到ADOStoredProc的数据集中,PK为主键所在字段的列数(不使其重复).
    //Flag为标志,为0时需在最后加入一个与值与主键相等的密码字段.
    var
      iRow,iCol:integer;//当前行、列
      n,num:integer;
    begin
      try
        num:=0;
        With ADOStoredProc do
        begin
          Close;
          ProcedureName:=StoredProcName;
          Open;
          for iRow:=StartRow to EndRow do
          begin
            n:=0;
            if not Locate(Fields[pk].FieldName,trim(Excel.WorkSheets[1].Cells[iRow,StartCol].Value),[]) then
            begin
              Append;
              for iCol:=StartCol to EndCol do
              begin
                Fields[n].AsString:=Excel.WorkSheets[1].Cells[iRow,iCol].Value;
                n:=n+1;
              end; //end for icol
              if Flag=0 then
                Fields[n].AsString:=Excel.WorkSheets[1].Cells[iRow,1].Value;
              num:=num+1;
              Post;
            end; //end if
          UpdateStatus;
          end;//end for irow
        end;//end with
        showmessage('导入成功! 共导入'+inttostr(num)+'条记录');
        Excel.Quit;
       except
        Application.MessageBox('导入数据出错!请检查文件数据是否完整或输入的行/列数是否有误!', '提示信息', MB_OK+MB_ICONASTERISK+MB_DEFBUTTON1+MB_APPLMODAL);
       end;
    end;
    procedure TM_StudentForm.LoadBitBtnClick(Sender: TObject);
    var FileName:String;
        EndRow:integer;//取得Excel第一列不为空的最大行数
    begin
      FileName:='';
      OpenDialog1.Title:= '请选择相应的Excel文件';
      OpenDialog1.Filter:= 'Excel(*.xls)|*.xls';
      if OpenDialog1.Execute then
        Filename:=OpenDialog1.FileName;
      if Filename='' then
        Exit;    
      EndRow:=M_Datamodule.GetMaxRow(Filename,1);
      M_DataModule.LoadFromExcel(FileName,2,1,EndRow,5,M_DataModule.ADOStoredProc,'SP_Student_GetList',0,0);
    end;
      

  6.   

    songlian(雨) ( ) 信誉:100   正解