首先连接远程数据库没有问题
ADOConnection1.ConnectionString :=
      'Provider=SQLOLEDB.1;Password=密码;User ID=sa;Initial Catalog=库名;Data Source=' +
      IP地址或域名 + ';Persist Security Info=True';请教以下代码错在哪里?
    ADOConnection1.Connected := true;
    try
      adoquery1.Close;
      adoquery1.SQL.Clear;
       strsql := 'item,gsitem,客户货号,order_id,invoice_id; //数据库待写入字段
       strxls := '序号,公司货号,客户货号,合同编号,发票号; //从EXCEL读取的字段
////字段对应无错, 在ACCESS上测试可以导入
      sSql :=
        'INSERT INTO 库名.dbo.' + 表名 + ' (' + strsql + ')' + ' SELECT' +
      ' '+  strxls +''+ ' FROM [excel 8.0;database=' + EXCEL地址 + '].['+表名+'$]';
      adoquery1.Parameters.Clear;
      adoquery1.ParamCheck := false;
      adoquery1.SQL.Text := sSql;
      adoquery1.Execsql;//下面是执行结果
      MessageBox(..'成功导入EXCEL!', ..)
    except
      ............导入失败
试过如下方法:
1.将provider "Initial Catalog=库名;"去掉,不行
2.将sSql "'INSERT INTO 库名.dbo."的 "库名." 或"库名.dbo."去掉,不行
3.表里面有自动编号字段id, 在strsql 及 strxls 都加上id, 不行

解决方案 »

  1.   

    你的是ACCESSE的JET SQL语句,真正的SQL的语句是这样INSERT INTO mytable(x_a,x_b,x_c)
    SELECT 工号,姓名,部门
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
      'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]
      

  2.   

    insert into mytable, 需要"库名.dbo.表名" 吗?
      

  3.   


    procedure TForm1.Button1Click(Sender: TObject);
    var
    s,s1,s2,sexcel,str,fname:string;
    begin
     s1:='x_eng';{SQL中接收数据的表名} s2:='x_a,x_b,x_c';{SQL数据表的字段} sexcel:='工号,姓名,部门';{EXcel中的字段} str:='c:\123.xls';{EXcel文件名} FName:='sheet1';{EXcel内部的表史} s:='INSERT INTO '+s1+'('+s2+')'+' SELECT '+sexcel+' FROM openrowset(''Microsoft.Jet.OLEDB.4.0'', ''Excel 8.0;Database='
         +str+''','+'''select * from ['+Fname+'$]'')';
     ADOQuery1.SQL.Text:=s;
    {
     最后的显示结果
    INSERT INTO x_eng(x_a,x_b,x_c) SELECT 工号,姓名,部门 FROM openrowset('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=c:\123.xls','select * from [sheet1$]')
    }end;
      

  4.   

    最后这样:with ADOQuery1 do begin
     close;
     sql.text:=s;
     Execsql;
    end;
      

  5.   

    1楼的那种,并把5.0改成8.0
    在Access中可以是应为都是Microsoft.Jet.OLEDB.4.0的驱动