 |
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
aforangel
註冊時間: 2010-05-24 文章: 117
第 1 樓
|
發表於: 星期四 八月 01, 2013 12:34 pm 文章主題: vfp to mysql |
|
|
本人一直沿用VFP6.0寫database程式, 程式主要針對小型公司, 如果想把現有程式, 日後改用MYSQL存放database, 增加運作速度, 請問要怎樣做, 有什麼書或網頁有教嗎?
另外...本人在初學SQL SERVER, 選擇可免費下載的MYSQL, MYSQL能安裝在WINDOWS 7當中作SERVER用嗎? 還是一定要WINDOWS NT或WINDOWS SERVER 200X..等等 |
|
回頂端 |
|
 |
ckp6250
註冊時間: 2004-07-30 文章: 1645
第 2 樓
|
發表於: 星期四 八月 01, 2013 6:12 pm 文章主題: |
|
|
Mysql 是好東西,歡迎加入!
若是初次使用,那不妨直接跳過Mysql,改用 Mariadb , 反正兩者相容,
至於為何建議用 Mariadb , 網路上文章很多,請自行搜尋。
純 Mysql 的專書(整本講Mysql的,不是那種跟php寫在一塊的),市面約有六七本,應該先看看。
vfp 的部份,就要仔細看看有關 spt 部份的 help
MYSQL安裝在WINDOWS 7當中作SERVER用是沒問題,不過,若該台 Server 沒有其它特定用途,倒是建議安裝在 Linux 上,效能較佳。
如果一定要裝在 Win7上時,建議注意所有的檔名欄名變數名及有的沒的名,一律使用小寫.不要大小寫混用,否則若改天要移植到 linux 上時,會吃苦頭。
ckp6250 在 星期五 八月 02, 2013 9:13 am 作了第 1 次修改 |
|
回頂端 |
|
 |
aforangel
註冊時間: 2010-05-24 文章: 117
第 3 樓
|
發表於: 星期五 八月 02, 2013 12:03 am 文章主題: |
|
|
非常感激ckp大大的提供, 你的意見我會認真考慮, 努力上網爬文一下關於Mariadb... |
|
回頂端 |
|
 |
jerryclt
註冊時間: 2009-03-10 文章: 334 來自: 佛心來的
第 4 樓
|
發表於: 星期五 八月 02, 2013 7:57 pm 文章主題: |
|
|
小弟也剛安裝完 MySQL,
然後就不知其所以然來@@ |
|
回頂端 |
|
 |
ckp6250
註冊時間: 2004-07-30 文章: 1645
第 5 樓
|
發表於: 星期五 八月 02, 2013 8:55 pm 文章主題: |
|
|
jerryclt 寫到: | 小弟也剛安裝完 MySQL,
|
安裝完就表示有開頭了
萬事起頭難,
踏出了第一步,後頭就好辦了
加油! |
|
回頂端 |
|
 |
aforangel
註冊時間: 2010-05-24 文章: 117
第 6 樓
|
發表於: 星期六 八月 03, 2013 11:20 am 文章主題: |
|
|
ckp大大, 我已經依你的意見, 安裝好Mariadb, 並正常運作, 我亦已用vfp簡單地嘗試過connect到這個server, 新增檔案, select等等這類簡單動作亦OK了.....現在, 我想開始嘗試把我之前用vfp寫的一個簡單程式轉用sql作後台資料, 郤遇到第一個問題, 就是, 怎樣能把vfp local database 完全上移到sql server上, 我有嘗試用過vfp內置的 SQL Server Upsizing Wizard, 但不知是我不懂用, 還是這個本來就是不能用, 最後也失敗了, 請問, 還有什麼方法可用? 感激!! |
|
回頂端 |
|
 |
