VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

重建索引-PACK-多人使用系統(續)

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
小寶寶



註冊時間: 2004-08-20
文章: 57


第 1 樓

發表發表於: 星期一 五月 02, 2005 2:32 pm    文章主題: 重建索引-PACK-多人使用系統(續) 引言回覆

小弟使用OPEN DATABASE STOK EXCL

之後開啟每個資料表....來做PACK與REINDEX....

可是我使用USED()函數來判別是否有其他使用開啟...

結果無效....

發現USERD()函數是判斷自己是否開啟...

不知是不是要用其他函數來測試資料表是否被其他使用者開啟呢 ???
----------------------------------------------------------------------------
使用FLOCK OR LOCK OR RLOCK 好像也是不能!!!

其他使用者開著程式,也是用分享模式開啟...

這是要重建索引....使用FLOCK OR LOCK OR RLOCK 回傳也等於.T.

也不能判別資料庫或資料別是否被其他使用者開啟......
回頂端
檢視會員個人資料 發送私人訊息
syntech



註冊時間: 2003-05-16
文章: 4249
來自: Taipei,Taiwan

第 2 樓

發表發表於: 星期一 五月 02, 2005 2:39 pm    文章主題: 引言回覆

簡單的說,
用FLOCK () 不是用來檢查 是否被其他使用者開啟,
再想想看.

為了作到某一件事,
不是唯一一種方法才做得到.

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
bin1x



註冊時間: 2004-08-27
文章: 462


第 3 樓

發表發表於: 星期一 五月 02, 2005 4:01 pm    文章主題: 引言回覆

可以請教一下嗎?
userd()是什麼函數
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 參觀發表人的個人網站 MSN Messenger
bigear



註冊時間: 2004-12-19
文章: 162
來自: 網路的另一端

第 4 樓

發表發表於: 星期一 五月 02, 2005 4:12 pm    文章主題: 引言回覆

bin1x 寫到:
可以請教一下嗎?
userd()是什麼函數


USED() 的好朋友

_________________
以上淺見,歡迎批評指教
________________________________________________
山不轉路轉,路不轉人轉,人不轉頭轉,頭不轉眼睛轉,眼睛不轉眼珠轉
眼珠再不轉就去睡覺,睡起來繼續轉
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 參觀發表人的個人網站
小桑•無痕



註冊時間: 2003-07-08
文章: 304
來自: Tainan, Taiwan

第 5 樓

發表發表於: 星期一 五月 02, 2005 5:42 pm    文章主題: 引言回覆

bin1x 寫到:
可以請教一下嗎?
userd()是什麼函數


userd() <<< 這是 小寶寶 的筆誤吧,他本來是要打USED()

_________________
用力 Try 一下...可以發現很多好玩的事....
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 雅虎訊息通 MSN Messenger
小桑•無痕



註冊時間: 2003-07-08
文章: 304
來自: Tainan, Taiwan

第 6 樓

發表發表於: 星期一 五月 02, 2005 5:48 pm    文章主題: 引言回覆

TO 小寶寶:
如果TABLE已經被其他程式(人)開啟了,那後面的程式就無法以專用模式開啟。
如果一定要做REINDEX和PACK,那麼操作者一定要以專用模式開啟;也就是說,其他人必須先結束程式,讓某一個人可以取得專用權。

_________________
用力 Try 一下...可以發現很多好玩的事....
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 雅虎訊息通 MSN Messenger
小桑•無痕



註冊時間: 2003-07-08
文章: 304
來自: Tainan, Taiwan

第 7 樓

發表發表於: 星期一 五月 02, 2005 5:52 pm    文章主題: Re: 重建索引-PACK-多人使用系統(續) 引言回覆

小寶寶 寫到:
其他使用者開著程式,也是用分享模式開啟...

這是要重建索引....使用FLOCK OR LOCK OR RLOCK 回傳也等於.T.

也不能判別資料庫或資料別是否被其他使用者開啟......


要判斷資料庫是否已被別人開啟,只需以專用模式開啟TABLE,再攔截錯誤。
如果開啟不成功,就顯示檔案已被使用;開啟成功就可以做PACK和REINDEX了。

「攔截錯誤」參考ON ERROR

_________________
用力 Try 一下...可以發現很多好玩的事....
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 雅虎訊息通 MSN Messenger
bin1x



註冊時間: 2004-08-27
文章: 462


第 8 樓

發表發表於: 星期一 五月 02, 2005 6:14 pm    文章主題: 引言回覆

