为什么出现打开文件太多的错误?(200分)

  • 主题发起人 主题发起人 Huanghua
  • 开始时间 开始时间
H

Huanghua

Unregistered / Unconfirmed
GUEST, unregistred user!
我在数据表复制时,因为是主从表(有多个从表),而且想显示进度,所以采用的是
一个一个记录复制的,为了避免使用多个TTable控件,我采用了一个过渡表,在复制主表记录的时候,用到某个从表就将从表的表名和库名设定,按照主表的关键
字检索从表中的对应记录(主表中一个记录对应从表中多个记录),然后复制从表
中的记录.问题是:
如果我我的源数据在软盘(写保护)或硬盘上,复制没有问题,一旦我将数据源刻,到光盘上,从光盘上复制就有问题了,系统报错说打开文件太多,IDAPI中最大打开文件句柄数太少,而将该限制放宽后,仍会初类似的错,只不过复制的记录多一些,我在每次改变过渡表库名及表名前后都用了aCTIVE := fALSE 和ACTIVE
:= tRUE,请教各位大虾是何问题?小弟谢了,奉上200大分,望笑纳!
 
但有一点你也可能忽略了,在未刻到CD上时,你的所有操作都有虚拟内存(即HDD)在
进行交换,当然运行时就无问题。但一旦用到了CD后,系统就将CD作为待交换的
虚拟内存,可是CD目前只是可读的,不能进行写操作,故就出现了你所说的问题。
 
>>>系统就将CD作为待交换的虚拟内存 ?????
瞎说了吧?

bug的可能性大一点.
 
paradox table?
 
是临时文件 NOT 虚拟内存
 
我的表是paradox本地表,没有用alias,用的是目录名和表名的组合,我的感觉好像是
因为过渡表名不断的改变其路径名和表名而耗尽了idapi中能容纳的句柄,但改用动态
过渡表(定义TTable变量,用到时创建,不用时Free),仍出现类似的问题.不知是何原
因?
 
复制? 怎么个复制法? 把数据库从源搬到目的地? 还是存在合并?
如果是直接搬过来, 那干吗不用直接文件copy?
如果是文件合并, 那用query写insert, update效率也比用table高多了.

 
很同情huanghua的说,
我也遇到了同样的问题.
我作的是一个光盘数据库发布系统,就是把符合要求的数据经过处理后存放到光盘上,
然后把光盘发布出去,使用查询系统进行检索.
数据库采用Foxpro的dbf格式,用目录名作为databasename,在查询时,遇到的问题与
huanghua 一模一样,确实对于源数据在硬盘或写保护的软盘时都没问题,就是对光盘不行.

我的看法:
好象是delphi的一个bug,我作了一个测试,发现问题出在dataset.open这个操作
上,与其它操作无关.测试程序很简单,只有一个button,一个Table(Query我也试过,一样)
databasename为目录名(在光盘上的),tablename为一个dbf文件.循环执行open;
close 操作,不一会就出问题了,去掉open语句,就没问题了----可就是打不开数据库
了,wuwuwu~~~:-(
我企图问delphi的技术支持,他们要俺的用户卡,虽然俺是正版,可用户卡早就不见了
我惨!

我的解决办法:(实在算不上方案,但可以解决你的燃眉之急)
因为客户摧着交活,情急之下,只好在每次查询之前,生生地将文件由光盘复制到
硬盘上,然后再对硬盘的文件执行open等操作,这样就OK了.
这个做法让俺GF知道后,从此把我的项目称为"硬盘数据库发布系统",好没面子!
你千万别让你的BOSS知道你的内幕做法,否则,BOSS就要怀疑你的能力了.
BTW:为了说起来好听,我对客户说,"由于光盘的速度比硬盘慢,我使用了硬盘作为
数据缓冲区,每次查询时,先查硬盘,若没有,再查光盘..."否则,客户就要对查询时
硬盘转个不停感到怀疑了.不过为了不过于频繁的拷贝,删除文件,我倒真给他加了
一个硬盘缓冲区管理模块,好在不长,就几十行.
将来你如果有了什么好法子,别忘记通知我哦!
 
用odbc试试, 应该就可以了:-)
 
接受答案了.
 
后退
顶部