ckp6250
註冊時間: 2004-07-30 文章: 1645
第 7 樓
|
發表於: 星期六 八月 03, 2013 4:00 pm 文章主題: |
|
|
1.『vfp內置的 SQL Server Upsizing Wizard』不適用於 Mysql ,僅適用於 MsSql 。
2. vfp local database 上移至 Mysql 有二個方案
1.自己寫工具,這個對於熟悉 Mysql 有很大的幫助,只是比較累。
(有一些 vfp 的範例可參考,搜尋一下 stru2mysql)
2.用現成的工具軟體,免費的也很多,可以搜尋一下諸如dbf2mysql,在我的經驗上,要把 dbf 轉成 mysql 的 table , 以 Navicat 最保險。 |
|
回頂端 |
|
 |
saint
註冊時間: 2003-07-14 文章: 211
第 8 樓
|
發表於: 星期一 八月 05, 2013 9:00 am 文章主題: |
|
|
放棄用DBF,那你的程式思維要跟著做調整,fox很多關於資料操作的方式在其它DB的世界中算是特異功能
當然如果你把資料全select 到你的loval view 中,那些原本的指令就還可以運用,只是資料量大時,你這
樣做就很花時間,總算是走出第一步~加油 |
|
回頂端 |
|
 |
ckp6250
註冊時間: 2004-07-30 文章: 1645
第 9 樓
|
發表於: 星期一 八月 05, 2013 6:56 pm 文章主題: |
|
|
尺有所短,寸有所長,
如同 saint 大大所語,vfp的dbf擁有許多的『特異功能』,放棄不用,很是可惜,
我的看法是,最重要的資料,當然是放在後端的資料庫主機,
至於一些比較沒那麼要緊的,放到 dbf 也無妨,
反正各取所取嘛!
至於演算的部份,當然要放在後端,前端只傳參數過去,後端算好結果再傳回前端,這樣就能避免大量資料的傳輸。 |
|
回頂端 |
|
 |
jerryclt
註冊時間: 2009-03-10 文章: 334 來自: 佛心來的
第 10 樓
|
發表於: 星期二 八月 06, 2013 6:37 am 文章主題: |
|
|
請教ckp6250兄,
演算法放到後端的實際效用為何?
小弟愚魯,
一直以為無論是在後端或前端演算,
在演算的過程中,
使用者應該還是會乖乖地等待結果出爐不是嗎?
還是說在後端演算時,
前端會作其它作業,
然後等後端將結果送到前端再用一個機制打斷目前作業,
來顯示演算結果?
請不吝指教, 謝謝 ^^ |
|
回頂端 |
|
 |
saint
註冊時間: 2003-07-14 文章: 211
第 11 樓
|
發表於: 星期二 八月 06, 2013 9:31 am 文章主題: |
|
|
我猜ckp6250指的有部份可能是把某些部份利用DB來處理(如果說錯再請不吝指教)
很多DB都有特異功能,而且給DB來做,速度上也會快很多
不妨參考
我就用到了mssql 上的「UNPIVOT」、「PIVOT」 這指令很好用,可以把你的
資料用類似樞杻的方式來展現,所以這不用寫VFP的程式就可以
完成,你說會不會很方便呢?
代碼: |
SELECT '新興金融' RM ,p.*
FROM(
SELECT YYYYMM ,TYP ,TWD
FROM
(
SELECT
A.YYYYMM
,SUM(A.avg_bal * A.FTP_RATE)/ SUM(A.avg_bal) AVG_FTP_RATE
,SUM(A.avg_bal * A.rate1)/ SUM(A.avg_bal) AVG_rate1
,SUM(A.avg_bal * A.rate2 )/ SUM(A.avg_bal) AVG_rate2
,SUM(A.avg_bal * A.rate1)/ SUM(A.avg_bal) - SUM(A.avg_bal * A.FTP_RATE)/ SUM(A.avg_bal) AS 利差
,SUM(A.avg_bal)/100000000 "部位(億元)"
FROM (
SELECT
A.avg_bal,A.FTP_RATE,A.rate1
,A.rate2 ,A.acc_no,A.CUR
,A.account,A.YYYYMM
,ISNULL(C.RM_GROUP,'NOT FOUND') RM_GROUP
FROM dbo.企金 AS A LEFT OUTER JOIN RM C ON A.LNAC_ID = C.LNAC_ID
)A
WHERE 1=1
AND YYYYMM IN ('201305','201306')
AND RM_GROUP ='新興金融'
AND NOT account LIKE '411%'
AND A.avg_bal > 1
GROUP BY A.YYYYMM
)A UNPIVOT(
TWD FOR TYP IN("AVG_FTP_RATE","AVG_rate1"
,"AVG_rate2","利差","部位(億元)"))P
)A PIVOT(SUM(TWD) FOR YYYYMM IN ("201305","201306"))P
|
|
|
回頂端 |
|
 |
