pb11.2的字符集合pb8等之前版本不同,在数据窗口的edit的limit出现如下问题
1、limit是生成数据窗口时根据数据库的字符型字段长度自动生成的,例如person_name varchar2(60) ,这个dw列就limit60
2、以前输60个英文字符或者30个汉字后,就再输不进去,现在输30汉字后还能继续输入,能输到60个汉字
3、当有汉字输入时,实际长度有可能超过了limit的限制,一但update就出错了,超长数据库不能接受更新。
请问有什么办法能让limit和原来低一样仍控制字节数而不是11.2版的控制字符数?
我现在没有好办法,只好自己在dw控件editchanged里写脚本处理,虽然可写在祖先对象中,但系统里有很多地方把这个事件代码屏蔽了,查找起来依然很费劲
有没有pb补丁或者pb什么设置可以达到目的或者有改动量比较小的做法?
谢谢
如果你也遇到同样问题但没解决,请帮顶,谢谢
我在editchanged处理如下:
string ls_name
long ll_limit,ll_datalen,ll_pos,ll_left
string ls_left,ls_right
ls_name=dwo.name
ll_limit=long(this.Describe(ls_name+".Edit.Limit"))
if ll_limit>0 then
ll_datalen= lena(data)
if ll_datalen>ll_limit then
ll_pos=this.position()
ls_right=mid(data,ll_pos,ll_datalen)
ls_left=left(data,ll_pos -1)
ll_left=len(ls_left)
do while lena(ls_left)>ll_limit -lena(ls_right) and ll_left>=0
ll_left=ll_left -1
ls_left=left(ls_left,ll_left)
ll_left=len(ls_left)
loop
ll_pos=len(ls_left)
this.setitem(row,ls_name,ls_left+ls_right)
this.selecttext(ll_pos+1,0)
return 1
end if
------解决方案--------------------
这个变为按字符个数算了,
我在pb115里试试
------解决方案--------------------
还未用过pb11,帮顶.
------解决方案--------------------
我没有想明白,为什么不直接修改limit的值呢?
------解决方案--------------------
没找到有效的控制方式,帮顶贴!
------解决方案--------------------
我觉得这个问题你可以这样解决
如果你的DW都是继承的话就好一些,可以在基类的updatestarte事件里检查字符串长度是否大于最大长度来解决这个问题,或者是统一写一个函数来解决这个问题
具体的话,可以遍历检测或者setfilter检测
只一个思路,我还没具体做过,你可以试下,期待结果
------解决方案--------------------
在你的威逼下顶你一次,行不?
呵呵。
尽管Sybase声称PB10后的版本处理字符,都是用Unicode方式,但是,很多方面还是处理不完善的。为什么汉字是用Unicode方式,ASCII字符还是用ANSI。
------解决方案--------------------
------解决方案--------------------
学习了,遇到过这个问题,各种超长。。后来统统扩了次位数,唉
------解决方案--------------------
------解决方案--------------------
这个问题,我遇到过,我的解决方式是在行中插入一个计算列compute_1,值:lena(你的列),然后在你那个列上设置下,比如背景色,或则前景色,设置:如果compute_1的值大于limit则显示为警告色,否则正常颜色
------解决方案--------------------
学习了。。。。。。。。
------解决方案--------------------
不懂,帮顶
------解决方案--------------------
学习了,帮顶
------解决方案--------------------