用delphi把数据库中的数据导出到电子表格中.再从电子表格中导入到数据库中.
还要考虑的是:一种是某个字段成批替换,用工号控制;另一种是插入新的记录.

解决方案 »

  1.   

    用DELPHI自带的Datapump进行处理吧。它可以进行不同数据库间数据的成批导入/出处理。需要建立BDE别名,一个是ORACLE,一个是EXCEL类型。还不会吗,多查资料吧
      

  2.   

    数据导出到电子表格中
    procedure TForm12.Button1Click(Sender: TObject);
    var
      eclApp, WorkBook: Variant;
      xlsFileName: String;
      i, j: Integer;
      FieldValue: String;
      SaveDialog: TSaveDialog;
        begin
          messageDlg('在数据备份前请确保关闭所有EXCEL表!',mtWarning,[mbok],0);
          SaveDialog:=TSaveDialog.Create(Application);
          SaveDialog.DefaultExt:='.xls';
          SaveDialog.Filter:= 'Excel文件|*.xls|所有文件|*.*';
       if savedialog.Execute=true then
          begin
             application.ProcessMessages;
             xlsFileName:= SaveDialog.FileName;
             form12.Caption:='数据正在备份中.....';
              try
               VarClear(eclApp);
                eclApp:=CreateOleObject('Excel.Application');
              except
                ShowMessage('您的机器里未安裝Microsoft Excel!');
                Exit;
              end;
              try
                 p1.Visible:=true;
                 WorkBook:= eclApp.workBooks.Add;
                 DBGrid1.DataSource.DataSet.First;
                 p1.min:=0;
                 p1.max:=DBGrid1.DataSource.DataSet.RecordCount+DBGrid1.Columns.Count;
                 p1.step:=1;
                 for i:=0 to DBGrid1.Columns.Count - 1 do
                  begin
                    eclApp.Cells[1,i+1]:=DBGrid1.Columns.Items[i].Title.Caption;
                  end;
                  for i:=0 to DBGrid1.DataSource.DataSet.RecordCount-1 do
                  begin
                     for j:=0 to DBGrid1.Columns.Count-1 do
                       begin                       FieldValue:=DBGrid1.Columns[j].Field.AsString;
                           eclApp.Cells[i+2, j+1]:=FieldValue;
                        end;
                    p1.stepit;
                    DBGrid1.DataSource.DataSet.Next;
                  end;
                if FileExists(xlsFileName) then
                  begin
                    if Application.MessageBox('文件已经存在!' + #13 + #10 +
                               '是否进行替换?', '提示', MB_OKCANCEL +
                               MB_ICONQUESTION + MB_SYSTEMMODAL) = IDOK then
                      begin
                        DeleteFile(PChar(xlsFileName));
                        WorkBook.Saveas(xlsFileName);
                       form12.Caption:='数据已成功备份';
                        showmessage('保存EXECL文件成功,路径为:'+xlsFileName);
                        WorkBook.Close;
                        eclApp.Quit;
                        eclApp:= Unassigned;
                      end
                      else
                      begin
                       form12.Caption:='数据未备份';
                      end;
                  end
                else
                  begin
                    WorkBook.Saveas(xlsFileName);
                    form12.Caption:='数据已成功备份';
                    showmessage('保存EXECL文件成功,路径为:'+xlsFileName);
                    WorkBook.Close;
                    eclApp.Quit;
                    eclApp:= Unassigned;
                  end;
              except
                screen.Cursor:= crdefault;
                form12.Caption:='数据备份出错';
                ShowMessage('不能正确操作Excel文件。可能是該文件已被其他程序打开或系統错误,需要注销您的计算机。');
                WorkBook.Close;
                eclApp.Quit;
                eclApp:=Unassigned;
              end;
            end;
       end;
      

  3.   

    导入到oracle数据库中
    procedure TForm14.BitBtn1Click(Sender: TObject);
    var ExcelApp,MyWorkBook: OLEVariant;
        i: Integer;
     begin
        try
          messageDlg('在批量增加前请关闭所有EXCEL表!',mtWarning,[mbok],0);
          ExcelApp:=CreateOleObject('Excel.Application');
          MyWorkBook:=CreateOleobject('Excel.Sheet');
          openDialog1.DefaultExt:= '.xls';
          openDialog1.Filter:= 'Excel文件|*.xls|所有文件|*.*';
        except
         application.Messagebox('无法打开Xls文件请确认已经安装EXCEL.','',mb_OK+mb_IconStop);
          Exit;
        end;
        if OpenDialog1.Execute then
        begin
        application.ProcessMessages;
        form14.Caption:='数据正在批量新增中....';
        MyworkBook:= ExcelApp.workBooks.Open(OpenDialog1.FileName);
        try
        i:=2;
        begin
          while trim(string(MyWorkBook.WorkSheets[1].Cells[i,1]))<>''do
                begin
                  table1.insert;
                  table1.FieldByName('C1').AsString:=MyWorkBook.WorkSheets[1].Cells[i,1].Value;
                  table1.FieldByName('C2').AsString:=MyWorkBook.WorkSheets[1].Cells[i,2].Value;
                  table1.FieldByName('C3').AsString:=MyWorkBook.WorkSheets[1].Cells[i,3].Value;
                  table1.FieldByName('C4').AsString:=MyWorkBook.WorkSheets[1].Cells[i,4].Value;
                  table1.FieldByName('C5').AsString:=MyWorkBook.WorkSheets[1].Cells[i,5].Value;
                  table1.FieldByName('C6').AsString:=MyWorkBook.WorkSheets[1].Cells[i,6].Value;
                  table1.FieldByName('C7').AsString:=MyWorkBook.WorkSheets[1].Cells[i,7].Value;
                  table1.FieldByName('C8').AsString:=MyWorkBook.WorkSheets[1].Cells[i,8].Value;
                  table1.FieldByName('C9').AsString:=MyWorkBook.WorkSheets[1].Cells[i,9].Value;
                  table1.Post;
                   inc(i);
                end;
          form14.Caption:='数据新增成功';
           end;
        except
          form14.Caption:='数据新增失败.';
          application.Messagebox('不能正确操作Excel文件,可能是該文件已被其他程序打开或系统错误,需要注销您的计算机!','',mb_OK+mb_IconStop);
          Exit;
        end;
        ExcelApp.WorkBooks.Close;
        ExcelApp.quit;
        ExcelApp:=Unassigned;
    end;
    end;