  | 
				VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.   
				 | 
			 
		 
		 
	
		| 上一篇主題 :: 下一篇主題   | 
	 
	
	
		| 發表人 | 
		內容 | 
	 
	
		gmtmold
 
 
  註冊時間: 2004-03-18 文章: 16
 
  第 1 樓
  | 
		
			
				 發表於: 星期四 三月 18, 2004 2:32 pm    文章主題: 大家使用SPT的時候...都是用什麼資料庫呢 | 
				     | 
			 
			
				
  | 
			 
			
				我是一個MIS人員...公司的系統是用Fox Pro 6.0寫的.也有一段很長的時間了.因近來資料庫資料越來越多.讀取速度越來越慢.所以想要改用spt的方式.試過spt感覺得速度還是很慢.所以想問問是不是Fox pro 本身的資料庫真的不適合拿來當後端資料庫(一定要用ms sql  嗎).還是有什麼訣竅我不知道的...還請各位狐友不賃指教..謝謝
 
公司有大概40部跑fox pro的電腦
 
fox pro是6.0版的
 
資料庫是用fox PRo的資料庫
 
用戶端裝win2000
 
早期是使用檔案伺服器的方式來丟資料的
 
   | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		syntech
 
 
  註冊時間: 2003-05-16 文章: 4252 來自: Taipei,Taiwan
  第 2 樓
  | 
		
			
				 發表於: 星期四 三月 18, 2004 4:35 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				這樣講太空泛了,
 
您應該先說明您目前筆數多少,SERVER等硬體狀況,
 
程式作法如何?如何嘗試SPT? _________________ 如果公司有下列困擾:
 
1. 找不到便宜,快速,簡易的 生產排程軟體
 
2. 不知道如何快速排定 採購計劃
 
3. 成本抓不準,自己算比軟體算有用
 
4. 想學習系統規劃,想找系統架構的顧問
 
 
請聯絡我們,也許我們幫得上忙 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		gmtmold
 
 
  註冊時間: 2004-03-18 文章: 16
 
  第 3 樓
  | 
		
			
				 發表於: 星期四 三月 18, 2004 5:39 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				資料總筆數大概有200萬筆以上
 
table有兩百多個
 
主機硬體狀況CPU : xeon2.4G X2
 
                   RAM : 2G
 
                   HD : SCSI READ 5 目前裝四顆36g硬碟 
 
                   其他的應該不用了吧
 
程式寫法
 
  我先在本機建立FOX PRO的 ODBC 名稱為 Fox Pro 6.0
 
nsqlconnect =SQLSTRINGCONNECT('DSN=Fox Pro 6.0;UID=;PWD=;SourceDB=\\Gmt-server1\public_data\sale.db c;SourceType=DBC;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;')
 
 
=SQLSETPROP(nsqlconnect ,  'batchmode' , .F.)
 
=SQLSETPROP(nsqlconnect ,  'asynchronous' , .T.)
 
