| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2674 人关注过本帖
标题:防止独占模式打开
只看楼主 加入收藏
ben740219
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-2-21
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:10 
防止独占模式打开
在网络上共享的DBF表,如果某人装了VFP9.0以独占模式打开看,则其他人用VFP软件就无法存取该表,如何解决?
搜索更多相关主题的帖子: 如何 软件 网络 
2017-02-22 15:47
红星二锅头
Rank: 8Rank: 8
等 级:贵宾
威 望:46
帖 子:491
专家分:754
注 册:2016-8-25
收藏
得分:0 
SET EXCLUSIVE OFF
USE Temp.Dbf SHARED

团队红星二锅头,队长王猛,领队李冲,顾问杨伟,副队张挺,外联马彪,内勤韩秀,人事顾闯,财务赵魁,后勤周强
2017-02-22 16:50
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:20
帖 子:391
专家分:896
注 册:2004-11-23
收藏
得分:1 
SET EXCLUSIVE OFF  &&设置当前系统自由表打开方式为共享,即非独占打开。在此命令后,打开的自由表均为共享方式打开,无需在use命令后用shared的子句。
USE Temp.Dbf SHARED  &&用共享方式打开temp.dbf,只有锁定后才能修改。
2017-02-22 16:54
hepingfly
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:15
帖 子:195
专家分:657
注 册:2015-5-21
收藏
得分:1 
如果文件确实存在(可预先探测),再使用 ON ERROR 看看如何?
   aa=.f.
   on error tt()
   use (带路径的 dbf)
   if aa
      MESSAGEBOX('文件已经被占用')  
      return
   endif
      
  function tt
   aa=.t.
  endfunc  

星际花草
2017-02-22 18:05
厨师王德榜
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:199
帖 子:992
专家分:4966
注 册:2013-2-16
收藏
得分:2 
可否把自己的数据升级为DBC格式,对外则只提供一个视图给他?这也是一个思路。
2017-02-22 22:15
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用ben740219在2017-2-22 15:47:20的发言:

在网络上共享的DBF表,如果某人装了VFP9.0以独占模式打开看,则其他人用VFP软件就无法存取该表,如何解决?

某人某某人都可以随便用USE打开共享的DBF表?先解决共享DBF表管理方面的问题。
2017-02-23 07:05
ben740219
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-2-21
收藏
得分:0 
吹水佬:把DBF读入SQL?还是其他方法,请指点。我也是觉得文件夹共享,然后 用 “USE +服务器IP+文件夹+文件”这种方法比较低端 ,只要知道文件夹共享密码的人除了不能改文件,谁都可以独占打开
2017-02-23 15:21
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用ben740219在2017-2-23 15:21:13的发言:

吹水佬:把DBF读入SQL?还是其他方法,请指点。我也是觉得文件夹共享,然后 用 “USE +服务器IP+文件夹+文件”这种方法比较低端 ,只要知道文件夹共享密码的人除了不能改文件,谁都可以独占打开

简单的中小型数据库应用,用共享文件(F/S)架构也是可行的选择。
特点是投入小(现成的),设置维护简单方便。
但要做得好就要花点心思,视实际情况,选择一种搞好的方案。
通常的做法:
1、设置共享文件夹时,设置的共享名尾部加“$”字符,如:data$,连接时\\192.168.0.1\data$
2、将代码文件(如EXE等)与数据文件(如DBF等)分开,放在不同的共享文件夹,最好放在不同的主机上。
3、代码文件(如EXE等)的共享连接的用户名和密码可以公开,方便客户端管理。
4、数据文件(如DBF等)的共享连接的用户名和密码要保密,程序运行时,需要使用数据文件时,由程序自动连接数据文件的共享文件夹,不需要时及时关闭连接。




2017-02-23 20:27
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:20
帖 子:391
专家分:896
注 册:2004-11-23
收藏
得分:0 
以下是引用吹水佬在2017-2-23 20:27:25的发言:


简单的中小型数据库应用,用共享文件(F/S)架构也是可行的选择。
特点是投入小(现成的),设置维护简单方便。
但要做得好就要花点心思,视实际情况,选择一种搞好的方案。
通常的做法:
1、设置共享文件夹时,设置的共享名尾部加“$”字符,如:data$,连接时\\192.168.0.1\data$
2、将代码文件(如EXE等)与数据文件(如DBF等)分开,放在不同的共享文件夹,最好放在不同的主机上。
3、代码文件(如EXE等)的共享连接的用户名和密码可以公开,方便客户端管理。
4、数据文件(如DBF等)的共享连接的用户名和密码要保密,程序运行时,需要使用数据文件时,由程序自动连接数据文件的共享文件夹,不需要时及时关闭连接。