aforangel
註冊時間: 2010-05-24 文章: 117
第 12 樓
|
發表於: 星期二 八月 06, 2013 11:00 am 文章主題: |
|
|
嗯, 聽過ckp & saint 兩位高手意見, 真的獲益不少, 今後將會努力學習SQL..
不過, 到今天, 我還卡在 vfp data 上移到 mysql 那個步驟, 在不停找尋方法中....
看到 saint 的4 select 試範, 簡宜呆了一下, 我一個select已頭痛, 兩個select已經感到呼吸困難..... |
|
回頂端 |
|
 |
ckp6250
註冊時間: 2004-07-30 文章: 1645
第 13 樓
|
發表於: 星期二 八月 06, 2013 11:34 am 文章主題: |
|
|
演算的部份,saint兄也做了很好的示範
我再舉一例,比如說,您要做一張『五月份進銷存明細表』
若放在前端來做,您就必需把存貨代碼檔及進出貨明細檔全部 selecl 到前端來,
假設存貨代碼有10000個,庫存明細有100000筆,那傳輸量會很可怕
若放在後端來做,
那我會傳一個指令過去,以 mysql 為例,會是
call 進銷存明細表('2013-05')
後端把結果都算好了,再傳來前端,有可能有實際內容的,也許只有幾百筆或幾千筆而己,
速度會快上數十倍或上百倍
使用 SQL 資料庫,不能只把它當倉庫而已,那是dbf的功能
用資料庫,比較有效率的方式
前端送參數,後端給答案 |
|
回頂端 |
|
 |
aforangel
註冊時間: 2010-05-24 文章: 117
第 14 樓
|
發表於: 星期二 八月 06, 2013 4:42 pm 文章主題: |
|
|
inv1.dbf (發票A)
inv_no inv_date amount
-----------------------------------------
inv0001 15/12/2012 500
inv0002 08/01/2013 200
inv0003 17/01/2013 150
inv0004 03/02/2013 400
inv2.dbf (發票B)
-----------------------------------------
inv0001 16/12/2012 2500
inv0002 06/01/2013 1200
inv0003 19/01/2013 1150
inv0004 23/01/2013 1400
請問, 如果我想抽出2個dbf 內 每個月份的總和, select語句要怎寫
顯示結果如下:
month 發票A 發票B total
12/2012 500 2500 3000
01/2013 350 3750 4100
02/2013 400 0 400 |
|
回頂端 |
|
 |
ckp6250
註冊時間: 2004-07-30 文章: 1645
第 15 樓
|
發表於: 星期二 八月 06, 2013 10:55 pm 文章主題: |
|
|
若是 Mysql 的語法,類似如下
Select Month , sum(if(Type=1,amount,0)) AS 發票A,sum(if(Type=2,amount,0)) AS 發票B,sum(amount) AS total
from (
Select Month,Type,sum(amount) AS amount
from (
Select date_format(inv_date,'%M/%Y') As Month , 1 As Type , sum(amount) As amount
from inv1 group by Month
union all
Select date_format(inv_date,'%M/%Y') As Month , 2 As Type , sum(amount) As amount
From inv2 group by Month) a
group Month,Type) b
group by month
約略如上,一行搞定,
沒有資料可實測,但八九不離十,像不像,三分樣
vfp也可如法泡製 |
|
回頂端 |
|
 |
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|