|
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
LiuRambo
註冊時間: 2007-11-27 文章: 481
第 16 樓
|
發表於: 星期四 四月 15, 2010 4:14 pm 文章主題: |
|
|
前綴字 = CHR(39) |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4214 來自: Taipei,Taiwan
第 17 樓
|
發表於: 星期三 四月 13, 2011 7:02 pm 文章主題: |
|
|
syntech 寫到: | SYS(3101,65001)也就是在vfp form中顯示unicode文字是可行的.
不過也還是得解決資料儲存及儲存後拿出來顯示的問題.
順便再說一句,
CODEPAGE 65001 並非VFP所有版本所認可的CODEPAGE,
所以你無法使用 CPDBF,CPCONVERT,......等函式硬轉. |
補充說明.
DBF 確實可以儲存 UTF-8 的資料,而不會變質,
所以問題只有顯示而已,
可以用來顯示及編輯的GRID,
我試過網路上比較容易取得的是
1.Data Dynamics SharpGrid v.2.0.0.1008 (最新版已不再出售)
2.ComponentOne Studio for ActiveX 中的 VSFlexGrid Pro 8.0.(同系列有 TRUE DBGRID ,不過無法顯示UNICODE)
雖然有可以連接ADO的版本,
不過誠心建議不要使用.
因為同步更新有問題.
所以建議以直接填值到GRID中的方式處理,
當然你得自己處理怎麼把TABLE(CURSOR) <=> GRID.CELL(COL,ROW).VALUE
(GRID.CELL(COL,ROW).VALUE 這不是真正的CODE,只是表示是某一格的內容)
加入 SYS(3101,65001) 之後,
而你也已知DBF的資料確實是UTF-8 的編碼後,
你就可以利用 THISFORM.GRID.CELL(COL,ROW).VALUE = TABLE.FIELD1 直接顯示UTF-8 的資料.
報表部分,
因為VFP 9 的報表引擎仍然無法轉換,所以還是需要利用其他工具來做,例如EXCEL等 _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
garfield Site Admin
註冊時間: 2003-01-30 文章: 2158
第 18 樓
|
發表於: 星期三 四月 13, 2011 8:15 pm 文章主題: |
|
|
引言回覆: | 所以建議以直接填值到GRID中的方式處理,
當然你得自己處理怎麼把TABLE(CURSOR) <=> GRID.CELL(COL,ROW).VALUE
|
如果資料筆數很多的話,
一次就將資料全部填入grid.cell 會很慢,
最好能做到只填入顯示畫面裡的資料,
Data Dynamics SharpGrid 或 VSFlexGrid Pro 8.0 有這樣的功能嗎?
至少要有偵測將要超出顯示範圍的功能才行. _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4214 來自: Taipei,Taiwan
第 19 樓
|
發表於: 星期三 四月 13, 2011 9:17 pm 文章主題: |
|
|
garfield 寫到: | 引言回覆: | 所以建議以直接填值到GRID中的方式處理,
當然你得自己處理怎麼把TABLE(CURSOR) <=> GRID.CELL(COL,ROW).VALUE
|
如果資料筆數很多的話,
一次就將資料全部填入grid.cell 會很慢,
最好能做到只填入顯示畫面裡的資料,
Data Dynamics SharpGrid 或 VSFlexGrid Pro 8.0 有這樣的功能嗎?
至少要有偵測將要超出顯示範圍的功能才行. |
就算是筆數不多,也可以很明顯的出現Refresh 畫面的感覺........ Orz
目前我測試 VSFlexGrid Pro 8.0 是可以定COL, ROW共幾筆,
但是這樣做手續會繁雜許多.
例如: ROWS = FLOOR(GRID.HEIGHT / GRID.ROWHEIGHT) 之類的,
定義一頁可以顯示幾筆.
而且也需要對home,end,pgup,pgdn自己寫反應.
當然最簡單的就是 rows = reccount(),cols = fcount() _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4214 來自: Taipei,Taiwan
第 20 樓
|
發表於: 星期三 四月 13, 2011 9:45 pm 文章主題: |
|
|
資料處理方面,連結其他直接支援unicode的資料庫來說,
db server <=> ado + cursoradapter 產生 utf-8 cursor <=> 支援UNICODE物件
這種方式較為簡單.
若以 SPT 連接,為了避免被VFP誤譯為 DBCS 字串,變成要型態轉來轉去,反而痛苦.
但是以cursoradapter連接也會出現與 SPT CURSOR相同的問題,
例如不能簡單的做 ALTER TABLE,INDEX ON,REINDEX,.....等等變更CURSOR結構的操作.
這個要自己調整作法. _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
DennisTsai
註冊時間: 2005-07-26 文章: 176
第 21 樓
|
發表於: 星期五 四月 15, 2011 9:42 pm 文章主題: |
|
|
看來周兄又有突破了 |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4214 來自: Taipei,Taiwan
第 22 樓
|
發表於: 星期六 四月 16, 2011 8:53 pm 文章主題: |
|
|
把結論整理一下.
不知道有沒有機會放一個 簡單到不能再簡單的範例.
老實說,真的沒有那麼可怕. _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
catfish
註冊時間: 2003-05-29 文章: 45 來自: 台中
第 23 樓
|
發表於: 星期二 十月 04, 2011 5:34 pm 文章主題: |
|
|
我用VFP9+SQL Server 2005,以SPT方式取資料,如果Server上的欄位比較長(例如nvarchar(300)),轉換到foxpro的欄位是Memo型態,則用Strconv(欄位資料,10)可以成功將罕見字顯示在Microsoft Form2.0的物件上,但如果是長度較短的欄位,轉換出來的型態是一般文字欄位而不是Memo,則用Strconv()轉出來的文字還是一樣會是問號(?),為什麼會有這樣的差別?是文字欄位還要多一道轉換程序嗎? |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4214 來自: Taipei,Taiwan
第 24 樓
|
發表於: 星期三 十月 05, 2011 8:46 am 文章主題: |
|
|
最好放棄 以SPT 取得UNICODE 資料.
很痛苦. _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4214 來自: Taipei,Taiwan
第 25 樓
|
發表於: 星期三 十月 05, 2011 10:10 am 文章主題: |
|
|
我自己的測試 SPT-UNICODE SAMPLE :
由 SQL SERVER 取回UNICODE資料
代碼: |
SYS(3101,65001)
CLOSE TABLES ALL
STORE SQLCONNECT('xxxx','yyyy','zzzz') TO xConnHandle
IF xConnHandle <= 0
RETURN
ENDIF
* 避免VFP亂轉,所以取回時先作成ODBC BINARY欄位
STCT = "select CAST(CAST(FIELD_2 as nVarChar(4000)) as VarBinary(8000)) AS FIELD_2,CAST(CAST(FIELD_3 as nVarChar(4000)) as VarBinary(8000)) AS FIELD_3 "
STCT = STCT+" from TABLE1 "
=SQLEXEC(xConnHandle,STCT,"TABLE1")
SELECT TABLE1
* 內容實際上為UTF-8編碼,所以利用STRCONV(FIELD_2,10)轉回UNICODE字串
SELECT CAST(STRCONV(FIELD_2,10) as M) AS FIELD_2,CAST(STRCONV(FIELD_3,10) as M) AS FIELD_3 FROM TABLE1 INTO CURSOR TABLE2_1
THISFORM.OLEcontrol1.CONTROLSOURCE = 'Field_2'
THISFORM.OLEcontrol2.CONTROLSOURCE = 'Field_3'
THISFORM.OLEcontrol1.Font.Name='Arial Unicode MS'
THISFORM.OLEcontrol2.Font.Name='Tahoma'
THISFORM.OLEcontrol1.Font.Size=18
THISFORM.OLEcontrol2.Font.Size=18
SYS(3101,65001)
|
當然用來接的THISFORM.OLEcontrol1,THISFORM.OLEcontrol2 是 MS FORMS 2.0 TEXTBOX
寫回SQL (和前面的TABLE無關,純粹表現要轉碼的情況)
代碼: |
*** 從unicode字串轉回UTF-8字串
pcSavedDescription = STRCONV(pcSavedDescription,12)
pcSavedTitle = STRCONV(pcSavedTitle,12)
*** 必須先置於 binary欄位中,才可以傳回SQL server.
pcSavedTitle = CREATEBINARY(pcSavedTitle)
pcSavedDescription = CREATEBINARY(pcSavedDescription)
*** 回寫到SQL Server�]要轉型回nVarChar (可以接受unicode資料的欄位)
SqlExec([insert into ForeignData (ID,Descript,lDescript) values ] +;
[(?pcID, CAST(?pcSavedTitle as nVarChar(4000)),] +;
[CAST(?pcSavedDescription as nVarChar(4000) ) ) ] )
|
_________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|