PB12.5数据窗口语句的问题

babynotooth 2015-12-22 12:37:19
我用的是PB12.5
打算用dw_1.object.datawindow.syntax将数据窗口的语句储存到SQL数据库里,
然后用select 语句从数据库里将这个语句取出来,用dw_1.create()按此语句重建数据窗口
现在的问题就是PB12.5的数据窗口语句太长了有51410个字符

在SQL里用select语句查询的结果,复制出来只有43680个字符,并非完整的语句

在PB里用select 语句取值取出来的结果也是不完整的,并非完整的语句
导致现在用dw_1.create()按此语句重建数据窗口时,因语句不完整重建失败


请问.有什么办法完成这个过程吗?
...全文
526 10 打赏 收藏 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jlwei888 2015-12-22
  • 打赏
  • 举报
回复
都有blob的
jlwei888 2015-12-22
  • 打赏
  • 举报
回复
你都建好了,还用保存它干嘛啊。
babynotooth 2015-12-22
  • 打赏
  • 举报
回复
引用 1 楼 jlwei888 的回复:
字段类型改为blob的! 你保存SQL就行啊,不用全保存
sql里没有blob这个字段类型吧,我是用的 sql 2008 r2的 主要是要把这个语句保存,如果标题顺序,窗口风格等其他任何改动都要保存下来 以后重建数据窗口的时候,完全按照之前的改动来进行重建
jlwei888 2015-12-22
  • 打赏
  • 举报
回复
字段类型改为blob的! 你保存SQL就行啊,不用全保存
babynotooth 2015-12-22
  • 打赏
  • 举报
回复
引用 9 楼 lzp_lrp 的回复:
[quote=引用 7 楼 babynotooth 的回复:]
[quote=引用 6 楼 jlwei888 的回复:]
直接导出SR文件了

数据库里无法完成这一思路吗,还是说一旦字符长度超过43680 即便保存在了数据库里也等于没用,因为根本取不出来完整的数据?
或者有其他什么办法可以做到更改数据窗口样式后,再次打开程序依然沿用上次的改动?
另外因为我用CS架构,其他客户端也要调用这一改动,所以不能用导出文件的办法,思来想去还是只能用数据库.所有客户端共同访问数据库,对数据窗口做了改动后保存在数据库里,将来调用[/quote]

用这种方式是可以的,比较简单方便,但数据库里的字段要修改,需要用blob类型的来实现,因为可以有的数据窗口的语法更大,超过100K,取数据需要用selectblob,更新数据用updateblob。

也可以把数据窗口各列的属性记录下来,保存到数据库中,如位置、宽度等[/quote]

用blob也试过了,updateblob写入数据库没问题,打开数据库查看也是正常的,
但是用selectblob,取出数据时,发现后面都是乱码的文字

blob is_syntax
string a
selectblob dw_syntax into :is_syntax from dwsyntax where dw_name='w_cx1';
commit;
a=string(is_syntax)
messagebox('',right(a,3000))//返回最后3000个字符

结果却是

WorldMobile 2015-12-22
  • 打赏
  • 举报
回复
引用 7 楼 babynotooth 的回复:
[quote=引用 6 楼 jlwei888 的回复:] 直接导出SR文件了
数据库里无法完成这一思路吗,还是说一旦字符长度超过43680 即便保存在了数据库里也等于没用,因为根本取不出来完整的数据? 或者有其他什么办法可以做到更改数据窗口样式后,再次打开程序依然沿用上次的改动? 另外因为我用CS架构,其他客户端也要调用这一改动,所以不能用导出文件的办法,思来想去还是只能用数据库.所有客户端共同访问数据库,对数据窗口做了改动后保存在数据库里,将来调用[/quote] 用这种方式是可以的,比较简单方便,但数据库里的字段要修改,需要用blob类型的来实现,因为可以有的数据窗口的语法更大,超过100K,取数据需要用selectblob,更新数据用updateblob。 也可以把数据窗口各列的属性记录下来,保存到数据库中,如位置、宽度等
babynotooth 2015-12-22
  • 打赏
  • 举报
回复
想了无数办法,都行不通,最后只得用一个笨方法了.......... 因为数据库窗口语句储存在数据库里的值是完整的,只是取出来的时候少了, 于是把这个值截成两半,取出来,再合并起来...

string cs_syntax,cs_syntax1,cs_syntax2
select LEFT(dw_syntax,20000)  into :cs_syntax1  from dwsyntax where dw_name='w_cx1' ;
select substring(dw_syntax,20001,99999) into :cs_syntax2 from dwsyntax where dw_name='w_cx1';
commit;
cs_syntax=cs_syntax1+cs_syntax2
dw_1.create(cs_syntax)
问题得到了解决,但是总感觉不是很好...........
babynotooth 2015-12-22
  • 打赏
  • 举报
回复
引用 6 楼 jlwei888 的回复:
直接导出SR文件了
数据库里无法完成这一思路吗,还是说一旦字符长度超过43680 即便保存在了数据库里也等于没用,因为根本取不出来完整的数据? 或者有其他什么办法可以做到更改数据窗口样式后,再次打开程序依然沿用上次的改动? 另外因为我用CS架构,其他客户端也要调用这一改动,所以不能用导出文件的办法,思来想去还是只能用数据库.所有客户端共同访问数据库,对数据窗口做了改动后保存在数据库里,将来调用
jlwei888 2015-12-22
  • 打赏
  • 举报
回复
直接导出SR文件了
babynotooth 2015-12-22
  • 打赏
  • 举报
回复
引用 4 楼 jlwei888 的回复:
都有blob的
具体怎么操作,我是要将这个数据窗口的样式保存下来,将来调用,比如将数据窗口改动后,下次打开程序时,保留上次改动,所以思路是,把这个数据窗口的语句写入SQL保存起来,下次打开程序时,直接调用这个语句进行重建数据窗口, 无奈现在的问题就是因为这个语句太长,保存到数据库后取出来不完整,无法调用

611

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