pb11.5的使用体会

由于pb9.0对webservice支持不好,因此将程序升级到pb11.5下面是本人在升级过程中的一些体会,希望对大家有用:
   pb11.5已经不再提供mss microsoft SQL SERVER数据库接口,取而代之的是SNC SQL Native Client接口和ole mimcrosoft ole db接口,因

SNC 需要安装专门的客户端比较麻烦,因此本人采用的是ole db数据接口连接到SQL Server 2000 。使用ole db接口时,本人刚开始的配置参数

是这样的:
a_transaction.DBMS = "OLE DB"
a_transaction.LogPass = "xxxxxx"
a_transaction.LogId = "sa"
a_transaction.AutoCommit = False
a_transaction.DBParm   =   "PROVIDER='SQLOLEDB',"+ "DATASOURCE='"+ls_server+"',"+"PROVIDERSTRING='database="+ls_database+"'"
结果出现两个严重问题,一个问题:凡是char类型的字段,从数据库检索出来后其未填充部分全部用空格代替而不是将其截短,另一个严重问

题就是死锁。后改为
a_transaction.DBMS = "OLE DB"
a_transaction.LogPass = "xxxxxx"
a_transaction.LogId = "sa"
a_transaction.AutoCommit = False
a_transaction.DBParm   =   "PROVIDER='SQLOLEDB',DATASOURCE='"   +   ls_server   +    

"',PROVIDERSTRING='DataTypeCompatibility=80;database="   +   ls_database   +  

";"+"',TIMEOUT=160,OJSyntax='ANSI',PBTrimCharColumns='Yes',PBMaxBlobSize=102400­0,Recheck"
 这两个问题都得到很好的解决,但感觉速度上还是要比mss microsoft SQL SERVER 接口慢
 pb10就开始全面支持unicode因此在进行字符串处理方面一定要注意,在pb9.0本人有一个使用起来感觉很好的一个走纸控件,到pb11.5就发现

有问题,出问题的关键代码是这样的
               blobedit(blob_form,73,char(0))
  j=len(ac_formname)
  m=1
  for i=1 to j
   m=blobedit(blob_new,m,blob(mid(ac_formname,i,1)))
   m=blobedit(blob_new,m,char(0))
  next
  blobedit(blob_form,103,blob_new)
                RegistrySet('HKEY_CURRENT_USER/Printers/DevModePerUser',str_printername, RegBinary!, blob_form)
后经分析发现在pb9.0 blobedit函数是通过ansi编码方式进行处理的,而在pb11.5 blobedit函数是通过unicode编码方式进行处理的,而

windows操作系统对这个注册键是进行unicode方式进行编码的,因此作者"小本鱼"在处理这段代码时都在每一个ansi字符后以char(0)字符进行

填充,以转化为unicode字符因此我们只需要将这段代码改为
 blobedit(blob_form,73,Char(0))
 j=Len(ac_formname)
        m=1
 for i=1 to j
  m=blobedit(blob_new,m,blob(Mid(ac_formname,i,1)))
 next
 blobedit(blob_form,103,blob_new)
 RegistrySet('HKEY_CURRENT_USER/Printers/DevModePerUser',str_printername, RegBinary!, blob_form)
问题就解决了。同时我们在pb11.5中使用字符串函数对字符串进行处理时要注意字符串的编码方式如:mid函数在ansi方式下就要使用midA而在

unicode 方式下就用mid或midw
 另一个问题是filereadex函数的使用,我们知道fileread函数对超长文本的读取是要分批次读取的,现在用filereadex函数就可以一次性读取

整个文本了。

 

pb11.5关于游标

pb11.5的ole db数据接口方式对游标的支持,只支持向前读取,不支持向后读取即只支持fetch ,不支持(fetch prior,fetch first)

pb11.5关于外部函数的引用

