| 上一篇主題 :: 下一篇主題   | 
	
	
	
		| 發表人 | 
		內容 | 
	
	
		hou59
 
 
  註冊時間: 2004-02-17 文章: 20
 
  第 1 樓
  | 
		
			
				 發表於: 星期二 三月 23, 2004 9:49 am    文章主題: 請教關於.dbf檔的管理與刪除 | 
				     | 
			 
			
				
  | 
			 
			
				請教關於.dbf檔的管理與刪除 
 
請教各位狐友前輩:我想設計一個歷史檔案的管理與刪除 
 
 
.dbf檔說明 
 
filelist.dbf==>欄位:[檔名],儲存各歷史檔的檔名,使用於資料環境中 
 
其 它.dbf==>有930101/930102/930103之類名稱的.dbf檔,因為太多了 
 
未加入於資料環境中,放在c:\subject\history 
 
程式說明: 
 
1.grid1:recordsource為filelist.dbf,當使用者按下command1(顯示)後, 
 
grid2便顯示出其它.dbf(930101或930102.dbf檔各欄位內容) 
 
2.當使用者按下command2(刪除)後,便可刪除930101或930102.dbf檔 
 
 
code: 
 
1.command1.click(顯示) &&可正確的於grid2顯示 
 
 
set default to c:\subject\historypublic op_sf 
 
select filelist 
 
 
op_sf=filelist.檔名 
 
 
IF USED("&op_sf") 
 
SELE &op_sf 
 
ELSE 
 
SELE 0 
 
USE &&op_sf 
 
ENDIF 
 
 
SELECT *; 
 
FROM op_sf; 
 
INTO CURSOR s_tmp 
 
select s_tmp 
 
 
WITH ThisForm.Grid2
 
.RecordSource ="s_tmp" 
 
.Column1.ControlSource="s_tmp.使用者" 
 
.Column2.ControlSource="s_tmp.單位" 
 
.Column3.ControlSource="s_tmp.作品" &&通用型態,儲存圖片檔 
 
ENDWITH 
 
 
2.command2.click(刪除) 
 
IF USED("op_sf") 
 
use 
 
erase op_sf+".dbf" 
 
ENDIF 
 
 
執行後的問題: 
 
1.第一次按下command1(顯示)時,grid2的通用型態欄可正常顯示圖片 
 
當再選取其它歷史檔後,通用型態欄變成GEN,無法顯示圖片 
 
2.command2.click(刪除) 
 
執行後,並無任何錯誤訊息,但是到c:\subject\history\裡面看,檔案卻還在. | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		Ruey
 
 
  註冊時間: 2003-03-12 文章: 1698 來自: tunglo
  第 2 樓
  | 
		
			
				 發表於: 星期二 三月 23, 2004 10:36 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				2.採用絕對路徑去試看看.路徑檔案要用[]包起來 _________________ #############################
 
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!
 
 
學會VFP使用者社區的搜尋,Code才會更有趣~
 
############################# | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		jesse
 
  
  註冊時間: 2004-03-21 文章: 8
 
  第 3 樓
  | 
		
			
				 發表於: 星期三 三月 24, 2004 4:38 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				.
 
這不禁使我想起DOS時代的NC (norton command)
 
NC 就提供有QUICK VIEW DBF 的功能 不喜歡的檔案 按個[F8]就可以把它幹掉了
 
ACDSEE 剛開始的模式也是這樣
 
.
 
.
 
話說回來....
 
2. 以前曾經碰到類似問題  小數點會被吃掉
 
 ".dbf"  改成 "..dbf" 看看
 
erase op_sf+"..dbf" 
 
或是 將 op_sf  改用 &op_sf 
 
(沒針對這個主題試過.僅供參考...)
 
 
問題若解決之後.麻煩也回來指教一下    | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		jesse
 
  
  註冊時間: 2004-03-21 文章: 8
 
  第 4 樓
  | 
		
			
				 發表於: 星期三 三月 24, 2004 5:00 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				你的程式碼裡頭??
 
怎麼有 USED("&op_sf") 
 
又有 USE &&op_sf 
 
也有 USED("op_sf") 
 
