大伙帮忙分析一下:   
主要代码如下,100000循环是为说明问题加的,程序界面有一按钮来执行把所选目录中的照片全部导入到数据库中,
现状:如果连续导入超过10000张照片左右,虽然代码仍然在正确执行插入操作,但照片就插入不到数据库中了(数据库中的照片记录数不变了),退出该窗体,重新打开,在继续执行导入操作,可以正常导入,但执行到10000条左右,还是上述现象。数据库是ORACLE数据库,难道是内存释放的问题?如下释放代码有什么问题吗?加jpg:=TJPEGImage(nil)有意义吗?这句还没来得及试;    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.   


    1、代码没有问题,是不是oracle的空间自动分配不足造成的,建议检查下;
    2、建议将这种循环改下,改成1000次为一批,分100此循环进行看看,每个批次间加个sleep(?)
      

  2.   

    开启事务,每插入10000左右的数据,就提交一次事务,然后再次开启事务,再次插入,再次提交,如此反复就行了。你遇到的问题,可能是Oracle数据回滚段满了导致的结果。回滚段是Oracle在一个事务提交之前为事务回滚而准备的空间,这个空间是有一定大小的,当一个事务所操作的数据超过了回滚段所能容纳的数据,就会出现回滚段错误而导致事务被终止。为了安全起见建议你插入到8千左右条的时候就提交一次
      

  3.   

    我用的是数据集cdsCardPIC来进行INSERT,没用SQL语句执行,怎么用事务呢?
    另外在图片插入不进数据库时,只有退出程序后,在重新打开程序执行才可以正常导入
    谢谢楼上几位,加sleep(?)的方式我明天试一下
      

  4.   

    每插入200条记录就sleep(100),现象如故。
      

  5.   

    应该就是回滚段满了的问题,不清楚你用的是什么连的数据库,你上网找找使用你连接数据库的东西如何开启事物和提交事物。
    或者,你可以加大oracle的回滚段,不过这不能解决本质问题。