作者:铭娟佑廷雅冰 | 来源:互联网 | 2023-08-29 21:44
在局域网共享VFP数据库环境下,VFP数据库安装在服务器电脑上并设置为共享,现在需要对共享的VFP数据库中的dbf表进行删除记录操作,但如果有用户正在使用该表,则服务器上无法进行该表的删除记录
在局域网共享VFP数据库环境下,VFP数据库安装在服务器电脑上并设置为共享,现在需要对共享的VFP数据库中的dbf表进行删除记录操作,但如果有用户正在使用该表,则服务器上无法进行该表的删除记录操作。在这种情况下,如何设置命令才能在服务器上对共享表进行删除记录操作?(或者在服务器上通过命令,强制关闭共享的该表,然后再在独占环境下进行表删除操作,删除操作完成后再恢复共享。)敬向电脑专家请教,不胜感激!
11 个解决方案
既然有局域网了,建议使用VFP+SQL
SQL的共享性好.安全性好.
DBF表,共享性差.安全性差.
我以前,也在想VFP的DBF的共享的,后来,学习了VFP+SQL,才知道SQL的伟大.
用SET DELE ON
DELE
在没有其它用户使用时PACK
主程序设置set dele on
在表单中要删除可直接delete,不用pack
所有dbf可以写一专用程序,定期pack
我过去不知道有set dele on命令可用,一直使用set filte to !deleted()。是不是set dele on命令等同于set filte to !deleted()命令?
另外,如果某一个共享表要定期进行删除后的pack操作,但如果一直有用户在占着这个表(运行文件一直不关闭),能否在服务器强制关闭共享的该表,然后再在独占环境下进行表pack操作,删除操作完成后再恢复共享.敬向电脑专家请教,不胜感激!
如果一直有人没有退出,可以在服务器上,选中“我的电脑”,右键,管理,共享文件下面,可以看到哪个用户打开了哪个文件,此时可以点右键,强行关闭,但最好是通知用户退出比较好,免得万一有人正在保存数据使得表被损坏
如果有人一直打开着,肯定不能独占打开。
至于如何通知,要想智能一点,可以这样,客户端用个 Timer 控件定时读到某个表的内容,此表中包含用户客户端登录状态,你可以在服务端装将此表中某个字段改为0(0只是为了举例,你可以用其他值),客户端的 Timer 当读到本客户端的这个字段为0时就自动退出。
这样你可以在服务端将所有用户的这个字段均改为0,并当你执行独占时,所有客户端的对应的此字段值为-1,执行 pack 后再改为1,客户端登录时检测此字段为-1时,提示服务器正在维护,请稍后登录。
大概就是这个思路,具体写时还要做些相应的容错等多方面考虑。
SQL的CursorSetProp太烦人了,我一直不太习惯,Dbf还是好用很多