是我頭昏眼花了?? 怪怪的... 好像?
 
最後的 IF USED("op_sf")  並沒有成立 所以沒有錯誤訊息 也沒有刪檔案
 
應該是 IF USED("&op_sf") 
 
所以不是 . 的問題 | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		hou59
 
 
  註冊時間: 2004-02-17 文章: 20
 
  第 5 樓
  | 
		
			
				 發表於: 星期三 三月 24, 2004 9:38 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				感謝回應!
 
 	  | 引言回覆: | 	 		  
 
怎麼有 USED("&op_sf") 
 
又有 USE &&op_sf 
 
也有 USED("op_sf") 
 
 | 	  
 
 
USE &&op_sf 其中&&是註解
 
ruey,iesse兄的方法試過了,執行後,還是無任何錯誤訊息,檔案也沒刪除
 
..... | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		syntech
 
 
  註冊時間: 2003-05-16 文章: 4252 來自: Taipei,Taiwan
  第 6 樓
  | 
		
			
				 發表於: 星期三 三月 24, 2004 10:06 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | 引言回覆: | 	 		  
 
set default to c:\subject\historypublic op_sf 
 
 | 	  
 
這裡是貼錯嗎?實際上是不是
 
set default to c:\subject\history
 
public op_sf 
 
 
這裡也很怪?
 
是   USED("op_sf")  還是  USED(op_sf) ?
 
請確認一下用法
 
 
找的到,除非防寫,否則一定刪的掉,
 
就加上
 
IF FILE(op_sf+".dbf")
 
 erase op_sf+".dbf" 
 
ENDIF
 
 
這問題關鍵在 '&' 的用法 _________________ 如果公司有下列困擾:
 
1. 找不到便宜,快速,簡易的 生產排程軟體
 
2. 不知道如何快速排定 採購計劃
 
3. 成本抓不準,自己算比軟體算有用
 
4. 想學習系統規劃,想找系統架構的顧問
 
 
請聯絡我們,也許我們幫得上忙 | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		hou59
 
 
  註冊時間: 2004-02-17 文章: 20
 
  第 7 樓
  | 
		
			
				 發表於: 星期三 三月 24, 2004 4:11 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				使用除錯程式發現.command1與.command2內的條件根本未成立!!
 
後來直接將.command2(刪除)改成下列:
 
use 
 
erase op_sf+".dbf" 
 
程式告訴我找不到"別名"
 
因為我是初學者,所以用了以下最笨的方式,就ok了
 
close tables all
 
erase op_sf+".*" 
 
 
報告各位狐哥狐姐們:
 
我是初學者,主要的設計用意是:如何把存放在硬碟[c:\subject\history\]這個路徑
 
的.dbf檔案內容顯示在grid裡面!!使用者如果不要這筆資料的話,便可按刪除鍵刪掉檔案
 
學了幾個月VFP,有一點感言,我覺得台灣的vfp使用者與網站雖然沒有大陸多,但
 
是這個討論區有許多熱心的朋友,像是Ruey大哥熱心的回復解答或轉貼許多實用
 
的文章.目前我的程度是”找麻煩的菜鳥”,總是有一堆問題,自己看書學程式,沒人可指導,有問題就上來找一找主題,同時也希望在許多狐友的問題裡面
 
求精進,希望大家愛護支持這個討論區,共勉之 | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		朱育興
 
 
  註冊時間: 2003-08-25 文章: 661 來自: 台中市大里區
  第 8 樓
  | 
		
			
				 發表於: 星期三 三月 24, 2004 11:12 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				雖然不清楚,但試試看下面這樣可不可以
 
 
2.command2.click(刪除) 
 
 
你提供的程式碼:
 
IF USED("op_sf") 
 
use 
 
erase op_sf+".dbf" 
 
ENDIF 
 
 
 
修改為:
 
IF USED(op_sf) 
 
use IN (op_sf)
 
ENDIF 
 
erase (op_sf+".dbf")
 
 
 
其中的 use IN (op_sf),是因為你並不知道在此時,其目前工作區到底是誰?你可以在 IF USED(op_sf) 的上一行用 WAIT WIND ALIAS() 來看看你 USE 的到底是誰! _________________ 希望有更多人來參與
 
 VFP wiki - 需要大家一起完成的VFP電子書與FAQ  | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		hou59
 
 
  註冊時間: 2004-02-17 文章: 20
 
  第 9 樓
  | 
		
			
				 發表於: 星期四 三月 25, 2004 10:07 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				報告朱兄:
 
WAIT WIND ALIAS() 的值為:score_tmp
 
erase (op_sf+".dbf") 執行結果:檔案被使用
 
 
另我發現command1(顯示)按下後,壯態列有一行:
 
score_tmp(c:\subject\history\930101.dbf)   記錄:1/332  
 
 
請再賜教,感激不盡 | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		朱育興
 
 
  註冊時間: 2003-08-25 文章: 661 來自: 台中市大里區
  第 10 樓
  | 
		
			
				 發表於: 星期四 三月 25, 2004 1:07 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				code:
 
1.表單的 Init 事件
 
public op_sf
 
set default to c:\subject\history
 
 
 
2.command1.click(顯示)
 
op_sf = ALLTRIM(filelist.檔名)
 
 
* 在變更 s_tmp 內容之前要清除
 
WITH ThisForm.Grid2
 
  .RecordSource = ""
 
ENDWITH 
 
 
* 產生最新的 s_tmp
 
SELECT * ;
 
FROM (op_sf) ; 
 
INTO CURSOR s_tmp
 
USE IN (op_sf)  && 關閉 op_sf 所代表的 Table
 
 
* 重新關連
 
WITH ThisForm.Grid2
 
  .RecordSource          = "s_tmp"
 
  .Column1.ControlSource = "s_tmp.使用者"
 
  .Column2.ControlSource = "s_tmp.單位"
 
  .Column3.ControlSource = "s_tmp.作品"
 
ENDWITH
 
ThisForm.Refresh
 
 
3.command2.click(刪除)
 
* 刪除所有與 op_sf 資料表格有關的檔案 (例如: .FPT 檔)
 
IF ADIR(W1_aAdir,op_sf+".???") > 0
 
  FOR W1_SUB_A = 1 TO ALEN(W1_aAdir,1)
 
    W1_cDelFile = W1_aAdir(W1_SUB_A,1)
 
    DELETE FILE (W1_cDelFile)
 
  ENDFOR
 
ENDIF _________________ 希望有更多人來參與
 
 VFP wiki - 需要大家一起完成的VFP電子書與FAQ  | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		hou59
 
 
  註冊時間: 2004-02-17 文章: 20
 
  第 11 樓
  | 
		
			
				 發表於: 星期四 三月 25, 2004 3:47 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				謝謝朱兄不吝指教
 
第一個問題己解決
 
 	  | 引言回覆: | 	 		  
 
執行後的問題: 
 
1.第一次按下command1(顯示)時,grid2的通用型態欄可正常顯示圖片 
 
當再選取其它歷史檔後,通用型態欄變成GEN,無法顯示圖片 
 
 | 	  
 
另外:
 
 	  | 引言回覆: | 	 		  
 
USE IN (op_sf) && 關閉 op_sf 所代表的 Table 
 
 | 	  
 
程式卡在這行:找不到別名....
 
試了幾個方式如:
 
USE IN s_tmp 或 use 等,沒錯誤,但grid2就變空白了.. | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		朱育興
 
 
  註冊時間: 2003-08-25 文章: 661 來自: 台中市大里區
  第 12 樓
  | 
		
			
				 發表於: 星期四 三月 25, 2004 4:20 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				請修正:
 
 
2.command1.click(顯示) 
 
op_sf = ALLTRIM(filelist.檔名) 
 
 
* 在變更 s_tmp 內容之前要清除 
 
WITH ThisForm.Grid2 
 
.RecordSource = "" 
 
ENDWITH 
 
 
* 產生最新的 s_tmp 
 
* > 因為 op_sf 的主檔名是以數字為開頭的,在 VFP 中它會以 A,B,C,... 的順序做為它的別名,
 
* > 而不是以 op_sf 的主檔名做為它的別名 (太久沒遇到都差點忘了這規則)
 
