如何在使用数据存储区/数据窗口时在PowerBuilder中插入unicode字符串?

时间:2013-10-23 07:57:33

标签: unicode powerbuilder

下面的SQL Insert语句用于插入unicode字符串,并在SQL Server Management Studio或查询分析器中执行时成功运行。

 Column Specs:
 SONUM    VARCHAR(50)
 CONTRACTNUM NVARCHAR(150)
 FNAME     VARCHAR(70)

 INSERT INTO SCH_EDI_3B12RHDR ( SONUM, CONTRACTNUM, FNAME ) 
 VALUES ( 'DPH11309160073CC' , N'Globe MUX Project(客户合同号:NA)' , 'TEST' )

使用数据存储区/数据窗口进行插入操作时,是否可以实现前缀N?如果有,怎么样?下面是PB中当前脚本成功插入数据但中文字符被'?'(问号)替换。

ls_sonum = String(dw_1.Object.shipmentOrderNum[1]) //This holds the value : DPH11309160073CC
ls_chinesechar = String(dw_1.Object.contractnum[1])   // This holds the value : Globe MUX Project(客户合同号:NA)

dw_1.SetItem(1,'sonum',ls_sonum)
dw_1.SetItem(1,'contractnum',ls_chinesechar)
dw_1.SetItem(1,'fname','TEST')

dw.AcceptText( )

IF dw.Update( )  = 1 THEN 
   Commit Using SQLCA ;
END IF

2 个答案:

答案 0 :(得分:1)

你需要把自己挂钩到dw / ds的sqlpreview事件并添加N'你自己。或者如果你使用静态(或禁用?)绑定,你根本不需要做任何事情。 这些都在在线文档中进行了解释。

答案 1 :(得分:0)

我验证了PB版本10的OLE DB驱动程序支持Unicode。您可以在this Sybase document on page nine中找到相关信息。

ODBC / JDBC / OLEDB / ADO.NET数据库支持

客户端/服务器PowerBuilder 10应用程序可以与数据库交换Unicode和ANSI数据 由ODBC,JDBC,OleDB和ADO.NET数据库接口支持,无需任何操作 特殊设置。

建议在使用字符串函数时尝试强制使用不同的编码,有四种选择(参见下面的代码示例)

编码参数是以下之一:

■EncodingANSI!

■编码UTF8!

■EncodingUTF16LE! - UTF-16 Little Endian编码(PowerBuilder 10默认)

■EncodingUTF16BE! - UTF-16 Big Endian编码

// use the correct encoding for your actual data
ls_sonum = String(dw_1.Object.shipmentOrderNum[1], EncodingUTF16BE! ) //holds DPH11309160073CC
ls_chinesechar = String(dw_1.Object.contractnum[1], EncodingANSI!) // holds Globe MUX Project(客户合同号:NA)

我可能会引导你走错路,但我认为这值得尝试,可能会解决问题。