| 上一篇主題 :: 下一篇主題   | 
	
	
	
		| 發表人 | 
		內容 | 
	
	
		小寶寶
 
 
  註冊時間: 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 文章: 4252 來自: Taipei,Taiwan
  第 2 樓
  | 
		
			
				 發表於: 星期一 五月 02, 2005 2:39 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				簡單的說,
 
用FLOCK () 不是用來檢查 是否被其他使用者開啟,
 
再想想看.
 
 
為了作到某一件事,
 
不是唯一一種方法才做得到. _________________ 如果公司有下列困擾:
 
1. 找不到便宜,快速,簡易的 生產排程軟體
 
2. 不知道如何快速排定 採購計劃
 
3. 成本抓不準,自己算比軟體算有用
 
4. 想學習系統規劃,想找系統架構的顧問
 
 
請聯絡我們,也許我們幫得上忙 | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		bin1x
 
 
  註冊時間: 2004-08-27 文章: 462
 
  第 3 樓
  | 
		
			
				 發表於: 星期一 五月 02, 2005 4:01 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				可以請教一下嗎?
 
userd()是什麼函數 | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		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 一下...可以發現很多好玩的事.... | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		小桑•無痕
 
  
  註冊時間: 2003-07-08 文章: 304 來自: Tainan, Taiwan
  第 6 樓
  | 
		
			
				 發表於: 星期一 五月 02, 2005 5:48 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				TO 小寶寶:
 
如果TABLE已經被其他程式(人)開啟了,那後面的程式就無法以專用模式開啟。
 
如果一定要做REINDEX和PACK,那麼操作者一定要以專用模式開啟;也就是說,其他人必須先結束程式,讓某一個人可以取得專用權。 _________________ 用力 Try 一下...可以發現很多好玩的事.... | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		小桑•無痕
 
  
  註冊時間: 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 一下...可以發現很多好玩的事.... | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		bin1x
 
 
  註冊時間: 2004-08-27 文章: 462
 
  第 8 樓
  | 
		
			
				 發表於: 星期一 五月 02, 2005 6:14 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				再說了
 
USED() 是USE TABLE 之後 以別名來判斷
 
TABLE 是否被開啟
 
也可以USE AGAIN啊
 
在實務確實有可能會發生USE AGAIN
 
似乎是在CALL 很多視窗時,就會發生吧
 
忘記了,只用過一次 | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		小賴
 
 
  註冊時間: 2004-12-27 文章: 477
 
  第 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;若要知道有幾筆,只要把統計檔的欄位叫出來。),雖然有點麻煩,可是保證很快可以取得結果。   _________________ 用力 Try 一下...可以發現很多好玩的事.... | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		小寶寶
 
 
  註冊時間: 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 文章: 477
 
  第 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. | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		 |