ODAC設定造成CLOB顯示變成亂碼,是否有解? |
答題得分者是:GrandRURU
|
Reiji
初階會員 發表:30 回覆:57 積分:32 註冊:2008-06-26 發送簡訊給我 |
小弟最近終於買了ODAC,想使用ODAC來達到客戶端免安裝免設定BDE就能使用
就設定方面測試了兩種 第一種可以在客戶端電腦未安裝Oracle的情況下開啟使用 [code delphi] OraSession1.Options.Net:=true;//開啟為客戶端不需安裝Oracle的連接方式 OraSession1.Options.Direct:=True; OraSession1.LoginPrompt:=false; OraSession1.ConnectString:= 'Direct=True;Server=’ ServerIP ’;Port=' PORT ';SID=' SID ';User ID=' UserID ';Password=' PWD ; OraSession1.Server := ServerIP ':' PORT ':' SID ; [/code] 第二種在客戶端電腦還是必須要安裝Oracle客戶端才可使用 [code delphi] OraSession1.Options.Net:=true;//開啟為客戶端不需安裝Oracle的連接方式 OraSession1.Options.Direct:=True; OraSession1.LoginPrompt:=false; OraSession1.ConnectString:='Data Source=' SID ';User ID=' USERID ';Password=' PWD ';Use Unicode=0'; [/code] 兩種都能執行,但在第二種情況下讀取CLOB到Richedit沒有問題,第一種情況下則是變成亂碼 亂碼情況如附件圖檔,左方是直接讀取欄位資料,右方是經過程式碼轉換後 [code delphi] //轉換CLOB內文程式碼 try AStream := TMemoryStream.Create; TBlobField(OraQuery1.FieldByName('A1')).SaveToStream(AStream ); AStream .Position := 0; RichEdit1.Lines.LoadFromStream(AStream ); finally AStream .Free; end; [/code] 相同設定之下,讀取BLOB中的圖檔則不會出現問題,其他欄位中文字也都不會有問題 所以判斷應該是只有CLOB受到OraSession設定不同而影響 本來以為是語系的問題 但是OraSession不論怎麼設定語系或將UseUnicode設為True都沒有用 請問有沒有前輩有遇過這個問題? 該如何設定才能解決亂碼問題?
------
永遠都是新手 |
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
|
Reiji
初階會員 發表:30 回覆:57 積分:32 註冊:2008-06-26 發送簡訊給我 |
===================引 用 GrandRURU 文 章=================== 1.TOraSession.UseUnicode 設為 True 2.寫入TField/TParam 時,使用 .AsCLOBLocator.IsUnicode := True 感謝回答 1.設為True仍無效 2.寫入是正常的,是讀取出來的時候亂碼,如果用PLSQL Developer看CLOB的內容,是正常顯示的,但在Delphi上用第一種連線方式就會亂碼,第二種則正常 不過我還是試著修改寫入時的方法 原本是 [code delphi] ParamByName('A1').LoadFromStream(A1').ParamType := ptInput; ParamByName('A1').AsCLOBLocator.LoadFromStream(AStream); [/code] 結果出現Lob parameter should be Input or Output
------
永遠都是新手
編輯記錄
Reiji 重新編輯於 2016-03-29 09:32:00, 註解 無‧
|
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
請你再試一下:
方法1: var BlobStream: TStringStream; begin BlobStream := TStringStream.Create('', TEncoding.UTF8); 如果還不行,請你再詳述一下你的作業系統和開發環境 以上 ===================引 用 Reiji 文 章=================== 1.設為True仍無效 2.寫入是正常的,是讀取出來的時候亂碼,如果用PLSQL Developer看CLOB的內容,是正常顯示的,但在Delphi上用第一種連線方式就會亂碼,第二種則正常 |
Reiji
初階會員 發表:30 回覆:57 積分:32 註冊:2008-06-26 發送簡訊給我 |
不好意思,我沒有說清楚我的開發環境
目前是還在使用D5,OS是XP,ODAC是9.4.14 for Delphi 5 所以 方法一:CreateBlobStream呼叫不出來,應該是D5不支援 方法二:出現Too many actual parameters,應該也是D5不支援... 剛剛發現測試機是10g環境,中文顯示沒有問題 但是正式機是8i環境,結果中文顯示就亂碼了 不過兩台機器的語系設定是相同的 nls_language=AMERICAN language=TRADITIONAL CHINESE_TAIWAN.ZHT16BIG5 謝謝! ===================引 用 GrandRURU 文 章=================== 請你再試一下: 方法1: var BlobStream: TStringStream; begin BlobStream := TStringStream.Create('', TEncoding.UTF8); 如果還不行,請你再詳述一下你的作業系統和開發環境 以上
------
永遠都是新手
編輯記錄
Reiji 重新編輯於 2016-03-29 09:55:11, 註解 無‧
|
Reiji
初階會員 發表:30 回覆:57 積分:32 註冊:2008-06-26 發送簡訊給我 |
我試著改了一下程式
解決了Lob parameter should be Input or Output的問題 原來起因是再另一個Blob的欄位上,因為測試的時候沒有傳圖片 首先TOraSession.UseUnicodeA1').ParamType := ptInput; ParamByName('PLSQL Developer上就無法看見CLOB內容,相對於之前存入的資料,它會顯示 如圖標示: 在Toad時則是直接出現「ORA-03120:雙工轉換常式 : 發生整數上限溢位.」然後就要強制關閉Toad才能再使用了 不知道這是何解? 能正確用ODAC顯示了卻無法在資料庫工具中顯示,能在工具中顯示了又在ODAC會有問題
------
永遠都是新手 |
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
AsCLOBLocator 過時了,建議使用 AsOraClob 處理
寫入的部份請參閱: ===================引 用 Reiji 文 章=================== 我試著改了一下程式 解決了Lob parameter should be Input or Output的問題 原來起因是再另一個Blob的欄位上,因為測試的時候沒有傳圖片 首先TOraSession.UseUnicodeA1').ParamType := ptInput; ParamByName('PLSQL Developer上就無法看見CLOB內容,相對於之前存入的資料,它會顯示 如圖標示: 和右邊的「...」按下都可以直接看到內容,只有的點選了毫無反應 在Toad時則是直接出現「ORA-03120:雙工轉換常式 : 發生整數上限溢位.」然後就要強制關閉Toad才能再使用了 不知道這是何解? 能正確用ODAC顯示了卻無法在資料庫工具中顯示,能在工具中顯示了又在ODAC會有問題 |
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
Devart 官方針對這個問題有回覆了,說明如下:
「他們停止對 Delphi 5 支援已經有很久一段時間了,我們最後重現這個問題的版本是:Delphi 6 ODAC 9.6.22 。」 原文: Unfortunately, we have discontinued support for Delphi 5 for a long time. The oldest supported IDE version is Delphi 6. Try to reproduce the issue on the latest ODAC version 9.6.22 不過好像沒有說是否解決了這個問題? 以上 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |