DataWindow调用存储器--SQLSTATE=22005--对于造型说明无效的字符值唯一解决方法[原创]

本篇文字要解决的问题:

一问:powerbuilder10在用存储器调用时,retrive时出现错误:造型说明无效的字符值

二问:SQLSTATE   =   22005   
   [Microsoft][ODBC   SQL   Server   Driver]对于造型说明无效的字符值

三问:pb中如何调用sql   server   2000的存储过程

-------------------------------------------------------------------------------------------------------

很多网友认为无法解决问题,或者讨论众多,但未见解决之。我通过实践,在一年前即解决。当然,这个问题颇费了我一些时间。(据说原因是ODBC的不兼容问题,因为旧版本的直连方式没问题)

1. 编写procedure,如pr_query

2. 新增grid的datawindow,选择procedure方式,选择存储器:pr_query,选择手工设置字段。下一步,完成。

3. 在界面的dw_1的事件sqlpreview中编写如下代码:

/*----------------------------------------------------------------------------*/

string sql

sql="exec pr_query  " + right(sqlsyntax,len(sqlsyntax) -30)

dw_1.setsqlpreview(sql)

return 0

/*-------------------------------------------------------------------------------------------------*/

注意:我发觉在此替换掉原来的语句的开头部分,即可成功执行,并运行很好。原因不想深究。

PB反编译大师,PB混淆加密大师 ,互联网数据组件:DataWindowHTTP,ESC/POS打印组件:ESC/POS ImagePrint(LPT,column format),SQLCloudODBC互联网数据库直连驱动 。

想到这个方式是我在分析器里调试跟踪来的语句,一点问题都没有,即将跟踪的语句原样的用setsqlpreview设置,结果可以执行,隧如此修改,果然奏效。

PB反编译大师,PB混淆加密大师 ,互联网数据组件:DataWindowHTTP,ESC/POS打印组件:ESC/POS ImagePrint(LPT,column format),SQLCloudODBC互联网数据库直连驱动 。

30是把数据框用:edit source打开,看到的类似以下语句:

 procedure="1 execute dbo.pr_query;1 @controls1 = :controls1,@controls2 = :controls2........

30是指这个字符串从开头到第一个参数的长度。当然你完全可以抓"@"符号的index来自动计算:
sql="exec pr_query  " + right(sqlsyntax,len(sqlsyntax) -(pos(sqlsyntax,'@') - 1))

//后记。我的程序运行很好。问题解决了。

//20070918补充,ODBC不允许带参数,以上方法是将此过程建立在查询时,即datawindow已经获得参数的实际值后再直接调用执行过程。即可完美解决。如果datawindow无法调用procedure的话,那是非常痛苦的。我曾为此问题苦恼了几天几夜,在此呈现这个简单方法。望大家能用上。

//2013 在PB的dbprofile中,新建一个ODBC连接,然后在sytax标签页,有个strip parameter name选项打勾也可以,直译为剥离参数,有时间我跟踪一下sql语句,原理应该是传送sql时不带参数,与我方法是否相同待确认。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值