小弟,急求解决该问题的方法

解决方案 »

  1.   

    使用一个ADOConnection 来建立一个EXCEL的链接:
      ADO.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
         + FExcelName.Text
       +';Extended properties="Excel 8.0;HDR=YES;IMEX=1";Persist Security Info=False';使用一个ADOQUERY通过上面的连接来访问EXCEL的的一个SHEETADOQuery.Close;
    ADOQuery.SQL.Text := 'select * from [Sheet$]';<---这里的Sheet$是对应Excel的一个SHEET
    的名字; 可以通过 ADO.GetTableNames(m_List, false) 来获取对应EXCEL的所有SHEET名字;
    ADOQuery.Open;
    剩下就是你自己去发挥了
      

  2.   

    说的好象是连接access数据库的连接,可以用select * from [Sheet$],insert 语句的麻烦举个例子.
      

  3.   

    我现在写了一段代码
    procedure TForm1.Button1Click(Sender: TObject);
     var i,j:integer;
        // SAll:integer;
            s0,s1:string;
        // s2: Tdatetime;
         iss:string; 
    begin
       if form1.OpenDialog1.Execute then
          begin
              try
           form1.ExcelApplication1:=Texcelapplication.create(application);
           form1.ExcelWorkbook1:=Texcelworkbook.create(application);
           form1.ExcelWorksheet1:=TexcelWorksheet.create(application);
           form1.ExcelApplication1.connect;          except
                  messagedlg('Excel  没有安装!',mtError,[mbYes],0);
                  abort;
              end;
            try
               form1.ExcelApplication1.Workbooks.Open(form1.OpenDialog1.FileName,
                 null,null,null,null,null,null,null,null,null,null,null,null,0);   //打开指定的EXCEL 文件
                except            ExcelApplication1.Disconnect;//出现异常情况时关闭
                ExcelApplication1.Quit;
                showmessage('请选择EXCEL电子表格!');
                exit;
              end;
               form1.ExcelWorkbook1.ConnectTo(form1.ExcelApplication1.Workbooks[1]);//ExcelWorkbook1与Eexcelapplication1建立连接
               form1.ExcelWorksheet1.ConnectTo(form1.ExcelWorkbook1.Worksheets[1] as _WorkSheet);//Excelworksheet1与Excelworkbook1建立连接
              //  SAll:= ExcelWorksheet1.UsedRange.Rows.Count;
                 j:=1;
              for i:=2 to  1000   do      //  利用取得excel表格内容的行数进行循环
                  begin
                     
                       if trim(excelworksheet1.cells.item[i,1])<>'' then
                           begin
                              iss:=inttostr(i);
                               s0:=trim(excelworksheet1.cells.item[i,1]);
                               s1:=trim(excelworksheet1.cells.item[i,2]);                           form1.Label2.Caption:='正在导入第'+iss+'条数据,请等待......           ';
                               form1.Label2.Font.Color:=clred;
                               form1.Label2.Refresh;
                              //   showmessage(s0);
                             //  s2:=StrToDate(excelworksheet1.cells.item[i+1,3]);    }
                                with form1.Query1 do
                                   begin
                                     close;
                                     sql.Clear;
                               {sql.add('insert into fjhd_yhw_mjs (ZCRQ) values('+''''+s0+''''+')'); }
                                 sql.Add('insert into fjhd_yhw_mjs (ZCRQ,LWDW) values (:ZCRQ,:LWDW)') ;
                                 form1.Query1.ParamByName('zcrq').AsString:=s0;
                                  execsql;
                                     end;
                end;
          end;
                 form1.Label2.Caption:='              数据导入完毕!         ';
                  form1.Label2.Font.Color:=clred;
                  form1.Label2.Refresh;
                 ExcelApplication1.Disconnect;
                 ExcelApplication1.Quit;
             end;
        end;但是为什么提示出错'Project1.exe raise exception class EdatabaseError with message 'Query1:Parameter 'zcrq' not found'.process stopped.use step or run to continue.’
      

  4.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DB, ADODB;type
      TForm1 = class(TForm)
        ADOConnection1: TADOConnection;
        Button1: TButton;
        Memo1: TMemo;
        ADOConnection2: TADOConnection;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
        strSQL:string;
    begin
      try
        strSQL:='drop table [excel 8.0;database=G:\111.xls].[sheet11$]';
        ADOConnection2.Execute(strSQL);
        ADOConnection2.Connected:=true;
        //strSQL:='select * into [excel 8.0;database=G:\111.xls].[sheet1] from orders';
        //ADOConnection1.Execute(strSQL);
        //adoconnection1.Connected:=true;
        showmessage('SSS');
      except
        on e:exception do
        memo1.Lines.Add(e.Message);
      end;
    end;end.我这里连接的是Access数据库,你可以自己修改一下
      

  5.   

    woshihaoge(支离破碎)比较厉害,一来就是个drop命令,我所要提取的只是某个表中的特定字段值,好象你这个不管用啊,呵呵.
      

  6.   

    DROP是用来删除原来存在的表的,因为如果你要执行的操作如果原来存在相同名字的表的话,会报错,所以我的想法我觉得是对的,至少在我的程序里需要这样做.
    如果你只要几个字段的话,也是一样的啊,SELECT A,B,C,D FROM ......数据库操作是一样的.
      

  7.   

    呵呵,谢谢woshihaoge(支离破碎),你说的drop的用法我知道,我是没搞懂我那段代码出错在什么地方!
      

  8.   

    你是不是在form1.Query1加了字段了,清空再重新加一遍或者不加,试试,我遇到过类似的问题。
      

  9.   

    david7787()你的意思是不是在Params里加了字段?
      

  10.   

    'Query1:Parameter 'zcrq' not found
    可能是代碼代碼里的'zcrp'和query1的Params里的字段不一致