| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1924 人关注过本帖
标题:请问网络共享表如何APPEND FROM?
只看楼主 加入收藏
dragonmanyu2
Rank: 2
等 级:论坛游民
帖 子:36
专家分:12
注 册:2013-2-13
结帖率:33.33%
收藏
 问题点数:0 回复次数:9 
请问网络共享表如何APPEND FROM?
我做了二个表,表A和表B,结构都一样,
其中表B同时有数人 共享打开, USE 表B SHARE ,append blank 都行的
但是如果我打开表A,想 appeng from  表B 时,提示无法存取文件
请问1.如果有人 USE 表B SHARE 时可以   表A appeng from  表B 吗?
2.如果不行的话,如何判别表B 在局域网上被USE SHARE ?
搜索更多相关主题的帖子: blank 局域网 如何 
2013-02-26 14:15
月沐庭轩
Rank: 9Rank: 9Rank: 9
来 自:京城
等 级:贵宾
威 望:17
帖 子:393
专家分:1106
注 册:2011-7-24
收藏
得分:0 
先select * from 表B into cursor 临时表
再select 表A,
append from 临时表

坚持学习vfp,QQ:306805680
2013-02-26 14:38
dragonmanyu2
Rank: 2
等 级:论坛游民
帖 子:36
专家分:12
注 册:2013-2-13
收藏
得分:0 
楼上的方法我知道,因为表B的数据是在实时更新的,我希望做APPEND FROM 的时候,程序能够判别没人在更新数据
2013-02-26 15:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
1.本来就不该用append from
2.如果要测试表是否已被打开,可尝试用EXCLUSIVE打开该表看是否成功

授人以渔,不授人以鱼。
2013-02-26 18:39
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
收藏
得分:0 
4楼T版主言之有理的。楼主的设计思路要改。真正用于实际运行使用的程序,如果是共享库或表,编程中是禁止闲时占用。既:表不发生数据动作时仍然在占用,如果不消除这个危险设计,你的表会经常发生共享冲突,导致程序实际无法使用。访问共享数据的基本原则:是打开既用,用完立即关闭。占用时间越短越好。如果是属于非独占打开不可,那么,你必须先判定表是否被别人使用,这个判定是强行等待型的,是用出错判定法,加循环实现。别人不解除使用,你可以永远在等待,直至等待成功。
2013-02-28 00:14
vfyf
Rank: 1
等 级:新手上路
威 望:1
帖 子:14
专家分:5
注 册:2013-2-27
收藏
得分:0 
回复 楼主 dragonmanyu2
用used() 函数判断B表是否打开
2013-02-28 00:22
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
楼主是别的用户共享打开了B表,然后自己独占打开A表,想用append from B把B的数据追加到A中。在他的猜想中,觉得没有向B写数据,仅仅是读,应该是可以的,但事实上正是不可以,这是因为append from的运行机制所致。append from的动作,是把B表的若干条记录一次过复制到A中,为确保在这个操作过程中B的这批数据不被共享用户变动,系统应该锁定这批记录,而且这个指令是把各种格式的数据文件都统一起来的,诸如.txt、.xls之类文件也可以,因此它应是采用直接读磁盘数据的方式进行,当数据文件被共享打开,这种操作就会失败(估计是调用Shell接口的),这就是那个错误的原因——无法存取数据源文件。

本来这种需求很常见,只要自己编写一个函数读数据表的记录就可以了。共享表是任意可读的,关键是你要一条一条记录地读,不要指望使用现成的一条指令整批读(除非你确知它的动作机制不是如上所述那般),然后一条一条地写到目标表中。这里不需要关闭共享表,也不需要检测那个表是否已打开,即使A表也是共享的,也一样可以在共享状态下append blank然后replace。为了省点代码,企图使用一条语句完成,总是会发生点不如意的事,这个时候如果还不知道转弯,那就比较麻烦了。

自己编写两个分别读和写表记录的函数,本来就不是什么难事,写完了,终身可用,我不知道为什么有的人总是不愿意在这些工具性的地方着力,而总是要寻找一条指令。

[ 本帖最后由 TonyDeng 于 2013-2-28 00:32 编辑 ]

授人以渔,不授人以鱼。
2013-02-28 00:30
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用vfyf在2013-2-28 00:22:38的发言:

用used() 函数判断B表是否打开

used()只能检测自己的进程有没有打开某个表,不能检测别的进程或别的用户是否打开了表。

授人以渔,不授人以鱼。
2013-02-28 00:33
dragonmanyu2
Rank: 2
等 级:论坛游民
帖 子:36
专家分:12
注 册:2013-2-13
收藏
得分:0 
楼上的确实高手啊,俺是在工作实践中自学成的,函数啊什么的不太习惯用
有个问题我想问问,表单中如何调用自建方法?
比如ON ERROR DO ?
2013-03-02 18:47
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
把所有自定义函数和过程写在一个PRG文件中,比如mytools.prg,在主程序启动时SET PROCEDURE TO mytools,这些函数和过程就可以像VFP内置函数那样使用。

授人以渔,不授人以鱼。
2013-03-02 19:23
快速回复:请问网络共享表如何APPEND FROM?
数据加载中...
 
   



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

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