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的占用啊??太郁闷了。

...全文
141 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
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

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