前往Shuct.Net首页

Shudepb PB反编译专家长时间以来,为业内同类软件事实上的唯一选择.细节,彰显专业.态度,决定品质.

关于PowerBuilder的搜索

pb 动态创建交叉表如何实现-CSDN论坛-CSDN.NET-中国最大的IT技术社区 --> 首页 论坛帮助 论坛牛人 论坛地图 CSDN > CSDN论坛 > PowerBuilder > DataWindow 管理菜单 置顶 推荐 锁定 移动 编辑 删除 帖子加分 帖子高亮 结帖 发帖 回复 xiaoping04408 pb 动态创建交叉表如何实现 [问题点数:100分,结帖人xiaoping04408] 不显示删除回复 显示所有回复 显示星级回复 显示得分回复 只显示楼主 收藏 xiaoping04408 xiaoping04408 等级: 结帖率:98.39% 楼主 发表于: 2010-11-11 13:43:48 如何根据指定的sql数据源: 行、 列、 值 动态生成数据窗口交叉表、 更多 分享到: 相关主题推荐: 数据 sql 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 回复次数:10 wag_enu wag_enu 等级: 结帖率:98.44% 56 #1 得分:0 回复于: 2010-11-11 13:53:18 估计不得行,查了一下 transaction.SyntaxFromSQL ( sqlselect, presentation, err ) 居然Style(Type=presentationstyle) 里的presentationstyle 没有Crosstab 值... 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 xiaoping04408 xiaoping04408 等级: 结帖率:98.39% #2 得分:0 回复于: 2010-11-11 13:59:41 ls_sql = " select t_year , t_month , t_scsl , t_xssl from tempxp" ls_syntax = sqlca.syntaxfromsql( ls_sql, "style(type=crosstab) ", ls_error) dw_1.create( ls_syntax,ls_rtn) if len(ls_error) > 0 then messagebox("ss","创建动态交叉表语法失败!1") return -1 end if 这种语法是可以用的。 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 wag_enu wag_enu 等级: 结帖率:98.44% 56 #3 得分:0 回复于: 2010-11-11 14:03:45 在PB 不知道怎么实现了, 我的方法是先写存储过程实现行转列后,再在PB 里用该存储过程动态创建Grid 型DW . 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 fang3307 fang3307 等级: 结帖率:66.67% #4 得分:0 回复于: 2010-11-11 14:18:01 用PB创建出复杂的sql,然后创建grid的形式创建 例如: select 行,case when 值 else b end,。。。。。。。。。。 from 。。。。。。。。。。 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 xiaobn_cn xiaobn_cn 等级: 结帖率:0% 3 #5 得分:100 回复于: 2010-11-12 11:00:44 PB的实现方式如下: 1. 使用ls_Str = LibraryExport ( "mytest.pbl", "d_test", ExportDataWindow! )获得数据窗口的语法 2. 在得到的字符串中找到如下格式的子串: columns = "dt, inout" rows = "obj" values = "sum(objcount for crosstab)" sourcenames = "obj, dt, inout, objcount 3. 使用自己需要的columns,rows,values构建新的字符串替换它 4. 增加或者删除相关的数据窗口控件(也是修改该字符串) 5. 使用该字符串创建数据窗口 dw_1.Create(ls_Str) 下面是我测试用的代码,其中控件修改部分我没做,是在设计面版中手动删除的 string ls_str long ll_pos1 long ll_pos2 ls_str = LibraryExport ( "mytest.pbl", "d_test", ExportDataWindow! ) ll_pos1 = pos(ls_str, 'columns') ll_pos2 = pos(ls_str, 'htmltable') // 下面注释中是修改前的内容 //columns = "dt, inout" rows = "obj" values = "sum(objcount for crosstab)" sourcenames = "obj, dt, inout, objcount")htmltable ls_str = replace(ls_str, ll_pos1, ll_pos2 - ll_pos1,'columns = "dt" rows = "obj" values = "sum(objcount for crosstab)" sourcenames = "obj, dt, objcount")') dw_1.create(ls_str) dw_1.settransobject(sqlca) dw_1.retrieve() 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 www_huabo www_huabo 等级: 结帖率:96.67% #6 得分:0 回复于: 2010-11-12 11:16:19 该回复于2010-12-02 16:07:17被版主删除 编辑 删除 管理 888888888888 888888888888 等级: 结帖率:100% #7 得分:0 回复于: 2010-11-12 13:28:44 动态创建存储过程! 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 fuxiaoyang13 fuxiaoyang13 等级: 结帖率:100% #8 得分:0 回复于: 2010-11-13 09:22:10 该回复于2010-12-03 11:05:02被版主删除 编辑 删除 管理 xiaoping04408 xiaoping04408 等级: 结帖率:98.39% #9 得分:0 回复于: 2010-11-15 14:45:26 谢谢大家的关注、、本问题已经解决,解决方法如下: 1、先创建一个grid类型的datastore (根据sql语法进行创建) 2、动态修改数据窗口中process中的类型为4(crosstab) 并加入:" crosstab.dynamic = no grid.lines=0 grid.columnmove=no )"等内容 3、添加交叉表的必须项(其中行、列、值是在定义中取到) ls_crosstab = "crosstab(band = foreground crosstabonly = yes " + "~tcolumns = ~"" + ls_columns + "~" rows = ~"" + ls_rows + "~" values = ~"" + ls_values + "~" " + " sourcenames = ~"" + ls_sourcename + "~") " 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 zhenxisuo zhenxisuo 等级: 结帖率:0% #10 得分:0 回复于: 2012-08-01 11:01:38 该回复于2012-08-01 12:59:42被版主删除 编辑 删除 管理 --> --> --> --> --> --> 管理菜单 置顶 推荐 锁定 移动 编辑 删除 帖子加分 帖子高亮 结帖 发帖 回复 写出你眼中的IE11 赢取新年好礼! 勇敢写出你的爱 赢莫文蔚签名大礼 2014年4月微软MVP申请开始了! 陈勇- 敏捷开发现状及发展之路 CSDN高校俱乐部 高校全新改版邀你来学习和挑战 本帖子已过去太久远了,不再提供回复功能。 核心技术类目 全部主题 Java VPN Android iOS ERP IE10 Eclipse CRM JavaScript Ubuntu NFC WAP jQuery 数据库 BI HTML5 Spring Apache Hadoop .NET API HTML SDK IIS Fedora XML LBS Unity Splashtop UML components Windows Mobile Rails QEMU KDE Cassandra CloudStack FTC coremail OPhone CouchBase 云计算 iOS6 Rackspace [关闭] [关闭]