目前專案是Powerbuilder9.0開發,資料庫為英文版Sql Server,資料庫排序規則為:SQL_Latin1_General_CP1_CI_AS,欄位型別為nvarchar,現在在保存資料時,增加了:N'中文',但保存到資料庫的中文還是亂碼,并且前后的N''都還保留,比如:我在某個輸入框輸入:N'中國',但保存后為N'??',不知道該怎么解決,請賜教,謝謝。
uj5u.com熱心網友回復:
資料庫保存中文,沒必要加N‘進行轉換。試試用這個 Chinese_PRC_CI_AS
另外你的作業系統語言用的是什么?是不是中文的?
uj5u.com熱心網友回復:
資料庫所在的服務器為英文版,SQL Server也是英文版,客戶建的資料庫默認的是SQL_Latin1_General_CP1_CI_AS,如果不能修改這個的情況下,有沒有什么好的解決方式,謝謝。uj5u.com熱心網友回復:
把pb的版本升級到pb10再試試,因為從pb10開始,字串默認都是unicode了
uj5u.com熱心網友回復:
升級太麻煩了,想著如果能有不升級的辦法最好了,謝謝。uj5u.com熱心網友回復:
你試試在sql server里直接寫漢字,是否支持,如果不支持,那就解決不了了、
如果支持,建議你修改連接資料庫時的引數,里面有個language,修改為ZH試試
uj5u.com熱心網友回復:
你如果直接在輸入框輸入N'中國'保存,那么請問你的SQL陳述句是什么?是:
insert into table(name) values(:sle_1.text)
還是:
string sql
sql = "insert into table(name) values("+sle_1.text+")"
EXECUTE IMMEDIATE SQL using SQLCA;
如果你是用的第一種方法那么肯定是不行的;可以用第二種方法試一下
---------------------------------我是分割線---------------------------------------------
如果你是在資料視窗的編輯框里面輸入那應該也是不行的,需要在資料視窗的updateend事件里面用類似前述第二種方方更新一下才行
--------------------------------------------------------------------
以上方法在PB10及以上版本應該是沒問題的,如果是PB9理論上在中文版的客戶端系統下也是沒問題的
uj5u.com熱心網友回復:
漏了,如果你需要保存N''那么SQL陳述句應該是:sql = "insert into table(name) values(N‘"+sle_1.text+"’)"
uj5u.com熱心網友回復:
PB是用OLE DB連接的,在SQL Server的查詢分析器中插入資料時用Values('中國'),插入后是倆問號,用Values(N'中國'),插入后可以正常顯示中文,但資料視窗直接在插入字串中前面加N報錯,如果改成"N'中國'",保存后資料庫保存的是N'中國',很困惑,謝謝uj5u.com熱心網友回復:
建議改用 ODBC 連接測試過OLE DB, 並不理想
最終使用ODBC的方式
uj5u.com熱心網友回復:
但資料視窗直接在插入字串中前面加N報錯,如果改成"N'中國'",保存后資料庫保存的是N'中國'
這句話沒看明白,你是怎么操作的,資料視窗怎么在插入字串前面加N?
uj5u.com熱心網友回復:
更新及插入SQL陳述句是資料視窗自動生成的,也就是說我在資料視窗的輸入框里,如果有中文的改成了N'中國'
uj5u.com熱心網友回復:
PB是用OLE DB連接的,在SQL Server的查詢分析器中插入資料時用Values('中國'),插入后是倆問號,用Values(N'中國'),插入后可以正常顯示中文,但資料視窗直接在插入字串中前面加N報錯,如果改成"N'中國'",保存后資料庫保存的是N'中國',很困惑,謝謝
但資料視窗直接在插入字串中前面加N報錯,如果改成"N'中國'",保存后資料庫保存的是N'中國'
這句話沒看明白,你是怎么操作的,資料視窗怎么在插入字串前面加N?
更新及插入SQL陳述句是資料視窗自動生成的,也就是說我在資料視窗的輸入框里,如果有中文的改成了N'中國'
我是對這一句不理解:“資料視窗直接在插入字串中前面加N報錯”,難道說你的資料視窗不能保存任何N開頭的字串?太不可思議了;如果如你所說:“如果改成"N'中國'",保存后資料庫保存的是N'中國'” 那就表示你的目的已經達到了,對不對?
uj5u.com熱心網友回復:
我是對這一句不理解:“資料視窗直接在插入字串中前面加N報錯”,難道說你的資料視窗不能保存任何N開頭的字串?太不可思議了;這句可能當時描述錯誤,我在查詢分析器中用insert table Values(N'中國'),插入后可以正常顯示中文,所以我想在提交時也這樣寫,所以我直接在pb中寫insert table Values(N'中國'),但報錯,如果再在外面加雙引號,資料里就變成了N'??'
如果如你所說:“如果改成"N'中國'",保存后資料庫保存的是N'中國'” 那就表示你的目的已經達到了,對不對?
這樣保存后也是N'??'
uj5u.com熱心網友回復:
我前面不是寫了,如果你要在資料庫中保存 N'中國' 只需要在sle_1中輸入 N'中國' 然后執行:string sql
sql = "insert into table(name) values(N'"+sle_1.text+"')"
EXECUTE IMMEDIATE SQL using SQLCA;
你直接寫 insert table Values(N'中國')PB的語法里面沒有N的用法所以會報錯
uj5u.com熱心網友回復:
我前面不是寫了,如果你要在資料庫中保存 N'中國' 只需要在sle_1中輸入 N'中國' 然后執行:
string sql
sql = "insert into table(name) values(N'"+sle_1.text+"')"
EXECUTE IMMEDIATE SQL using SQLCA;
你直接寫 insert table Values(N'中國')PB的語法里面沒有N的用法所以會報錯
謝謝,按您這樣執行動態陳述句是可以的,單個記錄更新我在提交完再Update一下也可以,現在還有一種情況,我是多條記錄同時插入,目前我用的方式是先在資料視窗增加多條資料,然后統一update這個視窗,不知道這種情況下該怎么操作,截取insert陳述句后修改嗎?多行多列,資料型別還有其他的,不知道該怎么弄了,謝謝了。
uj5u.com熱心網友回復:
SQLCA.DBParm = "DisableBind=0"dw_1.Update()
SQLCA.DBParm = "DisableBind=1"
這樣試試看
uj5u.com熱心網友回復:
看了一下兩種情況下的SQL陳述句:SQLCA.DBParm = "DisableBind=0" 的時候
exec sp_executesql N'INSERT INTO dbo.Table1 ( name ) VALUES ( @P1 )', N'@P1 nvarchar(50)', N'簡體'
SQLCA.DBParm = "DisableBind=1" 的時候
INSERT INTO dbo.Table1 ( name ) VALUES ( '簡體' )
所以如果遇到NVarChar更新的時候應該使用DisableBind=0引數,其他情況應該使用DisableBind=1(因為動態SQL陳述句在效率上可能不如一般的陳述句)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/48272.html
標籤:DataWindow
上一篇:求助!急!安裝PB12.5.0.2511后主界面database下連接到資料庫不出現資料表
下一篇:pb 12.5攝像頭問題
