由pb连接oracle字符集引发的问题

chaiwl8869 2014-04-23 11:45:07
pb11.5开发的项目,重装电脑后装了pb12.5,对项目修改后发现存在字符集问题而且不能新建数据窗口,于是

想退回到11.5,删除12.5装11.5,结果用11.5打不开12.5的pbt,而且也存在字符集问题。我想会不会是客户端

的问题,下载安装oracle10green客户端,结果怎么都连不了。现在是进退不能啊!详情如下,求大神帮忙分析分析,给个解决方案!谢谢!

server2003+oracle10g(字符集AMERICAN_AMERICA.US7ASCII),xp+pb11.5 v3127+pb12.5+Oracle9i (9.0.1)
客户端+oracle10green客户端

环境变量
nls_lang:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
oracle_home:G:\Oracle10gClientGreen
path:G:\Oracle10gClientGreen\;E:\Sybase\Shared\PowerBuilder;E:\Sybase\PowerBuilder 12.5;C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319;;C:\Oracle\ora90\BIN

客户端注册表,ORACLE项,3处NLS_LANG值为AMERICAN_AMERICA.US7ASCII

oracle10g client配置日志:
Fatal NI connect error 12505, connecting to:
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.100)(PORT=1521))(CONNECT_DATA=

(SID=dbserver)(CID=(PROGRAM=G:\Oracle10gClientGreen\sqlplus.exe)(HOST=ZHMB02)
(USER=Administrator))))

VERSION INFORMATION:
TNS for 32-bit Windows: Version 10.2.0.4.0 - Production
Windows NT TCP/IP NT Protocol Adapter for 32-bit Windows: Version 10.2.0.4.0 -

Production
Time: 23-4月 -2014 22:13:39
Tracing not turned on.
Tns error struct:
ns main err code: 12564
TNS-12564: Message 12564 not found; No message file for product=NETWORK, facility=TNS
ns secondary err code: 0
nt main err code: 0
nt secondary err code: 0
nt OS err code: 0


以下是测试中文读写结果:
pb11.5 v3127
// Profile dbserver1 读:正常 写:正常
SQLCA.DBMS = "OLE DB"
SQLCA.DBParm = "PROVIDER='MSDAORA',DATASOURCE='dbserver',PBCatalogOwner='system'"


// Profile dbserver 读:乱码 写:乱码
SQLCA.DBMS = "O90 Oracle9i (9.0.1)"
SQLCA.DBParm = "PBCatalogOwner='SYS',NLS_Charset='Local',CnnPool='Yes'"


// Profile dbserver_odb 读:正常 写:正常
SQLCA.DBMS = "ODBC"
SQLCA.DBParm = "ConnectString='DSN=dbserver;UID=heefox;PWD=gxs123',PBCatalogOwner='sys'"

// Profile dbserver_o10
SQLCA.DBMS = "O10 Oracle10g (10.1.0)"
SQLCA.DBParm = "MixedCase=1,ConnectAs='SYSDBA',PBCatalogOwner='SYS'"
提示tns错误

pb12.5
// Profile dbserver_ole 读:正常 写:正常
SQLCA.DBMS = "OLE DB"
SQLCA.DBParm = "PROVIDER='MSDAORA',DATASOURCE='dbserver',PBCatalogOwner='system'"

// Profile dbserver_odb 读:正常 写:正常
SQLCA.DBMS = "ODBC"
SQLCA.DBParm = "ConnectString='DSN=dbserver;UID=heefox;PWD=<******>',PBCatalogOwner='sys'"

// Profile dbserver //错误:failed to get local nls_lang charset id
SQLCA.DBMS = "O90 Oracle9i (9.0.1)"
SQLCA.DBParm = "ConnectAs='SYSDBA',PBCatalogOwner='SYS'"

SQLCA.DBParm = "ConnectAs='SYSDBA',PBCatalogOwner='SYS',NLS_Charset='Local',STRbyCharset=1"

// Profile dbserver //错误:failed to get local nls_lang charset id
SQLCA.DBMS = "O10 Oracle10g (10.1.0)"
SQLCA.DBParm = "MixedCase=1,ConnectAs='SYSDBA',PBCatalogOwner='SYS'"
...全文
4019 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
chaiwl8869 2014-04-25
  • 打赏
  • 举报