USE (op_sf) ALIAS TMP_Select IN 0
 
* > 產生 s_tmp 
 
SELECT * ; 
 
FROM TMP_Select ; 
 
INTO CURSOR s_tmp 
 
* > 關閉 op_sf 所代表的 Table 
 
USE IN TMP_Select 
 
 
* 重新關連 
 
WITH ThisForm.Grid2 
 
.RecordSource = "s_tmp" 
 
.Column1.ControlSource = "s_tmp.使用者" 
 
.Column2.ControlSource = "s_tmp.單位" 
 
.Column3.ControlSource = "s_tmp.作品" 
 
ENDWITH 
 
ThisForm.Refresh _________________ 希望有更多人來參與
 
 VFP wiki - 需要大家一起完成的VFP電子書與FAQ  | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		hou59
 
 
  註冊時間: 2004-02-17 文章: 20
 
  第 13 樓
  | 
		
			
				 發表於: 星期五 三月 26, 2004 10:23 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				朱兄勛鑒:
 
command1.click(顯示) 的執行有一問題:
 
如果使用者重覆點選按鍵(op_sf = ALLTRIM(filelist.檔名) 檔名沒改變),會發生”檔案被使用”的錯誤訊息. 	  | 引言回覆: | 	 		  
 
* > 關閉 op_sf 所代表的 Table 
 
USE IN TMP_Select 
 
 | 	  
 
表示上述語法尚未關閉op_sf 所代表的 Table ,所以command2.click(刪除)
 
 	  | 引言回覆: | 	 		  
 
command2.click(刪除) 
 
* 刪除所有與 op_sf 資料表格有關的檔案 (例如: .FPT 檔) 
 
IF ADIR(W1_aAdir,op_sf+".???") > 0 
 
FOR W1_SUB_A = 1 TO ALEN(W1_aAdir,1) 
 
W1_cDelFile = W1_aAdir(W1_SUB_A,1) 
 
DELETE FILE (W1_cDelFile) 
 
ENDFOR 
 
ENDIF
 
 | 	  
 
我加上了use,才可順利刪掉檔案 | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		朱育興
 
 
  註冊時間: 2003-08-25 文章: 661 來自: 台中市大里區
  第 14 樓
  | 
		
			
				 發表於: 星期五 三月 26, 2004 12:41 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				
 
 
將
 
 
 	  | 引言回覆: | 	 		  | USE (op_sf) ALIAS TMP_Select IN 0 | 	   
 
 
改為
 
 
 	  | 引言回覆: | 	 		  | USE (op_sf) AGAIN ALIAS TMP_Select IN 0 | 	  
 
 
看看可不可以,測試後告訴我結果,可以嗎? _________________ 希望有更多人來參與
 
 VFP wiki - 需要大家一起完成的VFP電子書與FAQ  | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		hou59
 
 
  註冊時間: 2004-02-17 文章: 20
 
  第 15 樓
  | 
		
			
				 發表於: 星期五 三月 26, 2004 1:42 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				朱兄勛鑒:
 
 	  | 引言回覆: | 	 		  
 
command1.click(顯示) 的執行有一問題: 
 
如果使用者重覆點選按鍵(op_sf = ALLTRIM(filelist.檔名) 檔名沒改變),會發生”檔案被使用”的錯誤訊息.
 
 | 	  
 
本問題已解決,但是command2.click(刪除)內還是必須加上use才可刪檔
 
另外:
 
 	  | 引言回覆: | 	 		  
 
command1.click(顯示) 
 
op_sf = ALLTRIM(filelist.檔名) 
 
 
* 在變更 s_tmp 內容之前要清除 
 
WITH ThisForm.Grid2 
 
.RecordSource = "" 
 
ENDWITH 
 
 | 	  
 
只要command2.click(刪除)刪過檔後,再按command1(顯示),grid2的作品就變成Gen,圖片無法顯示.
 
再請賜教一個問題:
 
a,b,c三個表單==>a執行b,b執行c
 
當按下b表單的command鈕(do form c),b表單為何有一堆文字往上跑?使得結束c表單返回b表單時,b表單的劃面就被破壞了!
 
註:b單的init有下set talk off | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		 |