再說了
USED() 是USE TABLE 之後 以別名來判斷
TABLE 是否被開啟
也可以USE AGAIN啊
在實務確實有可能會發生USE AGAIN
似乎是在CALL 很多視窗時,就會發生吧
忘記了,只用過一次
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 參觀發表人的個人網站 MSN Messenger
小賴



註冊時間: 2004-12-27
文章: 476


第 9 樓

發表發表於: 星期一 五月 02, 2005 6:27 pm    文章主題: 引言回覆

贊同小桑•無痕兄的方法
我們要注意的是檔案是否以Exclusive開啟成功
而不是注意是否有人使用了這個檔案, 因為只要能以Exclusive開檔案成功;就已表示
目前沒其他人在使用這個檔案; 以後也不會有其他人會開啟這個檔案;直到你關閉這個檔案
為止; 同樣網路上只要有人在使用的檔案; 你也不可能以Exclusive方式來開啟.
然而FoxPro對於檔案開啟成功與否; 並沒有提供很好的方式來測試; ISEXCLUSIVE()
算是唯一的了; 我個人也是使用 小桑•無痕兄的方式以ON ERROR 來「攔截錯誤」
(如果你試圖以Exclusive來開啟檔案, 失敗時會引發ON ERROR)
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
小桑•無痕



註冊時間: 2003-07-08
文章: 304
來自: Tainan, Taiwan

第 10 樓

發表發表於: 星期一 五月 02, 2005 7:23 pm    文章主題: 引言回覆

題外話:
在VFP中打DIR(或DISPLAY FILES),如果.DBF已被「專用模式開啟」,則會顯示「Can't read file」,否則會顯示該DBF的資料筆數。
DISPLAY FILES 的結果可以輸出至印表機或檔案(沒試過)。

不過,若要以此方法來檢查檔案是否被別人開啟,不如使用我和小賴所使用的方法。

另外,我不太贊成一開啟檔案就做PACK和REINDEX,若要過濾DELETE的資料,可以下SET DELETE ON;
若只是要知道筆數,用SELECT取得即可;我想,小寶寶你在開檔後馬上要做PACK只是為了要取資料的筆數,
若用SELECT會等很久的話,不如就用我上次說的賤招(用一個統計檔,新增時+1,刪除時-1;若要知道有幾筆,只要把統計檔的欄位叫出來。),雖然有點麻煩,可是保證很快可以取得結果。 Rolling Eyes

_________________
用力 Try 一下...可以發現很多好玩的事....
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 雅虎訊息通 MSN Messenger
小寶寶



註冊時間: 2004-08-20
文章: 57


第 11 樓

發表發表於: 星期一 五月 02, 2005 10:38 pm    文章主題: 引言回覆

on error的函數...

假如說:我是按下command1做重見索引

use cust excl -->有其他使用者在線上...會出錯!!

不過on error的指令...不知道要放在何處才能觸發到???

今天有放再form的error event上面...

好像沒有作用~~~
回頂端
檢視會員個人資料 發送私人訊息
bigear



註冊時間: 2004-12-19
文章: 162
來自: 網路的另一端

第 12 樓

發表發表於: 星期二 五月 03, 2005 12:23 am    文章主題: 引言回覆

在 main.prg 或是 form.init 裡
ON ERROR DO C:\XXX\PRG\ERROR.PRG WITH ERROR(),MESSAGE()
WITH 後面的參數可要可不要,有參數的話記的在 ERROR.PRG 裡的第一行加上 para 收參數

_________________
以上淺見,歡迎批評指教
________________________________________________
山不轉路轉,路不轉人轉,人不轉頭轉,頭不轉眼睛轉,眼睛不轉眼珠轉
眼珠再不轉就去睡覺,睡起來繼續轉
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 參觀發表人的個人網站
小賴



註冊時間: 2004-12-27
文章: 476


第 13 樓

發表發表於: 星期二 五月 03, 2005 12:25 am    文章主題: 引言回覆

小寶寶兄:
試試以下方式 :



IF NetUseDBF("c:\Temp\Test", .T.) && 以專用模式開 C:\Temp\Test.DBF
看你要幹嘛 && 開檔成功
ELSE
.......... && 開檔不成功

ENDIF



FUNCTION NetUseDBF
PARAMETER cTableName, lExclusive
ON ERROR RETURN .F.
SELECT 0
IF lExclusive && 專用或公用
USE (cTableName) EXCLUSIVE
ELSE
USE (cTableName)
ENDIF
RETURN .T.
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作