比如 Function int rf_load_key_hex(long icdev,int mode,int sec,string nkey) Library "mwrf32.dll" alias for "rf_load_key_hex;Ansi"
如果你传入或返回的是 ansi字符则后面一定要加 ANSI

 pb11.5 与webservice

一、webservice 的发布

       本人在发布webservice时遇到了一些问题,花了一天时间才解决,发布webservice的前提是发布对象必需安装IIS服务,同时要安装dot net 2.0.50727以上版本,还要安装ASPAJAXExtSetup。

遇到的问题一、

这是由于iis服务器没有安装dot net 2.0.50727以上版本,从而不支持服务器扩展引起的,或者你发布的目录要他建一个默认程序,具体方法是,在iis服务器上点你发布的目录

,点属性 ,点创建,如图,执行权限改为脚本和可执行文件。

如果还不能解决,在控制台中进入C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 目录,输入aspnet_regiis.exe -u 先卸载掉asp.net 然后再aspnet_regiis.exe -i安装asp.net

 

问题二、打开webservice页面没有问题了,但调用webservice函数时却出现了问题。问题界面如下:

 

出现上术错误是由于没有找到动态支持库引起的,在powerbuilder runtime packager 中封装powerbuilder .net component支持库,在iis服务器中安装.安装后重启一下电脑,如果还出现这个问题,在系统环境中把路径后的"\"去掉。如"C:\Program Files\Sybase\Shared\PowerBuilder\",改为 C:\Program Files\Sybase\Shared\PowerBuilder,改后重启一下电脑。

 

问题三: 远程发布出现

出现 The RPC Server is unavailable错误。

出现这种错误,1种可能是发布对像服务器和本机的rpc服务没有启动。如果确认rpc服务启动了,在本机增加一个用户和iis服务器所在计算机的用户名密码相同就可以了。

 问题四:没有安装 ASPAJAXExtSetup引起发布后不访问。安装ajax extensions 1.0就可以了。

问题五:pb11.5在发布webservice 出现 pbwsemit.exe 非法操作失败

这是由于你的程序所在路径含有中文的原因,将文件夹改为英文就可以了.

二、webservice 的引用

1、新建webservice对象

2、对象建成功后,定义变量

      SoapConnection   lsc_conn
     mz_hzylservice1soap  lproxy_obj
     meddataservice   lproxy_obj_db
    SoapConnection   lsc_conn_db
    tns1__cardinfo  str_cardinfo

3、实例化

    String   ls_proxy_name   =   "meddataservice"//生成的代理对象名称  
//  String   ls_url   =   base_xtcs.hyip //web   service   url  
//  //  
  lsc_conn_db   =   Create   SoapConnection  
  lsc_conn_db.SetOptions("SoapLog=~"soaplog.txt~"")  
   
  int   li_ret,   i  
  li_ret   =   lsc_conn_db.Createinstance(lproxy_obj_db,ls_proxy_name,base_xtcs.dbip)  
  If   li_ret   <>   0   Then  
  Return     0
else
 return 1
  End   If  

4、引用java编写的webservice时每个对象可能会多出一个前缀如:tns__ 。

 

 

初次使用,感觉pb11.5延续了pb9.0的稳定性,同时对webservice的支持出现了革命性的变化,非常值得称道

下面是本人用ole db接口方式方式,应用程序所包含的动态库:
ADVAPI32.DLL,atl71.dll,DBNETLIB.DLL,DBNMPNTW.DLL,EasySoap115.dll,ExPat115.dll,libeay32.dll,libjcc.dll,msadce.dll,msadcer.dll,

msdatl3.dll,msvcp71.dll,NTWDBLIB.DLL,ODBCBCP.DLL,oledb32.dll,oledb32r.dll,pbdpl115.DLL,PBDWE115.DLL,PBOLE115.DLL,PBSHR115.DLL

,PBVM115.DLL,SQLCTR80.DLL,SQLISAPI.DLL,sqloledb.dll,SQLSRV32.DLL,SQLUNIRL.DLL,ssleay32.dll,utils.dll

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zxszx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值