需要把几万张照片全部导入到数据库中,
如果连续导入,在导入6000张照片左右时,在执行Applyupdates(0)时报‘External Exception EEFFACE’。退出程序,重新运行,继续执行导入操作,可以正常导入,困惑中...大家帮忙分析一下清空数据库重新导入,仍然是在6000左右(与原来的数字不同)时报‘External Exception EEFFACE’,照片数据没有问题,数据库表空间也应该没问题。开发工具DELPHI7,未打补丁,oracle数据库程序代码大致如下,仅为说明问题:  var  
  jpg:TJPEGImage;  
  i:integer;
  begin  
  for i:=1 to 100000 do
  begin
  jpg:=TJPEGImage.Create;  
  jpg.LoadFromFile( 'd:\a.jpg ');    with cdspic do
  begin
  insert;
  fieldbyname(zhaopian).assign(jpg);
  post;
  Applyupdates(0);
  jpg.free;  
  end;
  end;
end;

解决方案 »

  1.   


    var   
      jpg:TJPEGImage;   
      i:integer;
    begin 

      jpg:=TJPEGImage.Create;     
    try
      for i:=1 to 100000 do
      begin
        jpg.LoadFromFile( 'd:\a.jpg ');   

        with cdspic do
        begin
      insert;
      fieldbyname(zhaopian).assign(jpg);
      post;
      Applyupdates(0);
      end;
       end;  
    finally
      jpg.free;   
    end;
    end;
    楼主这样试试
      

  2.   

        用楼上的方法也是一样,是耗内存很厉害,每插入一张照片(120K)大概要耗80K甚至更多内存,现在就是先不想改变数据的存储方式,有什么好的办法解决这个问题吗?或者是如何优化ORACLE? 在循环中还有其它操作,包括打开数据集的操作,发现每打开数据集内存就会增加1兆多,如何释放数据集占用的内存?
      

  3.   

    Applyupdates(0)后dataset占用的缓存怎么释放?
    dataset.data:=null;不起作用
    dataset.emptyupdate;只释放了一点点;
      

  4.   

    我也想找相关释放的指令,可以找不到,但打到一个把内存转到虚拟内存的,也许有点用,但好象会影响效率
      if Win32Platform = VER_PLATFORM_WIN32_NT then
      begin
        SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
      end;