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

// http://blog.csdn.net/chengg0769 转载保留此行。转载勿修改原文或内加链接。

QQ群请加: 6539042(powerbuilder11&SQL)  

本篇文字要解决的问题:

一问: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

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

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

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

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时不带参数,与我方法是否相同待确认。

你可能感兴趣的:(sql,server,Microsoft,存储,query,PowerBuilder)