上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
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 文章: 4249 來自: 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 |
|
回頂端 |
|
 |
|