interbase使用外部表频繁导入数据库,外部文件被占用问题

jazhi 2009-07-16 10:27:06
因为需要插入数据库,
数据量比较大,一次写入外部文件,大概好几百m,速度太慢,
所以采用分批写入。
使用如下循环
其中外部文件a与外部表b关联。

for
把数据写入外部表的外部文件a,
使用sql链接
sql=然后使用insert into 内部表名c select * from 外部表名b。
exesql。
end

发现循环只能执行一次,第二次开始写外部文件a的时候,就提示a文件被其他进程占用,无法写入。
通过文件打开工具发现文件a被ibserver.exe占用。但是此时第一次的数据插入已经成功了啊。
内部表c已经成功插入数据了。
每次循环结束 怎么样才能释放对外部文件a的占用啊??太郁闷了。

...全文
75 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
jazhi 2009-07-16
表b定义 create table b extern file a {....}.
内部表c和b结构相同。结构没有问题。

循环中
关于写入文件,因为每行单独写入文件效率比较差,所以都是写入tMemoryStream,然后一次性写入文件savetofile。
每次都是savetofile时候提示,文件已经被其他进程占用,用文件打开监测工具发现时ibserver.exe占用。

插入时候使用TQuery tsql
try
tsql.sql.text := "insert into 内部表名c select * from 外部表名b";
tsql.execsql;
except
{
异常机制
}

是不是每次插入结束要干些什么操作啊?
那位兄弟知道怎么解决啊?



回复
jazhi 2009-07-16
用的是bde
回复
jazhi 2009-07-16
用的是bde
回复
相关推荐
发帖
其他数据库
创建于2007-09-28

2189

社区成员

其他数据库开发 其他数据库
申请成为版主
帖子事件
创建了帖子
2009-07-16 10:27
社区公告
暂无公告