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

目 录 第1部分 API函数调用 实例1 使用动态链接库扩展PowerBuilder 实例2 任务状态区图标的创建 实例3 使用API 函数的磁盘卷标 实例4 透明图像的绘制 实例5PowerBuilder实现拨号 实例6 无标题栏窗口的拖动 实例7 PowerBuilder加载控制面板应用程序 实例8 PowerBuilder打开Windows标准对话框 实例9 Power Builder实现位图菜单 第2部分 用户界面设计 实例10 PowerBuilder的日期录入 实例11PowerBuilder窗体中使用ActiveX控件 实例12 阴历日期转换实现 实例13 渐变的Splash窗体实现 实例14 XP风格的按钮实现 实例15 拾色器的实现 实例16 XP风格的进度条 实例17 位图按钮 实例18 文件操作 实例19 MSN风格消息框 实例20 Microsoft Agent 控件使用 实例21 渐变色类的实现 实例22 抓图工具的实现 实例23 MP3播放器的实现 实例24 AVI播放器的实现 实例25 CD播放器的实现 实例26 透明窗口的实现 实例27 状态栏的使用 实例28 日期时间控件使用 实例29 使用ActiveBar创建用户界面 实例30 OutlookBar 界面实现 实例31 界面设计综合举例 第3部分 辅助程序功能设计 实例32 使用API函数实现辅助功能 实例33 CRC校验码的使用 实例34 输入法的枚举 实例35 人民币大小写金额的转换 实例36 数据的压缩和解压缩 实例37 图像扫描实现 实例38 Flash动画的应用 实例39 键盘模拟器的实现 实例40 AresButtonPro控件的使用 第4部分 网络和通信开发 实例41 局域网短消息的发送 实例42 Ping的实现 实例43 FTP客户端的实现 实例44 FAX的发送 实例45 PowerTCP 控件的使用 实例46 使用Windows API实现串行通信 实例47 PowerBuilder实现的邮件发送和接收 实例48 INet对象和WebBrowser控件的使用 实例49 使用MediaPlayer和RealPlayerG2播放流媒体 第5部分 数据窗口 实例50 数据库排序 实例51 数据库与图像的存取 实例52 数据库下拉树控件的实现 实例53 数据窗口导入到Excel表中 实例54 人民币声音拼写检查 实例55 数据窗口中回车键的处理 实例56 使用模板实现数据窗口输出到word文档 实例57 PSR浏览器的实现 实例58 使用PowerBuilder实现ODBC的自动配置 实例59 条形码在PowerBuilder中的应用 实例60 在PowerBuilder使用数据管道 实例61 数据窗口与图表处理 实例62 实现数据窗口输出到HTML网页中 实例63 游标的使用 实例64 动态创建数据窗口 实例65 数据窗口间的数据传递
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zxszx

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

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

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

打赏作者

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

抵扣说明:

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

余额充值