INSERT之前的Foxpro 7测试'文件正在使用中'

时间:2011-08-05 16:54:05

标签: visual-foxpro foxpro

我有一个VFP TABLEUPDATE()函数的包装器,除其他外,它记录了对其他表的添加和更改。由于多个用户在整个应用程序中保存和编辑,因此日志表会偶尔崩溃,导致我的日志表中出现“文件正在使用中”错误。调用INSERT时表未打开。

我有理由相信没有进程只打开文件。理想情况下,我想

  • 检查文件是否可以打开
  • 使用INSERT INTO
  • 写入文件
  • 尽可能快地离开

永远不会编辑记录,只能插入记录。有没有办法在发出INSERT之前测试表?

3 个答案:

答案 0 :(得分:1)

如果您收到文件正在使用(错误3),则根据Visual Fox手册:您已尝试对当前打开的文件使用USE,DELETE或RENAME命令。所以你说DELETE或RENAME是不可能的。
它必须是USE IN SELECT(“cTableName”)。 如果EXCLUSIVE为OFF,则无需检查文件是否已打开 在INSERT之前不要打开表。只需执行INSERT,之后就不需要关闭表了 所以你可以摆脱UNLOCK IN cTableName USE IN SELECT(“cTableName”)。

答案 1 :(得分:0)

我的第一个想法是你把桌子打开的时间太长了,而且你添加的任何初步检查只会让桌子更长时间。 INSERT之后你关闭桌子吗?

您说日志表在流程开始时未打开。这意味着Fox将以静默方式为您打开表,以便SQL可以运行。你打开它是独家的,你是否明确地关闭它?

答案 2 :(得分:0)

您是否尝试在插入例程中锁定表格?

IF FLOCK("mytable")
   INSERT INTO ......
ELSE
  WAIT WINDOW "Unable to lock"
ENDIF

也许把它放到DO WHJILE循环中?