建议收精,吹版给出了较为详细,可行。
2017-02-24 08:45
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:4 
程序中自动连接或断开共享文件夹连接的参考示例:
**
** 连接共享文件夹()
** 参数: szLocalName,szRemoteName,szUserName,szPassWord,ddFlags
** szLocalName ... 影射到本地设备,如 X:,为空时不映射为盘符,空连接。
** szRemoteName .. 连接的远程设备,如 \\server\共享文件夹$
** szUserName .... 用户名
** szPassWord .... 密码
** ddFlags ....... 1连接,0断开
**    例:建立空连接
**        连接共享文件夹(",\\192.168.0.1\data$,admin,12349798,1")
**
FUNCTION 连接共享文件夹(sz连接参数)
    LOCAL a连接参数[1]

    IF ALINES(a连接参数, sz连接参数, ",") != 5
        RETURN .F.
    ENDIF

    DECLARE LONG StrDup IN Shlwapi STRING@
    DECLARE LONG WNetAddConnection2 IN Mpr.dll STRING@, STRING@, STRING@, LONG
    DECLARE LONG WNetCancelConnection2 IN Mpr.dll STRING@, LONG, LONG
   
    LOCAL szLocalName, szRemoteName, szUserName, szPassWord, ddFlags
    LOCAL stNR, ddRet, szMsg
   
    szLocalName  = a连接参数[1]
    szRemoteName = a连接参数[2]
    szUserName   = a连接参数[3]
    szPassWord   = a连接参数[4]
    ddFlags      = a连接参数[5]

    IF ddFlags == "0"
        ddRet = WNetCancelConnection2(@szRemoteName, 0, 1)
        RETURN (ddRet == 0)
    ENDIF
   
        * NETRESOURCEA 结构
    stNR = REPLICATE(0h00, 4);
         + BINTOC(1,  "4RS");
         + REPLICATE(0h00, 8);
         + BINTOC(StrDup(@szLocalName),  "4RS");
         + BINTOC(StrDup(@szRemoteName), "4RS");
         + REPLICATE(0h00, 8)

    ddRet = WNetAddConnection2(@stNR, @szPassWord, @szUserName, 1)
   
    IF ddRet == 1219    && 已经有连接,断开再连接。
        WNetCancelConnection2(@szRemoteName, 0, 1)
        ddRet = WNetAddConnection2(@stNR, @szPassWord, @szUserName, 1)
    ENDIF

    IF ddRet != 0
        szMsg = ICASE(ddRet == 5,    "找不到 "     + szRemoteName + " 设备",;
                      ddRet == 85,   "本地设备 "   + szLocalName  + " 已经连接",;
                      ddRet == 66,   "本地设备 "   + szLocalName  + " 类型不匹配",;
                      ddRet == 1200, "指定的设备 " + szLocalName  + " 名称无效",;
                      ddRet == 67,   "找不到 "     + szRemoteName + " 网络名称",;
                      ddRet == 1206, "调用WNetAddConnection2()的配置文件格式不正确",;
                      ddRet == 1204, "网络设备 "   + szRemoteName + " 名称无效",;
                      ddRet == 2202, "网络设备 "   + szUserName   + " 用户名无效",;
                      ddRet == 170,  "网络忙,请重试",;
                      ddRet == 1223, "连接被取消",;
                      ddRet == 1205, "调用WNetAddConnection2()无法打开用户配置文件",;
                      ddRet == 1202, "本地设备 "   + szLocalName  + " 与其他网络资源已经连接",;
                      ddRet == 1208, "发生网络错误,可用WNetGetLastError()函数获得错误信息。",;
                      ddRet == 487,  "资源结构的lpLocalName成员未指定 " + szLocalName,;
                      ddRet == 87,   "资源结构的dwtype成员参数不正确",;
                      ddRet == 86,   "用户名或密码无效",;
                      ddRet == 1326, "用户名或密码无效",;
                      ddRet == 1203, "网络设备 "   + szRemoteName + " 不被接受",;
                      ddRet == 1222, "网络不可用", "登录连接异常")
        MESSAGEBOX(szMsg, "提示")
    ENDIF

    RETURN (ddRet == 0)
ENDFUNC


[此贴子已经被作者于2017-2-24 19:36编辑过]

2017-02-24 14:44
快速回复:防止独占模式打开
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022265 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved