我有一个VFP TABLEUPDATE()函数的包装器,除其他外,它记录了对其他表的添加和更改。由于多个用户在整个应用程序中保存和编辑,因此日志表会偶尔崩溃,导致我的日志表中出现“文件正在使用中”错误。调用INSERT时表未打开。
我有理由相信没有进程只打开文件。理想情况下,我想
永远不会编辑记录,只能插入记录。有没有办法在发出INSERT之前测试表?
答案 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循环中?