=SQLEXEC(nsqlconnect , "Select *........."emp")
 
因為我的select 裡面 有用四個Left Join 不同表格.
 
查詢結果資料筆數大概5000筆...需要20秒
 
請告訴我怎樣座才能讓速度便快 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		elleryq
 
  
  註冊時間: 2007-06-21 文章: 768
 
  第 4 樓
  | 
		
			
				 發表於: 星期五 三月 19, 2004 9:22 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				建立適當的 index ~~
 
另外我記得有一個函數可以測試目前的索引是否為最佳化
 
但我忘記名稱了~~
 
 
我是建議貴公司可以開始先行規劃未來的發展,並換套大型一點的資料庫,如 mssql, oracle, firebird...等等的資料庫會比較好~~
 
 
以這種方式, \\Gmt-server1\public_data\sale.dbc, 去連結
 
會受限到 NetBEUI 協定的極限~ | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		syntech
 
 
  註冊時間: 2003-05-16 文章: 4252 來自: Taipei,Taiwan
  第 5 樓
  | 
		
			
				 發表於: 星期五 三月 19, 2004 10:04 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				基本上以使用DBC來說,最佳化的方向是
 
 HELP 中[Programmer's Guide] [Optimizing Applications] 這章,
 
如果有進步空間,也僅於此,
 
如果用完了這篇所述的方法,
 
的確就是到了VFP 自己資料庫引擎的極限. _________________ 如果公司有下列困擾:
 
1. 找不到便宜,快速,簡易的 生產排程軟體
 
2. 不知道如何快速排定 採購計劃
 
3. 成本抓不準,自己算比軟體算有用
 
4. 想學習系統規劃,想找系統架構的顧問
 
 
請聯絡我們,也許我們幫得上忙 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		gmtmold
 
 
  註冊時間: 2004-03-18 文章: 16
 
  第 6 樓
  | 
		
			
				 發表於: 星期五 三月 19, 2004 1:35 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				目前小弟最大的問題就是.....如果我把這個程式拿到server端去跑的話.只要一秒就ok了.但是如果在client端透過ODBC跑的話.卻要20秒.我搞不懂這個spt的速度為什麼會差那麼多.我們也有試著用asp去查同樣的資料.速度也差不多2秒(跟在server端的速度差不多).索引最佳化也有做.如果透過本地的ODBC去連結的話.這樣子的跑法是不是也和file server一樣.還是把全部資料送到client端再做sql呢
 
誠徵是否有狐友願意幫我們解決這個問題.公司可以付工資
 
或是有人有程式範例可以給我參考的..
 
拜託了......... | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		syntech
 
 
  註冊時間: 2003-05-16 文章: 4252 來自: Taipei,Taiwan
  第 7 樓
  | 
		
			
				 發表於: 星期五 三月 19, 2004 2:34 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				好複雜..... 先說明我大概猜到問題所在,但我沒能力解決
 
 
server 與  client 執行的差別就在 odbc 處理 result set (cursor) 的速度,
 
client用以odbc連接dbc,實際上資料處理還是 client 的機器在作,
 
而不是server 的機器去作,
 
所以我猜應該效能應該與直接以file server形式開dbc的效能相當.
 
差別是odbc vfp driver 與 vfp 何者較快.
 
 
一般spt是用在sql server(不管哪一種)上,
 
資料處理是sql server作,再把result set 傳給 odbc,
 
odbc再直接建立 result set , vfp 接收後作成自己的cursor.
 
 
asp 查同樣的資料也是一樣,
 
因為是由server odbc vfp driver處理資料,傳給client,
 
所以速度與server 使用 vfp 程式處理差不多.
 
 
如果要我給一個改善方向,
 
我會說以類似web service的方式處理資料,
 
讓後端處理資料,把result set 傳給client,
 
不過這樣系統架構的修改會很大. _________________ 如果公司有下列困擾:
 
1. 找不到便宜,快速,簡易的 生產排程軟體
 
2. 不知道如何快速排定 採購計劃
 
3. 成本抓不準,自己算比軟體算有用
 
4. 想學習系統規劃,想找系統架構的顧問
 
 
請聯絡我們,也許我們幫得上忙 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		gmtmold
 
 
  註冊時間: 2004-03-18 文章: 16
 
  第 8 樓
  | 
		
			
				 發表於: 星期五 三月 19, 2004 3:15 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				感謝樓上的狐友.....
 
很高興終於有人可以知道我的問題所在了...
 
那如你所說的改為後端處理...
 
那做法又是如何呢...改為後端是不是遠端資料庫一定就不能用vfp的資料庫了...
 
如果是這樣的話..那真的是大工程了...3Q
 
 
****期待是愉快的**** | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		syntech
 
 
  註冊時間: 2003-05-16 文章: 4252 來自: Taipei,Taiwan
  第 9 樓
  | 
		
			
				 發表於: 星期六 三月 20, 2004 10:47 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				比您想像中困難很多.
 
 
1.換成 真正 SQL Server的架構,當然就不能用VFP 的DBC,但是程式的變化較小
 
 
2.撰寫後端SERVER 的VFP COM 程式,處理前端要求的資料.
 
   需要 VFP 7.0 的 XMLtoCURSOR(),CURSORtoXML(),作格式交換,這還只是查詢而已,如果用到資料異動,就需要 XMLUPDATEGRAM(),VFP 6.0 沒有這些函式,只好使用 http://www.west-wind.com/ 所提供的免費物件,效果"接近".但是好像要自己處理異動更新.
 
   可以到 BOE副站 http://shhuachen.vicp.net/boe/ 查閱有關 COM,WEB SERVER,XML等相關技術資訊.
 
 
也許還有其他方法,不管什麼方法應該都是很大工程,我相信. _________________ 如果公司有下列困擾:
 
1. 找不到便宜,快速,簡易的 生產排程軟體
 
2. 不知道如何快速排定 採購計劃
 
3. 成本抓不準,自己算比軟體算有用
 
4. 想學習系統規劃,想找系統架構的顧問
 
 
請聯絡我們,也許我們幫得上忙 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		john59
 
 
  註冊時間: 2004-02-29 文章: 51 來自: taiwan
  第 10 樓
  | 
		
			
				 發表於: 星期日 三月 21, 2004 6:05 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				| 公司的mrp我本來用vfp的sql語法來運作,在單機或主機時沒感覺速度慢,但一上網運作的速度馬上down到龜速,後來改用fxopro傳統語法來執行速度馬上恢復正常,我個人感覺index似乎對sql語法無效,我們公司的bom有50萬筆左右,但列出一個model的bom幾十到上百筆,也不過數秒鐘,如果用sql最少要幾十秒甚至有時還會當掉,這是我的一點小經驗.因此vfp我基本上不用sql | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		an1060
 
 
  註冊時間: 2004-02-29 文章: 48 來自: 高雄
  第 11 樓
  | 
		
			
				 發表於: 星期一 三月 22, 2004 8:25 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				我來解釋一下VFP與MS-SQL同為後端之差別,若有錯誤之處,請高手指正:
 
 
MS-SQL本身有一隻管理程式在專門處理前端提出之需求,不論前端一次下達之
 
SQL語法有如何複雜,動員到多少TABLE,一律是處理成結果(你每次下達命
 
令,所要求之結果)後再傳遞至前端之電腦,以TABLE方式回到CLIENT.
 
網路上只傳回結果,及你下達之命令.所以MS_SQL語法功力越高,耗用網路資源就越小,但想對的SERVER耗用的記憶體就越大.
 
 
VFP就不一樣了,他沒有管理程式在管理,在後端依然是以FILE SERVER方式
 
很單純的將你一次要求的TABLE,全部回傳至前端,交由前端處理成結果後,
 
再將檔案關閉。
 
網路上只傳回的是你需要用到的TABLE檔,及你下達之命令.
 
SERVER不耗用記憶體,但會很忙,忙在傳送資料. | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		syntech
 
 
  註冊時間: 2003-05-16 文章: 4252 來自: Taipei,Taiwan
  第 12 樓
  | 
		
			
				 發表於: 星期一 三月 22, 2004 8:35 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				覺得自己做的SQL太慢而不用SQL,是有這麼一點因噎廢食,
 
[Programmer's Guide] [Optimizing Applications]提到了如何SQL最佳化,
 
一個沒有最佳化的SQL 命令,不管用在哪裡都是沒有效率的,
 
而實際上也不是每次都能符合最佳化條件,需要scan table時,
 
基本上就是比硬體速度而已.
 
 
 	  | 引言回覆: | 	 		  
 
一上網運作的速度馬上down到龜速,後來改用fxopro傳統語法來執行速度馬上恢復正常
 
 | 	  
 
 
原因似乎不單純是sql 的問題,
 
其實也隱含了網路環境及 vfp 建cursor ,處理cursor的速度問題,
 
實在不應過於武斷.
 
不過能抓老鼠的就是好貓,
 
方法也沒什麼好或不好. _________________ 如果公司有下列困擾:
 
1. 找不到便宜,快速,簡易的 生產排程軟體
 
2. 不知道如何快速排定 採購計劃
 
3. 成本抓不準,自己算比軟體算有用
 
4. 想學習系統規劃,想找系統架構的顧問
 
 
請聯絡我們,也許我們幫得上忙
   syntech 在 星期一 三月 22, 2004 8:37 am 作了第 1 次修改 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		gmtmold
 
 
  註冊時間: 2004-03-18 文章: 16
 
  第 13 樓
  | 
		
			
				 發表於: 星期一 三月 22, 2004 8:36 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				嗯嗯....
 
感謝各位狐友的解答...
 
那我會好好的考慮...
 
是不是要改用mssql....
 
太感動了.....謝謝 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		syntech
 
 
  註冊時間: 2003-05-16 文章: 4252 來自: Taipei,Taiwan
  第 14 樓
  | 
		
			
				 發表於: 星期一 三月 22, 2004 11:20 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | 引言回覆: | 	 		  
 
很單純的將你一次要求的TABLE,全部回傳至前端,交由前端處理成結果後, 
 
再將檔案關閉。
 
 | 	  
 
 
如果仔細看看john59網友的內容就發現這裡需要多解釋一點,
 
如果不使用sql 命令 產生cursor,以傳統方式處理資料,
 
其實是直接開檔案,移動的是"檔案指標",
 
所以不會一次通通傳到client,會隨著處理進度慢慢傳遞,
 
這是從dbase時代就留下來的情況.
 
 
但是sql 情況不同,基本上會和您說的一樣,
 
雖會隨最佳化情況不同,來源資料傳送量或多或少,
 
大部分還是會變成scan table,傳送整個table作處理(其實若spt的話,還有同步處理與非同步處理的差別),
 
result cursor 依 config.fpw 設定,
 
隨資料處理進度產生在所指定位置,
 
預設是產生在client,可是一樣可產生在sever端,
 
所以 sql 命令基本上都是耗費不少資源的做法,
 
祇是方便而已. _________________ 如果公司有下列困擾:
 
1. 找不到便宜,快速,簡易的 生產排程軟體
 
2. 不知道如何快速排定 採購計劃
 
3. 成本抓不準,自己算比軟體算有用
 
4. 想學習系統規劃,想找系統架構的顧問
 
 
請聯絡我們,也許我們幫得上忙 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		john59
 
 
  註冊時間: 2004-02-29 文章: 51 來自: taiwan
  第 15 樓
  | 
		
			
				 發表於: 星期一 三月 22, 2004 12:38 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				基本上syntech兄說的沒錯,以下提出小弟實際作法供參考
 
 
 
*SQL 作法
 
select * from md where model=mod   into tabl c:\mdtemp
 
========================================
 
*傳統FXOPRO作法
 
SELE MD
 
SEEK MOD
 
if  .NOT. EOF()
 
    COPY TO C:\MDTEMP WHIL MODEL=MOD 
 
ELSE
 
   ?CHR(7)
 
        messagebox("對不起找不到您要的資料")
 
ENDI
 
 ====================================
 
以上兩者都同樣產生MDTEMP  的 cursor檔
 
但速度上差別非常大尤其是資料庫越大的情況
 
用INDEX SEEK 的方式幾乎是即時的
 
因此我才會說如果單純只用VFP沒用其他如MS-SQL
 
似乎沒必要使用SQL語法運作當然這只是個人的經驗 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |