 |
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
ms0800
註冊時間: 2004-07-23 文章: 65
第 1 樓
|
發表於: 星期六 四月 02, 2005 1:28 pm 文章主題: 重新請問有關用 SPT 維護二階表單的方法及步驟 |
|
|
下列是我的步驟,如有錯,煩請告之,如有不合理,或有更好的,也煩請告之
用幾個 EDIT 來做進貨日期,進貨單號 CONTROL SOURCE 為 V_進貨表頭
用一個 GRID 來做進貨明細 CONTROLSOURCE 為V_進貨表身
在表單LOAD 先做
RESULT=SQLEXEC(XCONNECTID,'SELECT * FROM 進貨頭 WHERE 1 = 2 ','V_進貨表頭')
產生一個空的 V_進貨表頭,讓表單 ACTIVE 時 EDIT 物件的CONTROL SOURCE 可以正常顯示
我程式安排是先查詢到該筆進貨單再予 刪除,修改,或上筆, 下筆移動進貨單
我的問題在 如何產生 V_進貨表身
方法1:
RESULT=SQLEXEC(XCONNECTID,'SELECT * FROM 進貨頭 WHERE 出貨日期 = DATE() ','V_進貨表頭')
RESULT=SQLEXEC(XCONNECTID,'SELECT B.* FROM 進貨身 B INNER JOIN 進貨頭 A ON A.進貨單號 = B.進貨單號 ;
WHERE A.出貨日期 = DATE() ','V_進貨表身')
如符合查詢條件的 V_進貨表頭有三筆資料,此時符合這三筆表頭資料的表身是否連帶產生出來,表身產生後 ,再對
INDEX ON 進貨編號 ,讓 表頭,表身 產生關聯 ,表頭移動一筆,表身也會跟著移動
方法2:
一樣用 SPT
RESULT=SQLEXEC(XCONNECTID,'SELECT * FROM 進貨頭 WHERE 出貨日期 = DATE() ','V_進貨表頭')
RESULT=SQLEXEC(XCONNECTID,'SELECT * FROM 進貨身 WHERE 進貨單號 = ? V_進貨表頭.進貨單號,'V_進貨表身')
這時的表身資料只有表頭的第一筆的進貨明細,當我表頭要移動下一筆時
SELECT V_進貨表頭
SKIP
* 此時的表身
RESULT=SQLEXEC(XCONNECTID,'SELECT * FROM 進貨身 WHERE 進貨單號 = ? V_進貨表頭.進貨單號,'V_進貨表身')
THISFORM.GRID1.REFRESH
請問我應該用方法1 還是 方法2,還是有其它方法,拜託各位前輩了 |
|
回頂端 |
|
 |
bin1x
註冊時間: 2004-08-27 文章: 462
第 2 樓
|
發表於: 星期六 四月 02, 2005 2:09 pm 文章主題: |
|
|
表身的寫法
我在foxpro 2.5 時採brow for 單身的編號 = 單頭的編號
至於單頭的條件,早在進入編輯表單前,就搜尋到了
所以我覺得是2.
另外
我一直覺得 = 不是比inner join 來得清楚又明白嗎?
如果作集合查詢 用in+子查詢
嚴謹的我就用 =
很好寫的咧 |
|
回頂端 |
|
 |
ms0800
註冊時間: 2004-07-23 文章: 65
第 3 樓
|
發表於: 星期六 四月 02, 2005 2:35 pm 文章主題: |
|
|
感謝 bin1x 前輩的回答
如果如前輩所說,brow for 單身的編號 = 單頭的編號
那就應採用方法1,將符合查詢條件資料,表頭,表身一次 全部查完,然後再
對單身 index on 單身編號 , set key to 單頭編號 |
|
回頂端 |
|
 |
bin1x
註冊時間: 2004-08-27 文章: 462
第 4 樓
|
發表於: 星期六 四月 02, 2005 3:57 pm 文章主題: |
|
|
set key to 我沒用過
set rela to 倒是用過
你會不會在說
set order to
剛查了一下set key
有用索引
火速技術應有支援吧 |
|
回頂端 |
|
 |
ms0800
註冊時間: 2004-07-23 文章: 65
第 5 樓
|
發表於: 星期六 四月 02, 2005 6:22 pm 文章主題: |
|
|
實在感謝 bin1x 前輩不厭其煩的回答我,
但我比較困擾的用 spt 維護表單是要用 方法1 把所有符合條件表頭,表身一次查詢完畢,再用 set key or set rela 來做一階二階的資料關聯
還是用方法2 ,每一筆表頭資料的移動,表身都要用 sqlexe() 重新建立 表身??,謝謝 |
|
回頂端 |
|
 |
bigear

註冊時間: 2004-12-19 文章: 162 來自: 網路的另一端
第 6 樓
|
發表於: 星期六 四月 02, 2005 6:41 pm 文章主題: Re: 重新請問有關用 SPT 維護二階表單的方法及步驟 |
|
|
ms0800 寫到: | 請問我應該用方法1 還是 方法2,還是有其它方法 |
小小的疑問
1.執行速度上的考量?
2.程式的維護性考量?
3.程式撰寫方便考量?
以上3點都不考慮的話,若是能達到所要的需求,用哪種方法都不是問題
以下建議
1.速度上的考量
看實際狀況
2.程式維護考量
可以考慮使用 SET KEY TO 的方式
雖然程式碼會有點長,抓 bug 時卻能輕鬆解決
3.撰寫方便考量
可以考慮使用 SQL 的方式
幾行指令就可以做完所有的事
但是抓 bug 的時候就比較累人了
因為 bug 不只是程式邏輯和打錯字的問題,還有包括資料擷取的正確性....等等
個人都是以 SET KEY TO 為優先考量
1.方便維護
2.未來接手的人也能快速上手
3.執行速度快
4.通常都只有做報表才會用到 SQL 語法 _________________ 以上淺見,歡迎批評指教
________________________________________________
山不轉路轉,路不轉人轉,人不轉頭轉,頭不轉眼睛轉,眼睛不轉眼珠轉
眼珠再不轉就去睡覺,睡起來繼續轉 |
|
回頂端 |
|
 |
bigear

註冊時間: 2004-12-19 文章: 162 來自: 網路的另一端
第 7 樓
|
發表於: 星期六 四月 02, 2005 6:44 pm 文章主題: |
|
|
ms0800 寫到: | 實在感謝 bin1x 前輩不厭其煩的回答我,
但我比較困擾的用 spt 維護表單是要用 方法1 把所有符合條件表頭,表身一次查詢完畢,再用 set key or set rela 來做一階二階的資料關聯
還是用方法2 ,每一筆表頭資料的移動,表身都要用 sqlexe() 重新建立 表身??,謝謝 |
投方法1 一票 _________________ 以上淺見,歡迎批評指教
________________________________________________
山不轉路轉,路不轉人轉,人不轉頭轉,頭不轉眼睛轉,眼睛不轉眼珠轉
眼珠再不轉就去睡覺,睡起來繼續轉 |
|
回頂端 |
|
 |
ms0800
註冊時間: 2004-07-23 文章: 65
第 8 樓
|
發表於: 星期六 四月 02, 2005 8:06 pm 文章主題: |
|
|
感謝 bigear 投方法1 一票, 其實方法整理出來的二階的資料還需 index on 表身單號 才能用 set key to ,
我也擔心資料量大時 index 時間會不會很久, |
|
回頂端 |
|
 |
bigear

註冊時間: 2004-12-19 文章: 162 來自: 網路的另一端
第 9 樓
|
發表於: 星期六 四月 02, 2005 9:17 pm 文章主題: |
|
|
ms0800 寫到: | 我也擔心資料量大時 index 時間會不會很久, |
會
資料和時間成正比 _________________ 以上淺見,歡迎批評指教
________________________________________________
山不轉路轉,路不轉人轉,人不轉頭轉,頭不轉眼睛轉,眼睛不轉眼珠轉
眼珠再不轉就去睡覺,睡起來繼續轉 |
|
回頂端 |
|
 |
bin1x
註冊時間: 2004-08-27 文章: 462
第 10 樓
|
發表於: 星期日 四月 03, 2005 8:27 am 文章主題: |
|
|
所以說了
當資料庫越長越大時
資料庫是否要切割
來維持一些日常作業的效能 |
|
回頂端 |
|
 |
ms0800
註冊時間: 2004-07-23 文章: 65
第 11 樓
|
發表於: 星期日 四月 03, 2005 9:12 pm 文章主題: |
|
|
感謝 bin1x 及 bigear 兩位前輩的回答 ,想要 index 資料就有點怕怕,
事實上第一次用 spt 寫表單,也不知方法對不對 ,也不知效果好不好,我現在的客群也都十人以下,且很多都是單機使用
如果跟客戶談我的系統是 clint-server 架構,c/s 優點,但可能會犧牲一些速度,我想我及我的客戶都不願意接受我新開發的
for win 軟體,for win 以 for dos 慢,好久以前 fox 2.5 就支援 sql 語法 ,那時候,也 sql 查詢一些報表,但速度總比開 cdx 索引
慢好多,所以 sql 就離我好遠 ,最近心血來潮,找了一個 30 萬筆資料 ,然後用 sql 查詢 有鍵值的資料,select 命令一下,資料馬上查詢出來
沒有index 要一分鐘才查出來, 這次專案系統比較小,想用 spt 來開發,但又遇到很多問題,所以會問一些大家都不知道我在問什麼的問題
雖然有前輩贊成用 set key 的方式,但我用 sqlexe()寫了好幾天了,很不甘心重新再一次 ,今天下午用 vfp 8.0 run ,vfp 6.0 出現的問題,8.0 都解決了
所以還是感謝兩位前輩的回答,暫時用方法二,來寫程式了,謝謝 |
|
回頂端 |
|
 |
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|