各位老师:关于把excel 导入到 sql server2000相应的表 做一个学生信息管理;班主任把新生的名册按一定格式放在Excel 文件, 字段"学号,专业,班级,姓名...",
如何通过 delphi 的界面 上一个按键编程把Excel 文件中的数据导入到 sql server2000中呢.

解决方案 »

  1.   

    一行行导入呀两个连接,两个数据集
    一个连接excel,一个连接sql,然后就和操作一般数据库一样了
      

  2.   

    excel导到数据库知道吧,其实就是用程序实现
      

  3.   

    别光在这里泛泛的说,你这样说等于没说,拿出代码来,人家给的分不低,要是行的话,我再给你100分,这个问题我也问过,没有得到满意的答复,有的还说这样一句话能搞定SELECT  *  INTO  ww1.dbo.ee 
      FROM  OPENROWSET('Microsoft.Jet.OLEDB.4.0',    
                                      'Excel  8.0;Database=c:\ee.xls',真能搞定吗,我希望在这里给答案的话,要真诚,共同进步。
      

  4.   

    bdmh 老师: 您好!如果我的Excel 文件名不固定,就存在两个数据集连接的路径问题, 再说,怎么在两个数据集上搬数据,我也不会.
      

  5.   

    你不动手,什么时候能教会你,你还怎么进步一行行导入呀 两个连接,两个数据集 //这两个还要解释吗
    一个连接excel,一个连接sql//这句话还有解释吗
    然后就和操作一般数据库一样了//操作一般数据库还要在这里一行行写吗
      

  6.   


    excel数据源的名称要动态变化的,不能写死的,你只需要改变excel的路径,然后组织好连接字符串就可以了在两个数据集上导数据,最简单的办法就是,逐条导入
    qSQL,qExcel两个数据集,假设都已连接好,并查询出数据
    while qExcel.Eof do
    begin  qSQL.Append;
      qSQL.FieldByName('字段').AsString := qExcel.FieldByName('字段').AsString;
    .
    .
    .
      qSQL.Post;
      qExcel.Next;
    end;
      

  7.   

    在Delphi中使用ADO连接Excel (转载)Delphi中使用ADO连接Excel有感 By panther666 今天在Delphi中使用ADO连接Excel(以前在一本书看过,复习一下-_-!!),有所收获,不敢独享。 第一部分: 1. 设置ADOConnection的ConnectionString属性的OLE DB的提供者要选择Microsoft Jet 4.0 OLE DB Provider(这本来是用于连接Access数据库的驱动程序,但也可打开Excel文件),按 "下一步"按钮 2. 选择数据库名称。注意:Excel的扩展名是*.xls,而默认文件类型是Microsoft Access 数据库(*.mdb), 我们就选择"全部文件(*.*)"吧,接着选择我们要连接的Excel文件咯!!如果在当前路径,就直接填2007.xls。 这时先别慌按 "测试连接"按钮,不然会出现错误对话框的。可以试试看,了解一下 ^_^ 3. 在"所有"选项卡中找到 "Extended Properties",双击它或者按"编辑值"按钮,设置Extended Properties为"Excel 8.0 "。 4. 我们返回"连接"选项卡,按 "测试连接"按钮。测试连接成功!!! ^_^ 最后,设置完成后的ConnectionString中的各项参数为: Provider=Microsoft.Jet.OLEDB.4.0 Data Source=2007.xls //因为在当前路径 Extended Properties=Excel 8.0 Persist Security Info=False 第二部分: 接着就用ADOTable,ADODataSet和ADOQuery连接到刚才的ADOConnection,当然你可以直接设置ADOTable,ADODataSet或ADOQuery的ConnectionString属性。 1. ADOTable设置: a. ADOTable的TableName属性值:系统自动生成Excel的Sheet1$,Sheet2$和Sheet3$。直接Active设置成true,系统会报告SQL语句格式错误等信息。 b. 找到TableDirect属性,设置为True。因为,访问Excel文件是直接的数据文件访问,不是通过SQL语句来操作游标访问的。接着将Active设置成true。成功了!! ^_^ c. 可以不使用TableDirect属性,将TableName属性中的Sheet1$,Sheet2$和Sheet3$分别改成[Sheet1$],[Sheet2$]和[Sheet3$]。 对,就是加"[]"就行了。 2. ADODataSet设置: a. 只需要将CommandType属性设置为cmdTableDirect,选择工作表,Active设置成true就成功了。 b. 也可以将CommandType属性设置为cmdTable,将CommandText属性中改成[Sheet1$],[Sheet2$]和[Sheet3$]。 3. ADOQuery设置: SQL属性如下: select * from [sheet1$] 总结:复习以前所学的,尝试新的连接方法,有益于加深记忆。我发现工作表名后面都要多加一个$符号,还有就是打开ADOTable,ADODataSet或者ADOQuery以后,它们的CursorType自动变成ctStatic。
      

  8.   

    谢谢bdmh老师的提示,前两步我都会,再说最后一步,就是数据可以读出,但循环的写到目的表里总写不进呵.
    就好象在工资表中计算税金后写到表的税金字段,循环写不进,只一条按一下按钮的写了,太笨了,不好意思,还请您多赐教.
      

  9.   


    你只需要把Data Source=后的内容作为一个变量就可以了
      

  10.   

    var
    x:string;
    begin 
     OpenDialog1.Execute;
     edit2.Text:=opendialog1.FileName;
     x:=COPY(edit2.Text,length(trim(edit2.Text))-3,4);//指定excel路径
     if X='.xls'  then
     begin
       with adoquery1 do
         begin
         Active:=false;
         ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source='+edit2.Text+';Mode=Share Deny None;Extended Properties=Excel 8.0;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";';
         ConnectionString:=ConnectionString+'Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;';
         ConnectionString:=ConnectionString+' OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don#39t Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False';
         Close;
         SQL.Clear;
         SQL.Add('select * from [Sheet1$]');
         ExecSQL;
         Open;
         end;
       end
      

  11.   


    写不进去的具体是什么表现,报错吗,是不是qExcel到了最后了,qExcel.First先
      

  12.   

    ADODataSet1.Close;   //导入
    ADODataSet1.CommandText:='select * from tb';
    ADODataSet1.Open;
    ADODataSet1.DisableControls;
    try
      ADOQuery1.First;
      while not (ADOQuery1.Eof)  do
      begin
          ADODataSet1.Insert;
          ADODataSet1.FieldByName('字段').AsString:=trim(ADOQuery1.fields[0].AsString);
          ADODataSet1.FieldByName('字段').AsString:=trim(ADOQuery1.fields[1].AsString);
          ADODataSet1.FieldByName('字段').AsString:=trim(ADOQuery1.fields[2].AsString);
          ADODataSet1.FieldByName('字段').AsString:=trim(ADOQuery1.fields[3].AsString);
          ADODataSet1.FieldByName('字段').AsString:=trim(ADOQuery1.fields[4].AsString);
          ADODataSet1.FieldByName('字段').AsFloat:=ADOQuery1.fields[5].AsFloat;
          ADOQuery1.Next;
      end;
        ADODataSet1.Post;
        Application.MessageBox('數據導入已完成!', '提示', MB_ICONINFORMATION);
        edit2.Text:='';
     finally
       ADODataSet1.EnableControls;
    END;
    ADODataSet1.Close;
    end;很麻烦,但是能实现导入的效果
      

  13.   

    是在说我吗?
    你的那段在Delphi中使用ADO连接Excel (转载)很好,谢谢。 
      

  14.   

    bdmh老师: 在delphi 界面,我做两个ADOconnect1 连到sql server 2000是可以,当另一个ADOconnect2 连到excel 还可连,
    当连接Adoconnect2 的Adotable1 的属性 Active 设为ture 时就
    出现不支持此接口 
    所以我的excel 数据都没能读到 delphi 的界面来.
      

  15.   

    bdmh老师:按你转载的方法,结果也连不了,系统提示"找不到可安装的ISAM"这是什么意思,我看不明白.
      

  16.   

    挺好的方法,要是结合dbexpress就能导入很多的数据库了,不光mssql.
      

  17.   

    如果你的sql和应用程序装载同意台电脑上的话,可以用
    select type2,type3 into a from  OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 5.0;Database=c:\ee.xls', 'SELECT * FROM [sheet1$]') ,我试过了,但是跨机器我还没有试好,好像是要设置链接服务器。
      

  18.   

    谢谢众多的老师帮助,使得问题最终解决.特别是wsxcdx和bdmh 两位老师的具体指导,非常感谢.