回复
引用 4 楼 msgtogcr 的回复:
1. PB 本身没有字符集概念,是由操作系统解释的。 2. 建议把客户端注册表的 ORACLE 项的 NLS_LANG 值设为 SIMPLIFIED CHINESE_CHINA.ZHS16GBK 试试(感觉这才是服务器数据库的字符集,而 AMERICAN_AMERICA.US7ASCII 可能是服务器客户端的字符集)
谢谢各位! 服务器字符集AMERICAN_AMERICA.US7ASCII无误。不费那劲了,就用OLE DB了,不出现字符集问题。 刚重装了12.5,这次anywhere和infomarker什么的全安装了,这下运行正常了,个人感觉infomarker还是需要的。 新情况: 12.5 数据窗口 显示oracle的number型字段为decimal(0),retrieve没问题,但插入数据失败, 如;insert mytable(serial_no,。。) value(123,。。);serial_no为oraclenumber型字段,11.5可以插入行,12.5就不行,不知道怎么解决? 11.5sql语句对oracle日期型字段操作可以用string类型,12.5要to_date 12.5修改11.5做的项目,每个window都要转换一下,麻烦啊。 没做备份,想退回11.5开发更麻烦。硬头皮走吧!大神们多帮忙啊!
WorldMobile 2014-04-25
  • 打赏
  • 举报
回复
引用 3 楼 chaiwl8869 的回复:
[quote=引用 1 楼 lzp_lrp 的回复:] 1.升到pb12.5的程序,再用pb11.5是打不开的,没有办法了,不知道升之前你有无备份 2.如果用oracle直连的方式不行,建议你用ole db 3.建议你把oracle客户端的字符集和服务器上的字符集设置为相同的再试一下
另外,我12.5没装anywhere和infomarker什么的,是否这个原因导致12.5异常的? 还有,用OLE DB 客户端也必须安装oracle客户端软件吗?我卸载Oracle9i (9.0.1)客户端后,OLE DB也连不了[/quote] 与这个应该没有关系的
做梦的猫 2014-04-25
  • 打赏
  • 举报
回复
建议还是解决字符集问题,否则很难预料会出什么问题。。 把客户端环境变量的 NLS_LANG 也改为 AMERICAN_AMERICA.US7ASCII 试试,只要服务端与客户端的字符集一致,ORACLE 就不会进行字符码转换。这样可以保证,在同类型操作系统的客户端上不会出现乱码。
sbigwolf 2014-04-25
  • 打赏
  • 举报
回复
pb125解析想数据发的sql语句的时候有问题。我原来发过一个帖子。忘了具体网址了。
WorldMobile 2014-04-24
  • 打赏
  • 举报
回复
1.升到pb12.5的程序,再用pb11.5是打不开的,没有办法了,不知道升之前你有无备份 2.如果用oracle直连的方式不行,建议你用ole db 3.建议你把oracle客户端的字符集和服务器上的字符集设置为相同的再试一下
做梦的猫 2014-04-24
  • 打赏
  • 举报
回复
1. PB 本身没有字符集概念,是由操作系统解释的。 2. 建议把客户端注册表的 ORACLE 项的 NLS_LANG 值设为 SIMPLIFIED CHINESE_CHINA.ZHS16GBK 试试(感觉这才是服务器数据库的字符集,而 AMERICAN_AMERICA.US7ASCII 可能是服务器客户端的字符集)
chaiwl8869 2014-04-24
  • 打赏
  • 举报
回复
引用 1 楼 lzp_lrp 的回复:
1.升到pb12.5的程序,再用pb11.5是打不开的,没有办法了,不知道升之前你有无备份 2.如果用oracle直连的方式不行,建议你用ole db 3.建议你把oracle客户端的字符集和服务器上的字符集设置为相同的再试一下
另外,我12.5没装anywhere和infomarker什么的,是否这个原因导致12.5异常的? 还有,用OLE DB 客户端也必须安装oracle客户端软件吗?我卸载Oracle9i (9.0.1)客户端后,OLE DB也连不了
chaiwl8869 2014-04-24
  • 打赏
  • 举报
回复
引用 1 楼 lzp_lrp 的回复:
1.升到pb12.5的程序,再用pb11.5是打不开的,没有办法了,不知道升之前你有无备份 2.如果用oracle直连的方式不行,建议你用ole db 3.建议你把oracle客户端的字符集和服务器上的字符集设置为相同的再试一下
用OLE DB连没问题了,字符集已经设置为一样的了,直连还是乱码,是否PB本身的字符集设置和oracle不兼容? 现在12.5不能新建数据窗口,不知道缺什么,重装了N遍了 没备份,只能12.5打开,看来只能复制代码,粘贴到11.5开发;或者搞定12.5,在12.5开发。11.5能运行的项目放12.5下开发,有些地方好像要修改才可以。

794

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 项目管理
社区管理员
  • 项目管理
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