主题:如何偵測一個表單所打開的數據表?
GEORGECHIN
[专家分:440] 发布于 2011-02-10 11:06:00
[size=3]如果想知道一個表單運行時,打開了哪些表,用什麼方法可以獲取呢?(不能說看源代碼啊)[/size]
回复列表 (共11个回复)
沙发
wzxc [专家分:9440] 发布于 2011-02-10 12:05:00
C=AUSED(aaB)
FOR I=1 TO C
?aaB(I,1)
ENDFOR
板凳
GEORGECHIN [专家分:440] 发布于 2011-02-11 00:12:00
[quote]C=AUSED(aaB)
FOR I=1 TO C
?aaB(I,1)
ENDFOR
[/quote]
是這樣的,因為數據的存取可能就是一打開,取得所需要的資料就又馬上關閉了,這種有辦法獲取嗎?
如:SELE 1
USE A
LOCA FOR A="B"
AA=A
USE
SELE 2
USE B
LOCA FOR C="D"
BB=C
USE
以上的代碼可能就放在一個事件當中,所以,怎樣才能獲取在發生這個事件的時候,這個表被打開過.換一句話來講,如何獲取這個表是在什麼事件中或者在什麼表單中被打開過?
3 楼
wzxc [专家分:9440] 发布于 2011-02-11 22:56:00
没见过你这么干的!如果要是一个人,还不被你整晕了。
4 楼
GEORGECHIN [专家分:440] 发布于 2011-02-12 11:48:00
[quote]没见过你这么干的!如果要是一个人,还不被你整晕了。[/quote]
其實你從上面的代碼你可能看不出這樣做的意義,其實是一個找出源表是否有更新的代碼!
因為遠程資料已經本地化,怕引用的資料不是最新的,所以要用這種方式來獲取哪個表單需要引用哪些數據表,以便保證本地資料與遠程同步.
我是這樣想的,在WINDOWS中不是打開一個文件后,都會留下記錄嗎,那在VFP中是不是也會有留下呢?如果是,只要獲取這個表的文件名,問題就解決.
其實從源代碼上是可以找到的,只是查看源代碼太麻煩了.
麻煩你幫我一起想想是不是有更好的辦法來獲取.
5 楼
wzxc [专家分:9440] 发布于 2011-02-12 20:22:00
那你建个操作日志不就得了。
6 楼
moz [专家分:37620] 发布于 2011-02-12 23:39:00
可以检查文件的时间属性来进行更新检查。再不然就别使用本地表,或使用前用远程表来生成临时表。
7 楼
GEORGECHIN [专家分:440] 发布于 2011-02-13 11:35:00
[quote]可以检查文件的时间属性来进行更新检查。再不然就别使用本地表,或使用前用远程表来生成临时表。[/quote]
判斷是否更新已經解決,現在問題是某個表單需要判斷哪些必須數據來和遠程同步.比如說一共有200個遠程表,而某個表單可能引用到的數據只需要1個或幾個,而不是全部的200個.
因為程式的架構就是以數據本地化的模式寫的,因為之前只考慮在局域网上用,所以就沒有針對單一表單來作區分.即:不管此表單需不需要引用這個某個表,只要表有更新,后臺就更新.這樣做法導致的結果就是浪費時間.特別是在遠程ADSL上用時,基本上都忍受不了.
用查找源代碼的方式是可以知道某個表單甚至某個事件會引用哪個數據表,但是表單太多,事件更多,要人工查,太浪費時間且不能保證是否完整.所以才想到是不是有更好的方法來自動偵測.
8 楼
GEORGECHIN [专家分:440] 发布于 2011-02-13 11:35:00
[quote]那你建个操作日志不就得了。[/quote]
謝謝你的建議,如何建操作日志呢?
9 楼
kosung [专家分:910] 发布于 2011-02-13 21:18:00
[quote][quote]那你建个操作日志不就得了。[/quote]
謝謝你的建議,如何建操作日志呢?[/quote]
自己建立个新的打开表的命令来替代USE,往日志表中记录想要的东西。但这样也会很麻烦的,一些命令如SELECT-SQL方式的打开就记录不下来了。不要考虑异常退出系统的问题,模块重入的问题,共享式打开和独享式的问题等等。
10 楼
moz [专家分:37620] 发布于 2011-02-14 01:46:00
如果表单太多,我建议你自己写个代码,利用filetostr()对表单的sct.scx文件进行检查。至于怎样检查,你手工检查一两个文件后就知道了。
我来回复