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

APPEND FROM 問題

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



註冊時間: 2006-04-19
文章: 59


第 1 樓

發表發表於: 星期六 五月 30, 2015 4:46 pm    文章主題: APPEND FROM 問題 引言回覆

A.DBF
F_COID C(5), F_TYPE N(1), F_VALUE N(10)

B.DBF
F_COID C(5), F_TYPE N(1), F_VALUE N(10), F_RECNO N(10)

SELECT A
SET FILTER TO F_COID='CA123'
GO TOP
SELECT B
ZAP
APPEND FROM A FOR F_TYPE=1

請問一下B.DBF的F_RECNO欄位如何透過APPEND FROM存入A.DBF對應的RECNO()
回頂端
檢視會員個人資料 發送私人訊息
LiChingLin



註冊時間: 2006-04-19
文章: 59


第 2 樓

發表發表於: 星期六 五月 30, 2015 4:55 pm    文章主題: 引言回覆

因為DBF過於龐大
200多個欄位 10多萬筆紀錄
之前用
SELECT RECNO() AS F_RECNO ......... INTO CURSOR ....
沒問題 但是非常慢
用了 APPEND FROM 快很多 約需1/3 - 1/4 時間就可以
但是 最重要的 RECNO() 怎麼寫入呢 ...
回頂端
檢視會員個人資料 發送私人訊息
bx1166



註冊時間: 2011-12-06
文章: 273


第 3 樓

發表發表於: 星期六 五月 30, 2015 10:22 pm    文章主題: 引言回覆

把A也增加Recno的欗位,如同B,譲這個f_recno一樣的資料,
Select b
Repl all f_recno with recno()
Select a
Append from b

Sorry ab 弄顚倒了
回頂端
檢視會員個人資料 發送私人訊息
lygcw9603



註冊時間: 2011-12-25
文章: 130


第 4 樓

發表發表於: 星期一 六月 01, 2015 12:54 am    文章主題: 引言回覆

桎建立獥系SET RELATION TO …………
回頂端
檢視會員個人資料 發送私人訊息
LiChingLin



註冊時間: 2006-04-19
文章: 59


第 5 樓

發表發表於: 星期一 六月 01, 2015 2:12 am    文章主題: 引言回覆

來源DBF是隔壁公司的
只給讀不給改 有權限問題 設計者已經不可考
重點是 至少有46個是超大的 是要每天經常性讀取
每日還要回傳資料
使用者快 起笑了
很想讓使用者改善工作效率提早下班

前幾年都很快 但是資料累計過大
目前是想說有沒有更好的演算方式或是指令能改改善現況

先謝謝大家的關心
回頂端
檢視會員個人資料 發送私人訊息
bx1166



註冊時間: 2011-12-06
文章: 273


第 6 樓

發表發表於: 星期一 六月 01, 2015 10:44 am    文章主題: 引言回覆

既然可以讀就建立一份拷貝,每天只要update有異動的部分,拷貝的自己加上需要的欗位。
回頂端
檢視會員個人資料 發送私人訊息
goodnight



註冊時間: 2008-10-13
文章: 473
來自: 台南市

第 7 樓

發表發表於: 星期四 六月 04, 2015 12:17 pm    文章主題: 引言回覆

如果 A.DBF 的結構不能改, 那就只能慢了

你直接下這樣比較快吧?
SELECT A.*, RECNO() AS F_RECNO FROM A WHERE A.F_COID='CA123' AND A.F_TYPE = 1 INTO DBF B
然後重建 B.DBF 的索引

正常來說 SELECT SQL 語法不應該慢的

試試這樣會不會快一點, 但電腦記憶體要大一才好
SELECT A.*, RECNO() AS F_RECNO FROM A WHERE A.F_COID='CA123' AND A.F_TYPE = 1 INTO ARRAY ARY_A
INSERT INTO B FROM ARRAY ARY_A

_________________
希望有更多人來參與
VFP wiki - 需要大家一起完成的VFP電子書與FAQ
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 雅虎訊息通 MSN Messenger
bx1166



註冊時間: 2011-12-06
文章: 273


第 8 樓

發表發表於: 星期四 六月 04, 2015 9:44 pm    文章主題: 引言回覆

資料應該不是每日都會產生十多萬筆的吧?
要處理的應該只是每日增加的或是修改的吧?
我認為你們的處理方式有些改善的必要。
回頂端
檢視會員個人資料 發送私人訊息
LiChingLin



註冊時間: 2006-04-19
文章: 59


第 9 樓

發表發表於: 星期五 六月 05, 2015 1:20 am    文章主題: 引言回覆

回 bx1166
你的論點也是個辦法.但是可能套用在讀取隔壁公司DBF上.可能不好搞.
我觀察出
有些資料庫dbf每月約增加8000-20000筆
有些資料庫dbf每月約增加3000-7000筆
...
更奇怪的是recno()還常常會變
有些資料庫DBF有時20多萬會變10多萬
有些資料庫DBF有時5萬多會變7萬多
我看不明白這是在幹麻 ...
我猜測隔壁公司下班後有delete()跟pack.還外加[備份回存]的套餐吧


