开发环境 D6+prardox控件用的BDE标签下的TQuery问题在这里,我的表 picture.db 里面只有2个字段  id和picture,类型分别是 I 和B,其中I是主键
,表里面有10000条数据,picture.mb的大小是 600MB,我只是运行一条简单的命令,所有的id+1, query1.close;
query1.sql.clear;
query1.sql.add('update picture set id = id + 1');
query1.execsql;但是问题来了,这个生成的临时文件达到了400+MB,而且运行过程中,我的程序直接死机状态,就是执行的过程非常非常地慢这个表,我可能要随机插入很多的纪录,插入记录后面的记录的id号都要自动+1的,如果都是这种执行速率,那我的程序就崩溃了请问这个问题怎么解决哦?                                          

解决方案 »

  1.   

    直接这样子操作,别说是Paradox,就算是MSSQLServer等数据库也一样会生成大量的事务日志.建议进行事务分割,即可以,将这10000条记录,每500条一个事务来处理.
      

  2.   

    to unsigned 关键是这么做,即使我的单位1000条,也好耗时20s左右。。而且现场使用的还是Win98的老古董,我怕吃不消实验了一下,没有实际的解决问题,但是找到了一个折中的方法我发现,进行 update picture set id = id + 1 的操作确实很耗费时间,而且出现了800MB的临时文件,我这里 7000条记录需要 4~6分钟不等的时间,机器06年的中等配置。当操作完成时,临时文件会自动消失的,然后这时候你再次进行这个操作时,耗时不会超过500ms,我认为是第一次操作将需要操作全部载入内存,后面的操作就会很快,具体的原理不太清楚,感觉应该是类似的操作。所以,现在程序启动的时候直接进行    update picture set id = id   ,就是耗时间把东西载入进去,反正载入好之后,后面的操作都不会超过500ms,也在我的承受范围之内了,呵呵,算是一个投机取巧的办法了暂时不结贴,看看还有没有更好的方法
      

  3.   

    崩溃了
    原来上面载入一次速度快都是错觉,那是因为我的图片数据都被损坏或不见了update picture set id = id + 1 之后,只有id[1..16]的数据有图像,其他的都报错 JpegError #41,就是没有图像或者图像数据不对,我说怎么都小于500ms了呢这个paradox,郁闷死了。。
      

  4.   

    经过测试,基本上可以确定DB库有问题表 Picture  字段  id picture  分别是 I 和 B类型D6+TQuery 对其进行操作此次Picture表只是存储240条记录,Picture.mb  大小为14M,所有图像均可以查找到现在进行如下操作
    Query1.close;
    Query1.sql.clear;
    Query1.sql.add('update Picture set id = id');     //只是为了测试一下update操作
    Query1.ExecSql;
    执行完操作后,只有 1~16条记录可以查看到图片,其他则全都是  JpegError #41 ,应该是其他的数据遭到了破坏,不知道这样说对不对大家还有什么高招嘛??