在Delphi中,我想把excel的数据逐条读入到数据库中去,不过读的时候是按列读的,比如先读出第一列字段的值,再读第二列。而写到数据库时,是按行写的,比如是一条纪录一条纪录读的。请问我怎么写这个循环啊?还有把excel单元格的值,保存到一个变量后,我怎么传递这个变量到insert语句中去了啊?很急啊,各位高手帮我看看把。

解决方案 »

  1.   

    type
           PA = ^TPASN2_NEW;
           TPA = record
            A: String;
            B: String;
         end;          procedure TForm1.loadExcel(fileName: String);
         var FA: PA;
         begin
          //读Excel文件
          ExcelApplication1.Visible[0]:=false;
          Excelapplication1.Workbooks.Open(OpenDialog1.FileName,null,null,null,null,null,null,null,null,null,null,null,null,0);
          WorkBk  := ExcelApplication1.WorkBooks.Item[1];
          WorkSheet := WorkBk.WorkSheets.Get_Item(1) as _WorkSheet;
          WorkSheet.Cells.SpecialCells(xlCellTypeLastCell,EmptyParam).Activate;
          X := Excelapplication1.ActiveCell.Row;
          Y := Excelapplication1.ActiveCell.Column;
          RangeMatrix := Excelapplication1.Range['A1',Excelapplication1.Cells.Item[X,Y]].Value;
          //按行进行循环
          for iRE:=2 to X-2 do
          begin
            New(FA);  //此处我创建了一个结构体指针用来存取信息
            FA^.A := Trim(RangeMatrix[iRE+2,2]);
            FA^.B := Trim(RangeMatrix[iRE+2,2]);
    //进行数据存入数据库
    with Query1 do
    begin
      Close;
      sql.text := 'insert into table1 (a,b) values(:a,:b)';
      Parameters.ParamByName('a').value := FA^.A;
      Parameters.ParamByName('b').value := FA^.B;
      ExecSql;
    end;
          end;
         end;大致的方法就是这样的,我目前就是这么处理的,运行时还可以.
    你可以根据你需要的进行调整.目前我分几个部分:
       1.加载Excel文件到内存中(因为加载速度很快,用完就把Excel关了)
       2.保存数据(注意要用事务控制,如果出错可以回滚)
      

  2.   

    补充: 你要 uses Excel2000  这个单元,否则会提示错误.