回 goodnight
SELECT A.*, RECNO() AS F_RECNO FROM A ... INTO ARRAY 可以用
但是有些大DBF(欄位多.筆數多)會錯誤
我猜是ARRAY(MEMORY)的限制 ...


先謝謝大家關心
回頂端
檢視會員個人資料 發送私人訊息
bx1166



註冊時間: 2011-12-06
文章: 273


第 10 樓

發表發表於: 星期五 六月 05, 2015 6:08 am    文章主題: 引言回覆

記錄每天最後一筆的內容,隔天找到那一筆,就只讀取那後來所有新增的,那些就是每天
要處理的,至於delete pack的沒差。因為一般刪掉的都是過時的,除非有另外不可預料的

sele 1
use a
copy to mydrive\mtemp

*** use mtemp to do other prg
** will be overwrited next day
***next day

sele 1
use mydrive\mtemp
go bott
mid=A.F_coid
mvalue=A.f_value
mtype=a.f_type
use a
locate for f_coid=mid .and. f_value=mvalue .and. F_type=mtype
if .not. eof()
mno=a.recno()
copy to mydrive\mtemp for recno()>mno
Else
? "Error reading data"
endif
use
回頂端
檢視會員個人資料 發送私人訊息
goodnight



註冊時間: 2008-10-13
文章: 473
來自: 台南市

第 11 樓

發表發表於: 星期五 六月 05, 2015 2:20 pm    文章主題: 引言回覆

LiChingLin 寫到:
回 bx1166
你的論點也是個辦法.但是可能套用在讀取隔壁公司DBF上.可能不好搞.
我觀察出
有些資料庫dbf每月約增加8000-20000筆
有些資料庫dbf每月約增加3000-7000筆
...
更奇怪的是recno()還常常會變
有些資料庫DBF有時20多萬會變10多萬
有些資料庫DBF有時5萬多會變7萬多
我看不明白這是在幹麻 ...
我猜測隔壁公司下班後有delete()跟pack.還外加[備份回存]的套餐吧


回 goodnight
SELECT A.*, RECNO() AS F_RECNO FROM A ... INTO ARRAY 可以用
但是有些大DBF(欄位多.筆數多)會錯誤
我猜是ARRAY(MEMORY)的限制 ...


先謝謝大家關心



是的, 有可能是記憶體的問題, 所以我才註明記憶體要大些
其實處理方法很多, 看哪一種適合,
我想問一下, 記錄 recno() 有什麼特別含意??

如果要快, 準備一個 128G 的 ssd 應該會讓你有神速的速度吧

_________________
希望有更多人來參與
VFP wiki - 需要大家一起完成的VFP電子書與FAQ
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 雅虎訊息通 MSN Messenger
LiChingLin



註冊時間: 2006-04-19
文章: 59


第 12 樓

發表發表於: 星期五 六月 05, 2015 6:12 pm    文章主題: 引言回覆

主要因素就是
先讀取隔壁公司的資料
匯入部份資料於我方資料庫
排工作->製造加工->紀錄進度->回傳資料(新yymmdd.dbf)
工作下班前回傳資料給隔壁公司
因為隔壁公司dbf沒有onlykey可識別.僅靠recno()及部分欄位區分資料
回傳當日dbf對應recno()及幾項欄位做對應檢查比對用
當日下班前會比對資料才算完成作業
有限於隔壁公司電腦系統的關係
目前只有慢慢想辦法了
回頂端
檢視會員個人資料 發送私人訊息
bx1166



註冊時間: 2011-12-06
文章: 273


第 13 樓

發表發表於: 星期五 六月 05, 2015 8:18 pm    文章主題: 引言回覆

Recno()既然可以找到,當然可以寫回去,多加一兩行在locate後面即可,問題不大
回頂端
檢視會員個人資料 發送私人訊息
goodnight



註冊時間: 2008-10-13
文章: 473
來自: 台南市

第 14 樓

發表發表於: 星期六 六月 06, 2015 10:38 am    文章主題: 引言回覆

LiChingLin 寫到:
主要因素就是
先讀取隔壁公司的資料
匯入部份資料於我方資料庫
排工作->製造加工->紀錄進度->回傳資料(新yymmdd.dbf)
工作下班前回傳資料給隔壁公司
因為隔壁公司dbf沒有onlykey可識別.僅靠recno()及部分欄位區分資料
回傳當日dbf對應recno()及幾項欄位做對應檢查比對用
當日下班前會比對資料才算完成作業
有限於隔壁公司電腦系統的關係
目前只有慢慢想辦法了


如果只單純以你的 A.dbf 的結構來看, 我會先建議你多觀察這資料庫的使用狀況, 以及多分析一下資料庫結構

假設 F_COID 是工作代號, 只要他不會重覆, 就不是問題, 就不需要去記錄它的 RECNO(), 如果它會重覆, 那就得去分析它的程式如何去運作, 假設它真的會有 DELETE/PACK/RESTORE 的動作, 那你去記錄 RECNO() 就沒有用處了

如果能找到原始程式會更好

_________________
希望有更多人來參與
VFP wiki - 需要大家一起完成的VFP電子書與FAQ
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 雅虎訊息通 MSN Messenger
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

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


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