PB动态数据窗口
pb数据窗口,sum的用法
pb数据窗口,sum的用法
您提到的"pb 数据窗口" 和"sum 的用法" 可能涉及到不同的概念。
我将就两者分别进行简要说明:
1. Protobuf(Protocol Buffers)数据窗口:
- Protobuf 是一种轻量级的数据交换格式,由Google设计,用于结构化数据的序列化。
它通常用于在不同系统之间传递和存储数据。
Protobuf 使用`.proto` 文件定义数据结构,然后使用编译器生成与多种编程语言兼容的代码。
- "pb 数据窗口" 可能指的是使用Protobuf 序列化的数据的某个特定范围或窗口。
在这种情况下,您可能需要查看相应的`.proto` 文件,以了解数据结构的定义和如何在窗口内进行操作。
2. sum 函数的用法:
-sum 是一个常见的数学函数,用于计算一组数字的总和。
在编程语言和数据处理工具中,通常有内建的sum 函数,例如在Python、NumPy(用于科学计算的库)和SQL 等环境中。
例如,在Python中:
```python
numbers = [1, 2, 3, 4, 5]
total = sum(numbers)
print(total)
```
这将输出`15`,因为1+2+3+4+5 的和为15。
-如果您具体提到的"sum 的用法" 涉及到特定的上下文,例如在数据库查询中的SUM 操作,或者在某个编程框架中的使用方式,请提供更多上下文,以便我能够提供更具体的信息。
pb中数据窗口的应用
Pb中数据窗口的应用在通常的Server/Client方式MIS开发中,总是有没完没了的报表需要制作,调试报表花费的时间也是最多而且乏味,还常常不能满足客户的要求。
要是能够让用户自己调整报表的格式和内容,然后将它保存下来,程序下次启动时它自动调用保存了的报表格式那有多好。
本人通过如下方法最终实现了用的要求。
PB(PowerBuilder)有一种以PSR结尾的特殊的保存报表的文件格式(本文简称作PSR文件)。
根据数据窗口可以直接读取PSR文件生成报表的原理,程序通过生成PSR文件,实现动态报表格式的保存。
一、实现原理:PB中的报表其实就相当于是数据窗口。
第一步,动态报表的实现。
通过设置数据窗口对象(dataobject)中文本、列等的Resizeable 和moveable属性为1来实现对象位置的拖动控制,通过数据窗口的Modify函数实现对象值的更改(包括增加和删除)。
第二步,报表格式的保存。
在一个应用当中,数据窗口对象的名称总是唯一的,将每一个数据窗口对象转化成PSR文件存于数据库表中。
在窗口打开时,程序先校验报表格式是否存在。
如果存在,先将报表格式读取出来放在一个临时文件当中,然后设置数据窗口(datawindow)的数据对象(dataobject)为这个报表文件,然后提取数据;如果不存在,直接提取数据即可。
二、实现过程:1、建立一个数据库表用以保存报表格式文件。
表名:dyn_reportDwobjectVarchar2(20)数据窗口对象名称Primary keyRptitleVarchar2(80)报表的标题名称MemoLong raw 报表格式2、建立一个窗口w_temp。
定义实例变量如下:string is_dwtype,is_dwobject //保存报表中对象的类型及名称控件名称控件含义Dw_print数据窗口对象Cb_exit退出按钮Cb_savereport 报表格式保存按钮3、在窗口的OPEN事件中加入如下代码, 校验报表格式是否存在,如果存在读取定义好的报表格式到数据窗口。
PB数据窗体技巧
PB数据窗体技巧1.熟悉数据窗体控件:数据窗体有很多不同的控件类型,如文本框、下拉列表、单选按钮等。
熟悉掌握每种控件的特性和使用方法,可以根据需求选择最合适的控件。
2.使用自定义控件:除了内置的控件,PB还支持使用自定义控件。
开发人员可以根据需要自定义控件,并将其应用到数据窗体中。
这样可以更加灵活地满足实际需求。
3.使用动态数据窗体:动态数据窗体是一种可以在运行时根据需求动态生成的数据窗体。
使用动态数据窗体可以根据不同的条件动态地生成不同的数据窗体,提高开发效率和可维护性。
4.使用数据窗口对象:数据窗口对象是一种可以在多个数据窗体之间共享数据和功能的对象。
使用数据窗口对象可以避免重复编写相似的代码,提高代码的复用性。
5.使用数据窗体样式:PB支持使用数据窗体样式来定义数据窗体的外观和行为。
开发人员可以根据需要创建自定义的样式,并将其应用到数据窗体中。
这样可以提高应用程序的一致性和可维护性。
6.使用数据验证和格式化:PB提供了丰富的验证和格式化选项,可以对数据进行有效性检查和格式化。
开发人员可以使用这些选项来确保数据的完整性和一致性。
7.使用数据窗体事件:数据窗体有许多内置事件,开发人员可以通过编写事件脚本来处理特定的事件。
通过使用数据窗体事件,可以实现更复杂的逻辑和交互。
8.使用数据窗体功能:PB提供了许多有用的数据窗体功能,如排序、过滤、分组等。
开发人员可以灵活运用这些功能,为用户提供更好的数据浏览和操作体验。
9.使用数据窗体部件:数据窗体部件是一种可以以独立的方式封装和重用数据窗体中的功能和样式的对象。
使用数据窗体部件可以提高开发效率和代码的复用性。
10.使用数据窗体继承:PB支持使用继承来创建基于已有数据窗体的新数据窗体。
通过继承,可以在不改变原有数据窗体的基础上,添加、修改或删除功能,提高代码的可维护性和可扩展性。
11.使用事务处理:PB支持使用事务处理来确保数据的一致性和完整性。
开发人员可以通过开启和提交事务来控制数据的保存和取消操作。
PB的数据窗口操作
PB的数据窗口操作PB(PowerBuilder)是一种基于面向对象的集成开发环境(IDE),主要用于构建企业级应用程序。
在PB中,数据窗口是一项非常重要的功能,可以用于对数据的处理、展示和修改。
下面将从数据窗口的基本操作、高级特性和数据窗口设计原则等方面,详细介绍PB的数据窗口操作。
一、数据窗口的基本操作1. 创建数据窗口:在PB中,可以通过向导或手动创建数据窗口。
创建数据窗口是通过选择数据源(数据库表、视图或存储过程)、选择数据窗口类型(Grid、Tabular等)和设置窗口布局等步骤完成的。
2.数据绑定:在数据窗口中,可以通过数据绑定将数据源与数据窗口中的控件关联起来。
通过设置数据绑定属性,可以实现数据的读取、展示和修改等功能。
3.数据检索:使用数据窗口可以方便地进行数据检索。
通过设置查询条件、排序方式和数据过滤等属性,可以按照需求从数据库中检索数据,并在数据窗口中显示出来。
4.数据更新:除了展示数据,数据窗口还可以用于数据的更新。
通过设置数据窗口的更新属性,可以实现数据的插入、修改和删除等操作。
同时,PB还提供了事务管理和数据验证等功能,确保数据的完整性和一致性。
5.数据导航:在数据窗口中,可以轻松地实现数据的导航功能。
通过设置数据窗口的导航属性,可以方便地浏览数据,并进行上一条、下一条、第一页和最后一页等操作。
6.数据格式化:PB提供了丰富的数据格式化选项,可以对数据窗口中的数据进行格式化和显示。
例如,可以设置日期格式、货币格式和数值格式等,以便更好地展示和分析数据。
二、数据窗口的高级特性1.动态数据窗口:PB允许动态创建和操作数据窗口。
通过使用动态数据窗口,可以在运行时动态改变数据窗口的结构和属性。
这对于动态查询和灵活的数据展示非常有用。
2.嵌套数据窗口:PB支持嵌套数据窗口的使用。
通过将一个数据窗口嵌套在另一个数据窗口内部,可以实现复杂的数据关联和显示。
例如,可以在父数据窗口中显示子数据窗口的数据。
pb数据窗口设置操作
pb数据窗⼝设置操作1 使DataWindow列只能追加不能修改如何使DataWindow中的数据只能追加新记录⽽不能修改,利⽤ Column 的 Protect 属性可以很⽅便的做到这⼀点,⽅法如下:将每⼀列的 Protect 属性设置为:If( IsRowNew(), 0, 1) )在 PowerScript 中可以动态修改 Protect 属性:dw_1.Modify("column_name_here.Protect='1~tIf(IsRowNew(),0,1)'")这样,DataWindow 中只有新追加的记录可修改,⽽其他记录是只读的。
2 如何在DataWindow中实现列的⾃动折⾏我们在PowerBuilder应⽤程序的开发过程中, 使⽤DataWindow时, 经常会遇到某列的数据太长, 不能同时全部显⽰的情况. 若采⽤⾃动⽔平滚动, 操作起来⼜不够简便. 下⾯介绍⼀种⽅法, 实现列数据多⾏显⽰, 即实现列数据的⾃动折⾏.具体步骤如下:1) 在DataWindow Painter中打开此DataWindow.2) 在需设定⾃动折⾏的列上双击⿏标, 弹开此列的属性窗⼝.3) 选择Position标签, 选中Autosize Height 多选框.4) 选择Edit标签, 不选中Auto Horz Scroll多选框.5) 单击OK按钮, 保存所做的修改.6) 点中Detail Band (即写有Detail的灰⾊长带), 单击⿏标右键, 选择Properties... 菜单项.7) 选中Autosize Height多选框.8) 单击OK按钮, 保存所做的修改.9) 保存此DataWindow.注意:连在⼀起的汉字(中间没有标点或空格分隔), 系统将认为是⼀个单词, 不会⾃动进⾏折⾏.3 在数据窗⼝中实现动画要实现动画,必须要有定时器,在数据窗⼝中已经有了⼀个定时器,双击数据窗⼝将弹出的对话框,在Timer Interval中定义⼤于零的值就有定时器(可以精确到毫秒),有了这个定时器就可以实现动画了。
PowerBuilder(pb)如何更新动态创建的数据窗口
PowerBuilder(pb)如何更新动态创建的数据窗口展开全文2008-06-13 14:49PowerBuilder(pb) 如何更新动态创建的数据窗口为了使动态创建的数据窗口可以被更新,需要在使用dw_control.update()之后进行几个相关的设置:首先需要设置可以更新的列:dw_control.Object.<columnname>.update或dw_control.Modify("<ColumnName>.Update=Yes")这个操作与在Update属性对话框中的"Updateeable Columns"列表框中选择哪些更可以被更新相类似。
在这里,我们假设所有可以被更新的更都是同一张表中的字段,对于要更新的每一个列都应该使用上面的语句。
下一步,应该设置更新是采用的主键:dw_control.Object.<ColumnName>.key = "yes"这个操作与在Update属性对话框中的"Unique Key Columns"列表框中选择哪些更可以被更新相类似。
然后,需要设置WHERE子句的更新方式:dw_1.Object.DataWindow.Table.UpdateWhere = 0 or 1 or 2这对应于设置key, key & updateable, key & modified。
注意,在这里,我们只是对一个表进行了设置,如果需要更新多个表,你需要分别对每个表进行这些设置。
.这样,就可以调用dw_control.Update()另外,还可以用下面的语句来设置:Update Key In Place:Dw_control.object.DataWindow.Table. UpdateKeyInPlace = "yes" or "no"这与在Update属性对话框中Key MOdification下的两个单选按钮作用相同。
PB数据窗口技巧大全
PB数据窗口技巧大全PB数据窗口是PowerBuilder语言中的一种常用控件,用于显示和操作数据。
在实际项目开发中,掌握一些PB数据窗口的技巧能够提高开发效率和用户体验。
下面是一些常用的PB数据窗口技巧的详细介绍,包括动态数据源、处理数据更新、格式化数据、控制数据窗口行为等方面。
1. 动态数据源:PB数据窗口支持通过修改SQL语句和参数实现动态查询。
可以通过修改dw_1.sqlsyntax和dw_1.settransobject等属性实现动态数据源切换或过滤。
2. 处理数据更新:PB数据窗口提供了一些方法来处理数据的插入、更新和删除。
可以使用dw_1.insertrow、dw_1.updaterow和dw_1.deleterow等方法来实现数据的增删改操作。
3. 格式化数据:PB数据窗口提供了一些格式化数据的方法,可以通过修改数据窗口列的format属性来实现对数据的格式化。
例如,可以使用dw_1.modify表示列的format属性来自定义数据的显示格式。
4. 排序和过滤数据:PB数据窗口提供了排序和过滤数据的功能。
可以通过修改dw_1.setsort和dw_1.setfilter等方法实现对数据的排序和过滤。
5. 控制数据窗口行为:PB数据窗口提供了一些属性和方法来控制数据窗口的显示效果。
例如,可以使用dw_1.retrieve来重新检索数据,使用dw_1.setitemstatus来设置数据窗口的状态等。
6.多表连接查询:PB数据窗口支持多表连接查询,可以通过在SQL 语句中使用连接符号和条件来实现多表连接查询的功能。
7.数据窗口插入计算列:PB数据窗口支持插入计算列,可以通过在SQL语句中使用函数和表达式来插入计算列实现对数据的计算和处理。
8.数据窗口多级分组:PB数据窗口支持多级分组,可以通过在数据窗口中设置分组列和聚合函数来实现数据的分组和统计。
9.数据窗口嵌套:PB数据窗口支持嵌套,可以在一个数据窗口中插入另一个数据窗口,实现数据的嵌套显示和处理。
在PB中创建动态数据窗口
要 采 用 动 态 数 据 窗 口 技 术 动 态 地 创 建 数 据 操 作 对
象。
一
套 成 熟 的 应 用 系 统 往 往 具 有 完 备 的 维 护 体
多 大 意 义 了 。在 P 应 用 中 如 何 建 立 灵 活 、 用 的 动 B 实 态 数 据 窗 口 , 显得 十 分 的重 要 了 。 就
tpe) y
系 统 中 生 成 数 据 窗 口 对 象 , 如 果 Da W id w 控 件 t no a
或 Daa t r t S o e系 统 中 定 义 了 当 前 其 他 数 据 窗 口 对
象 , 新 创 建 的 数 据 窗 口对 象 将 替 换 当前 对 象 。 则
创 建 动 态 数 据 窗 口 ,依 据 的 是 数 据 窗 口语 法 。 数 据 窗 口语 法 的建 立 方 式 , 要 有 下 列 几 种 : 主 1S n a F o QL( ) 数 法 .y tx r mS 函 S n a Fr mS y tx o QL( )函 数 法 是 一 个 在 P 应 用 B 中较 常 用 的 函 数 , 语 法 为 : 其
理 自如 。
一
、
问 题 的 提 出
数 据 窗 口的 处 理 机 制 是 根 据 所 需 的 显 示 方 式 将 数 据 源 表 中 的 域 设 计 好 ,在 运 行 时 将 所 需 的 数 据 从
数 据 库 服 务 器 下 载 到 客 户 机 ,将 更 改 后 的 数 据 进 行 提 交 或 回滚 。 这 种 处 理 机 制 大 大 降低 了数 据 的 传 输 量 , 轻 了 网络 的负 担 , 高 了数 据 的 处 理 速 度 。 在 减 提 用 P 设 计 一 些 较 大 型 的 软 件 项 目时 ,用 数 据 窗 口 B
PB中实现数据窗口动态排序的三种方法
PB中实现数据窗口动态排序的三种方法在PowerBuilder中使用数据窗口检索到的数据往往是无序的,虽然可以通过设置Select语句实现排序的功能,但是数据窗口一旦生成都无法进行动态调整。
笔者总结了在已经生成的数据窗口中实现动态排序的三种方法,现介绍给大家。
一、准备工作设计如图1所示的示例窗口。
为了更好地比较三种不同的方法,dw—1中的数据来自两个表student和class。
student表中包含四个字段sid(学号)、sname(姓名)、saddr(住址)和cid(班号),class表中包含两个字段cid(班号)和cname(班级名称)。
图1二、三种方法的源程序三种方法中的“执行”按钮的代码分别为:方法1:用SetSQLselect()string ls—oldsql,ls—newsql,ls—order ls—columnls—oldsql=dw—1.getsqlselect()choose case ddlb—1.textcase ″学号″ls—column=″sid″case ″姓名″ls—column=″sname″case ″住址″ls—column=″saddr″case ″班号″ls—column=″class.cid″case ″班级名称″ls—column=″cname″end chooseif rb—1.checked then ls—order=″ASC″else ls—order=″DESC″end ifls—newsql=ls—oldsql+″ORDER BY ″+&ls—column+″″+ls—orderif dw—1.setsqlselect(ls—newsql)=-1 thenmessagebox(″警告″,″数据设置失败″,stopsign!)else dw—1.settransobject(sqlca)dw—1.reset()dw—1.retrieve()dw—1.setsqlselect(ls—oldsql)end if方法2:用describe()和modify()string ls—mod, ls—order,ls—old,ls—columnls—old=dw—1.describe(′datawindow.table.select′)dw—1.settransobject(sqlca)choose case ddlb—1.textcase ″学号″ls—column=″sid″case ″姓名″ls—column=″sname″case ″住址″ls—column=″saddr″case ″班号″ls—column=″class.cid″case ″班级名称″ls—column=″cname″end chooseif rb—1.checked then ls—order=″ASC″else ls—order=″DESC″end ifls—mod=″datawindow.table.select=′″+ls—old+&′ORDER BY ″′+ls—column+′″′+ls—order+″′″dw—1.modify(ls—mod)dw—1.retrieve()dw—1.modify(″datawindow.table.select= &′″+ls—old+″′″)方法3:用setsort()和sort()string ls—sort,ls—order,ls—columnchoose case ddlb—1.textcase ″学号″ls—column=″#1″case ″姓名″ls—column=″#2″case ″住址″ls—column=″#3″case ″班号″ls—column=″#4″case ″班级名称″ls—column=″#5″end chooseif rb—1.checked then ls—order=″A″else ls—order=″D″end ifls—sort=ls—column+′′+ls—orderdw—1.setsort(ls—sort)dw—1.sort()三、三种方法的比较1.第一种和第二种方法要求数据窗口在生成时是无序的,第三种方法无此要求。
PB数据窗口技巧问答
PB数据窗口技巧问答PB(PowerBuilder)是一种集应用程序开发、部署和维护于一体的集成开发环境(IDE)。
PB数据窗口是PB的核心组件之一,用于与数据库交互和显示数据。
以下是一些PB数据窗口技巧的问答,帮助您更好地理解和使用PB数据窗口。
1.什么是PB数据窗口?PB数据窗口是PB的一个重要组件,用于与关系型数据库进行交互和显示数据。
它提供了丰富的功能,包括数据检索、修改、删除和插入等。
数据窗口可以通过自动生成的SQL语句或手动编写的SQL语句来实现与数据库的交互。
2.PB数据窗口有哪些类型?PB数据窗口有多种类型,包括查询数据窗口(Browse DataWindow)、单行数据窗口(Single Row DataWindow)、自由形式数据窗口(Freeform DataWindow)和图表数据窗口(Graph DataWindow)等。
每种类型都适用于不同的数据交互和显示需求。
3.如何创建一个PB数据窗口?创建PB数据窗口可以通过PB的IDE界面进行操作。
首先,打开PB的设计视图,在对象树中选择需要添加数据窗口的PBL或PBT文件。
然后,在菜单栏中选择 File -> New -> DataWindow,根据需要选择数据窗口类型并完成相关设置。
最后,设计数据窗口的外观和布局,并与数据库进行绑定。
4.PB数据窗口如何与数据库交互?PB数据窗口可以与数据库进行交互,并对数据进行增、删、改、查操作。
在设计视图中,可以绑定数据窗口的SQL语句或存储过程,通过调用数据窗口的相应方法或事件触发数据库操作。
数据窗口还可以设置过滤器、排序、分组和连接等功能,实现更复杂的数据处理逻辑。
5.如何在PB数据窗口中显示数据?PB数据窗口可以通过数据源对象(如数据库表或查询)来显示数据。
在设计视图中,可以设置数据窗口的数据源属性为相应的数据源对象,然后通过设计数据窗口的布局和样式,以及定义显示数据的参数和条件,来展示数据。
PB实现数据窗口动态排序的方法
PB实现数据窗口动态排序的方法在PowerBuilder中使用数据窗口检索到的数据往往是无序的,虽然可以通过设置Select 语句实现排序的功能,但是数据窗口一旦生成都无法进行动态调整。
笔者总结了在已经生成的数据窗口中实现动态排序的三种方法,现介绍给大家。
一、准备工作设计如图1所示的示例窗口。
为了更好地比较三种不同的方法,dw—1中的数据来自两个表student和class。
student表中包含四个字段sid(学号)、sname(姓名)、saddr(住址)和cid(班号),class表中包含两个字段cid(班号)和cname(班级名称)。
二、三种方法的源程序三、三种方法中的“执行”按钮的代码分别为:ss方法1:用SetSQLselect()string ls—oldsql,ls—newsql,ls—order ls—columnls—oldsql=dw—1.getsqlselect()choose case ddlb—1.textcase “学号”ls—column=“sid”case “姓名”ls—column=“sname”case “住址”ls—column=“saddr”case “班号”ls—column=“class.cid”case “班级名称” ls—column=“cname”end chooseif rb—1.checked then ls—order=“ASC”else ls—order=“DESC”end ifls—newsql=ls—oldsql+” ORDER BY“+&ls—column+””+ls—orderif dw—1.setsqlselect(ls—newsql)=-1 thenmessagebox(“警告”,”数据设置失败”,stopsign!)else dw—1.settransobject(sqlca)dw—1.reset()dw—1.retrieve()dw—1.setsqlselect(ls—oldsql)end if方法2:用describe()和modify()string ls—mod, ls—order,ls—old,ls—columnls—old=dw—1.describe(…datawindow.table.select‟)dw—1.settransobject(sqlca)choose case ddlb—1.textcase “学号”ls—column=“sid”case “姓名”ls—column=“sname”case “住址”ls—column=“saddr”case “班号”ls—column=“class.cid”case “班级名称” ls—column=“cname”end chooseif rb—1.checked then ls—order=“ASC”else ls—order=“DESC”end ifls—mod=“datawindow.table.select=‟“+ls—old+&…ORDER BY“‟+ls—column+‟“‟+ls—order+”‟“dw—1.modify(ls—mod)dw—1.retrieve()dw—1.modify(“datawindow.table.select= &‟“+ls—old+”…“)方法3:用setsort()和sort():string ls—sort,ls—order,ls—columnchoose case ddlb—1.textcase “学号” ls—column=“#1”case “姓名” ls—column=“#2”case “住址” ls—column=“#3”case “班号” ls—column=“#4”case “班级名称” ls—column=“#5”end chooseif rb—1.checked then ls—order=“A”else ls—order=“D”end ifls—sort=ls—column+‟‟+ls—orderdw—1.setsort(ls—sort)dw—1.sort()三、三种方法的比较:1.第一种和第二种方法要求数据窗口在生成时是无序的,第三种方法无此要求。
PB动态创建数据窗口
PB动态创建数据窗口动态创建数据窗口在实际应用中,经常需要根据用户需求来动态创建数据窗,一般方法是这样的。
在一个window中加入一个数据窗控件,如dw_new,但是该数据窗没有dataobject,(空白的)就可以用以下语法来创建:dw_new.create(ls_syntax,ls_error)//创建语法,错误信息ls_syntax可以用以下三种方法来形成:一、动态由sql语法创建://连接到pb的example数据库stringls_sql,ls_syntax,ls_errorls_syntax=''selectfromdepartment''ls_syntax=sqlca.SyntaxFromSQL(ls_sql,''style(type=grid)'',ls_ error)iflen(ls_error)>0thenmessagebox(''Error'',''SyntaxFromSQLError:~r''+ls_error) elsedw_new.create(ls_syntax,ls_error)iflen(ls_error)>0thenMessageBox("Error","Createhavetheseerrors:~r"+ls_error) elsedw_new.settransobject(sqlca)dw_new.retrieve()endifendif二、由另一个数据窗的syntax来创建stringls_syntax,ls_errorls_syntax=dw_test.describe(''datawindow.syntax'')dw_new.create(ls_syntax,ls_error)ifls_error''''thenmessagebox(''CreateError'',ls_error)elsedw_new.settransobject(sqlca)dw_new.retrieve()endif三、读取psr文件来创建stringls_syntax,ls_error,ls_retls_ret=char(13)+char(10)//回车键intli_fileNumlongli_lengthli_FileNum=FileOpen("efef.psr",Streammode!,read!,shared!,R eplace!)ifli_filenum>0thenFileSeek(li_FileNum,158,FromBeginning!)li_length=fileRead(li_filenum,ls_syntax)endiffileclose(li_filenum)ifli_length=0thenreturnls_syntax="release5;"+ls_ret+ls_syntax//截掉ls_syntax中的数据部分, 5.0以"sparse(names="dept_name?)"作为参考位置//6.0以html(作为参考位置longpos1,pos2pos1=pos(ls_syntax,''sparse(names="'',1)pos2=pos(ls_syntax,''"'',pos1+16)ls_syntax=left(ls_syntax,pos1)+mid(ls_syntax,pos1+1,pos2-pos1+1)dw_New.create(ls_syntax,ls_error)ifls_error''''thenmessagebox(''CreateError'',ls_error)elsedw_new.settransobject(sqlca)dw_new.retrieve()endif//pb6,pb7的代码可以参照pb5自己写,只是文件头和数据窗结束标记不同而已。
PB数据窗口及事件
PB数据窗⼝及事件Pb数据窗⼝1、Pb数据窗⼝介绍(结合实例进⾏讲解):数据窗⼝控件对应到数据窗⼝对象显⽰数据。
数据窗⼝对象分为:常⽤的数据窗⼝类型:Composite 复合报表数据窗⼝Crosstab 交叉报表数据窗⼝Freeform ⾃由模式数据窗⼝Graph 图形报表数据窗⼝Grid ⽹格数据窗⼝Group 分组数据窗⼝n-up 多列显⽰数据窗⼝分别举例说明各个数据窗⼝:杏林妙⼿中的体检报告中保护上述数据窗⼝类型。
2、数据窗⼝数据源类型介绍:Quick select、sql select、query、external、stored procedure 分别为:通过单表查询,通过多表查询,通过查询对象,通过⾃定义的字段,通过存储过程。
3、数据窗⼝控件常⽤函数介绍:Setredraw(boolean):设置是否⾃动刷新报表,true ⾃动刷新,false不⾃动刷新。
Describe(string):获取数据窗⼝指定对象的属性,string为数据窗⼝表达式。
例如:“t_1.text”等。
Modify(string):设置数据窗⼝指定对象的属性,和describe配合使⽤,string为数据窗⼝表达式。
例如“t_1.text=?123?”描述查找相关设置的⽅法。
Getitemstring(int,string)、Getitemstring(int,int):获取数据窗⼝指定⾏的字符串列的值,参数:⾏号,列名(或列值)。
Setitem (int,string,string)、Setitemstring(int,int,string):设置数据窗⼝指定⾏的字符串列的值,参数:⾏号,列名(或列值),设置值。
(还有获取其他数据类型的类似函数不做赘述!,还可以通过object.列名[⾏号] 来获取和设置指定⾏列的值)Deleterow(int):删除⾏指定⾏的操作,和循环配合使⽤的注意事项。
Insertrow(0):插⼊⾏,参数0表⽰在最后⼀⾏插⼊Rowcount():当前数据窗⼝的⾏数。
pb数据窗口内嵌数据窗口
pb数据窗口内嵌数据窗口在PB(PowerBuilder)开发中,数据窗口是一个重要的控件,用于显示和编辑数据库中的数据。
数据窗口内嵌数据窗口是指在一个数据窗口中嵌入另一个数据窗口,实现数据的嵌套显示和关联编辑,为开发人员提供了更灵活的数据展示和处理方式。
本文将介绍PB数据窗口内嵌数据窗口的使用方法和注意事项。
一、数据窗口内嵌数据窗口的概念和作用数据窗口内嵌数据窗口是一种多层次的数据窗口结构,可以在一个主数据窗口中嵌套显示其他子数据窗口。
主数据窗口可以是一个查询结果集,而子数据窗口可以是主数据窗口中的一个或多个子查询结果集。
通过内嵌数据窗口,可以实现复杂的数据展示和编辑需求。
内嵌数据窗口主要有以下作用:1. 数据关联:通过在主数据窗口和子数据窗口之间建立关联,实现数据的级联更新。
2. 多表展示:将多个相关的数据表通过内嵌数据窗口一起展示,方便用户查看和编辑相关信息。
3. 数据嵌套:在一个数据窗口中嵌套显示其他数据窗口,形成层次结构,提供更灵活的数据展示方式。
二、数据窗口内嵌数据窗口的配置步骤在PB中配置数据窗口内嵌数据窗口需要以下几个步骤:1. 创建主数据窗口:首先,创建一个主数据窗口,作为内嵌数据窗口的容器。
可以根据需要定义数据源和数据对象,设置数据窗口的外观样式。
2. 创建子数据窗口:在主数据窗口中创建子数据窗口。
子数据窗口可以是一个新的数据窗口对象,也可以是一个已有的数据窗口对象。
3. 定义关联:在主数据窗口中,设置与子数据窗口之间的关联规则。
可以通过设置共享数据源、共享变量等方式来建立关联。
4. 设置显示属性:设置子数据窗口在主数据窗口中显示的方式。
可以设置子数据窗口的位置、大小、可见性等属性。
5. 运行测试:编译和运行主数据窗口,查看内嵌数据窗口是否正确显示和关联。
三、注意事项和常见问题在使用PB数据窗口内嵌数据窗口时,需要注意以下事项和常见问题:1. 数据源和查询条件:主数据窗口和子数据窗口应该使用相同的数据源,以确保数据的一致性。
在PB中动态修改数据窗口DW的SQL语句方法注意事项
在PB中动态修改数据窗口DW的SQL语句方法注意事项数据库应用程序通常进行一项确定的工作,在编写和编译时就可以确定完整的SQL语句,但是在编译时不能确定SQL语句的具体格式和参数时,只能在程序运行过程中构造SQL语句,需要使用动态SQL语句。
以Format 4 动态SQL 语句为例,使用格式如下:DECLARE Cursor | ProcedureDYNAMIC CURSOR | PROCEDUREFOR DynamicStagingArea ;PREPARE DynamicStagingArea FROM SQLStatement{USING TransactionObject} ;DESCRIBE DynamicStagingAreaINTO DynamicDescriptionArea ;OPEN DYNAMIC Cursor | ProcedureUSING DESCRIPTOR DynamicDescriptionArea} ;EXECUTE DYNAMIC Cursor | ProcedureUSING DESCRIPTOR DynamicDescriptionArea ;FETCH Cursor | ProcedureUSING DESCRIPTOR DynamicDescriptionArea ;CLOSE Cursor | Procedure ;---- 在使用动态SQL语句时,需准备DynamicStagingArea对象(全局对象SQLSA)和DynamicDescriptionArea对象(全局对象SQLDA)。
定义游标或过程,读取PREPARE语句中的SQL语句以及语句中说明的参数和类型,执行FETCH语句后,调用相关的函数逐条读取并处理检索结果。
---- 动态SQL语句虽然解能够在程序运行过程中构造SQL语句,但在实际应用中较少使用。
若SELECT语句的结果序列一定,可以通过重新指定DataWindow 对象的SELECT语句的方法,达到动态修改SQL语句的功能。
[整理版]利用PB动态创建数据窗口
利用PB动态创建数据窗口当利用PowerBuilder建立数据窗口时,用户通常不能自己选择数据来源和显示类型。
如何让用户在应用程序中自己定义数据窗口的数据来源和显示类型呢?为了达到这个目的,我们必须在运行程序阶段根据用户自己的需求,动态地建立一个数据窗口。
笔者将结合实际,详细介绍动态创建数据窗口的步骤。
在建立动态数据窗口之前,必须先得到数据窗口对象的语法,PB中为我们提供了SyntaxFromSQL( )函数,利用这个函数可以得到建立数据窗口的语法。
SyntaxFromSQL()函数的基本格式如下:事物对象.SyntaxFromSQL(数据来源字符串,显示类型字符串,错误字符串)下面是建立一个数据窗口对象语法的范例∶利用SyntaxFromSQL( )所建立的数据窗口对象是在运行阶段才建立的对象,并不会自动保存在PB的对象数据库Library 中。
为了以后可以重复使用这个数据窗口对象,可以利用LibraryImport( )函数保存数据窗口对象。
在利用SyntaxFromSQL( )函数建立一个数据窗口语法后,必须将它与窗口上的数据窗口控件结合,这个数据窗口控件必须已经存在于窗口中。
要将数据窗口对象语法和一个已经存在的数据窗口控件结合,必须利用Create( )函数,下面是范例程序∶在上面程序中,ls_syntax是运行SyntaxFromSQL( )函数后所返回的字符串。
除此之外,也可以利用Librar yExport( )函数从PB对象数据库中得到已经存在于PBL中的数据窗口对象语法。
因为Create( )函数会破坏先前数据窗口与事物对象的结合,所以必须利用SetransObject( )函数重新结合事物对象给新的数据窗口对象,最后再运行Retrieve( )函数,从数据库中读取数据。
最后,我们需要利用SQL 语句字符串,动态创建一个新的数据窗口对象到一个数据窗口控件当中。
虽然,在运行阶段并不能直接在窗口上建立一个数据窗口控件,但却可以利用用户对象建立一个与窗口上一样的数据窗口控件,在运行阶段时再动态打开这个用户对象。
PB动态数据窗口应用
PB动态数据窗口应用(1)作者:wangxc来源:博客园发布时间:2006-05-23 11:29 阅读:1246 次原文链接[收藏] PowerBuilder的应用开发中,动态数据窗口的应用还是很有用的,在航班指挥调度中,机位动态、航班信息,图形化的操作,下面是实现一个模拟民航二所的指挥系统的机位动态调度图:具体实现功能:1、纵向是表示机位分布,横向是时间轴,2、在每隔一段时间内,绿色的时间线会刷新时间的位置3、动态创建航班位置,按照时间的刷新和机位的调整改变机位4、可以拖动修改机位5、鼠标移到航班时可以动态显示航班的详细信息6、限制已经执行过的航班的修改技术要点描述:1、动态创建机位、时间点的位置(目前时间点的各个位置不是很准,但是an hour下还是很准)ll_xcount = 0for li_i =1 to ii_hours + 1 //几个小时ls_coltitle = 'B_'+"t_"+String(li_i)if li_i= 1 thenls_now = '机位'ls_mess= dw_show.modify("create text(band=header alignment='2' text= '"+ls_now+"' border='6' color='8388608' x='0' y='5' height='188' width='"+strin g(ii_jwwidth)+"' html.valueishtml='0' name="+ls_coltitle+" visible='1' moveabl e=1 font.face='Tahoma' font.height='-14' font.weight='400' font.family='0' fon t.pitch='2' font.charset='134' background.mode='2' background.color='67108864 ' )")ll_xcount = ii_jwwidthelsels_now = string(li_i - 2)+'点~r~n'+"| | |"ls_mess= dw_show.modify("create text(band=header alignment='2' text= '"+ls_now+"' border='6' color='8388608' x='"+string(ll_xcount)+"' y='5' height= '188' width='"+string(ii_objwidth)+"' html.valueishtml='0' name="+ls_coltitle+ " visible='1' moveable=1 font.face='Tahoma' font.height='-14' font.weight='40 0' font.family='0' font.pitch='2' font.charset='134' background.mode='2' backgr ound.color='67108864' )")ll_xcount = ll_xcount + ii_objwidthend ifnext2、创建时间线、机位分割线dw_show.modify("create line(band=foreground x1='0' y1='0' x2='0' y2='"+stri ng(dw_show.height)+"' name=l_time visible='1' pen.style='2' pen.width='5' pen. color='65280' background.mode='2' background.color='1073741824' )")ll_ycount = 0for li_i =1 to ii_jwamount + 1ls_linename = 'l_detailbar'+string(li_i)dw_show.modify("create line(band=detail x1='0' y1='"+string(ll_ycount)+"' x2='"+string(ll_xcount)+"' y2='"+string(ll_ycount)+"' name="+ls_linename+ " visible='1' pen.style='1' pen.width='1' pen.color='134217731' background.mod e='2' background.color='1073741824' )")ll_ycount = li_i * 200next3、创建机位(要对准刚才创建的机位分割线)for li_i = 1 to li_countls_obj = "JW_T_"+string(li_i)ls_text = "~r~nP"+string(li_i)ls_mess= dw_show.modify("create text(band=detail alignment='2' text='"+l s_text+"' border='6' color='8388608' x='0' y='"+ls_y+"' height='188' width='"+s tring(ii_jwwidth - 6)+"' html.valueishtml='0' name="+ls_obj+" visible='1' move able=1 font.face='Tahoma' font.height='-14' font.weight='400' font.family='0' f ont.pitch='2' font.charset='134' background.mode='2' background.color='671088 64' )")ls_y = string( li_i * 200 + 6 )next4、设置时间线走的位置(注意在时间线离开当前页面超过一半时要相应调整横向滚动条)//取整ll_move =wf_count_width(at_time)dw_show.modify("l_time.x1="+string(ll_move))dw_show.modify("l_time.x2="+string(ll_move))ll_position = ll_move - ll_middle - ll_xif ll_position>0 thenls_mod = "DataWindow.HorizontalScrollPosition=" +string(ll_position)dw_show.Modify(ls_mod)end ifil_timelineX = ll_move5、按照航班的时间点创建航班的块li_count = ids_hbxx.rowcount( )for li_i =1 to li_countls_hbh = ids_hbxx.object.hbh[li_i]ls_jw = ids_hbxx.object.jw[li_i]ldt_jlsj = ids_hbxx.object.jlsj[li_i]ldt_qfsj = ids_hbxx.object.qfsj[li_i]ll_id = ids_hbxx.object.id[li_i]ls_obj = "hb_t_"+string(li_i)li_jw_row =integer( mid(ls_jw,2))if li_jw_row>0 thenlt_qfsj = time(ldt_qfsj)lt_jlsj = time(ldt_jlsj)ls_x1 = string(wf_count_width(lt_jlsj))ls_x2 = string(wf_count_width(lt_qfsj))ls_objwidth = string (wf_count_width(lt_qfsj) - wf_count_width(lt_jlsj) )ls_y = string(integer(is_detailheight)*(li_jw_row - 1) + 6)//integer(is_headerheight)+ls_text = ls_hbh+' '+ls_jwls_tag= string(ll_id)+'/'+string(li_jw_row)ls_mess= dw_show.modify("create text(band=detail alignment='0' text='" +ls_text+"' border='6' color='8388608' x='"+ls_x1+"' y='"+ls_y+"' height='188 ' width='"+ls_objwidth+"' html.valueishtml='0' name="+ls_obj+" tag='"+ls_tag +"' visible='1' moveable=1 slideup=allabove font.face='宋体' font.height='-12' f ont.weight='400' font.family='0' font.pitch='2' font.charset='134' background.m ode='2' background.color='67108864' )")if il_timelineX>=long(ls_x1) then //已经过时,不允动dw_show.modify(ls_obj+".Moveable=0")elsedw_show.modify(ls_obj+".Moveable=1")end ifend ifnext6、销毁在动态数据窗口上创建的数据窗对象dw_show.modify("destroy "+ls_object)还没实现的功能:1、对于机位的允许停放的机型的限制(需要机位、机型的描述表)2、对于显示的信息不很完整(因为只看过两次)3、时间的刻度不一定移到完全准确的位置,但是长时间(1小时)段来看是准确的4、对于同一个机位上同一个时间点的,移动重叠判断没有时间做了,这已经花了我很多晚上的时间了。
PB实现数据窗口的动态排序
PB实现数据窗口的动态排序在用到Windows的资源管理器的时候,当我们需要按照文件的类型或名称排序的时候只要用鼠标点击一下相应的标题栏,系统会按照升序或降序交替排序,这完全取决于用户鼠标点击的奇偶数。
如此方便的操作何不用到我们的数据窗口中——实现按某列的动态排序。
为了实现上述功能,程序首先需要用到一个全局变量(相对于PB来说可以用窗体变量),用它来控制连续两次点击之间的排序方向。
因为字段的排序方向只有升序和降序两种,所以我们可以用一个Boolean型。
本例中是Boolean ib_flag。
接着在数据窗口控件的Clicked事件中写上如下代码/*****************************程序代码******************************/ String ls_column, ls_sortls_column = this.GetObjectAtPointer() // 得到鼠标按下位置的对象名ls_column = left(ls_column, len(ls_column) - 2) // 得到列标题名字if not Lower(right(ls_column, 2)) = "_t" then return// 如果不是缺省的列标题,即以“_t”结尾或鼠标根本没有点在列标题上则退出ls_column = left(ls_column, len(ls_column) - 2) // 去掉列标题末尾的“_t”,得到有效的列标题名// 进行升序和降序的切换if ib_flag thenls_sort = ls_column + " A" // 升序elsels_sort = ls_column + " D" // 降序end ifib_flag = not ib_flag // 为下一次排序准备ls_sort = ls_sortthis.setsort(ls_sort)this.sort()/*****************************结束******************************/ 注:这里所叙述的数据窗口中列的动态排序是以系统默认的列标题名为前提,即在标题栏中列标题名字是以“_t”结尾。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[PB]-动态数据窗口〓创建动态数据窗口若要动态创建数据窗口,需要使用函数Create,该函数的语法如下:dw_1.Create(syntax{,errorbuffer})其中,dw_1是数据窗口控件的名称,该数据窗口控件要和新创建的数据窗口对象相关联。
syntax是用来描述创建数据窗口对象的确切语法的字符串。
errorburrer是可选项,用来保存创建数据窗口对象过程中发生的错误信息。
如果不指定该参数,就会在发生错误时显示一个错误信息的提示窗口。
如果创建成功该函数返回1,否则返回-1,如果参数为null则函数返回null。
由于Create函数成功创建数据窗口对象后,要改变dw_1数据窗口控件所关联的数据窗口对象,因此,需要重新为数据窗口设置事务对象(使用函数SetTransObject或者SetTrans)。
获取创建数据窗口的语法有多种方法,可以对相关的SQL语句使用SyntaxFromSQL函数,也可以使用对已经创建好的数据窗口对象使用LibraryExport函数。
因为创建数据窗口的语法比较复杂,即使使用了LibraryExport输出已有数据窗口对象的语法,操作起来也相当费劲。
所以,更为通用的是前面一种方法。
这种方法配合一定的编程技巧,让用户指定要创建的数据窗口对象的SQL语句,使用户有更多的自由和选择。
使用这种方法,肯定用到函数SyntaxFromSQL,它的语法是:transaction.SyntaxFromSQL(SQLselect,presetation,err)其中,transaction是事务对象的名称,该事务对象必须正确地设置了相关参数,并且和数据库建立了联结。
SQLselect是用来创建数据窗口的SQL语句,为String 类型。
presentation是要创建的数据窗口对象的显示风格,为String类型。
简单的格式是:Style(Type=presentationstyle)其中Style和Type都是保留字,presentationstyle的取值有Tabular,Grid,Form,Graph,Group,Label和Nup,其中Tabular是缺省类型。
err是用来保存函数执行时出错信息的string类型的变量。
*关于函数SyntaxFromSQL的参数presentation可以有更复杂的语法。
其格式是:"Style ( Type=value property=value ... )DataWindow ( property=value ... )Column ( property=value ... )Group groupby_colnum1 Fby_colnum2 ... property ... )Text property=value ... )Title ( 'titlestring' )"使用这样的格式,可以详细定义要创建的数据窗口对象的外观。
〓在很多情况下都需要一个数据窗口控件和不同的数据窗口对象关联。
可以通过修改数据窗口控件的dataobject属性来实现。
在修改了这一特性之后,数据窗口控件就不再具有与它相关的事务处理对象了,应该再重新为数据窗口设置事务对象。
*如果为数据窗口设置了行焦点标志,在修改了dataobject属性后应该重新设置行焦点标志。
〓获得数据窗口的SQL语句有时需要修改数据窗口对应的SQL语句,以便构造查询应用。
这时,首先就要读取数据窗口当前的SQL语句,然后再对where子句进行修改。
可以有多种方法获取SQL语句。
最常用的是使用函数GetSQLSelect,它的语法如下:dw_1.GetSQLSelect()其中,dw_1是数据窗口控件的名称,可以是子数据窗口或datastore等。
函数执行正确则返回对应的SQL语句,否则返回空字符串("")。
另外,还可以使用Describe函数描述数据窗口对象的相关属性来获得。
在使用该函数时,如果数据宙口联结到数据库则返回真正的SQL语句,否则返回数据窗口的PBselect语句。
PBselect语句是数据窗口的专用语法,和SQL语句有很大的区别,但也是从SQL语句转化而来的。
数据窗口对象有三个属性用来保存SQL 语句,它们是的table.select、table.SQLselect、table.select.attribute。
这些属性获得的SQL语法稍微有区别。
下面是获取一个数据窗口SQL语法的不同的语句:string ls_sqlls_sql = dw_1.GetSQLSelect()ls_sql = dw_1.Describe("datawindow.table.select")ls_sql = dw_1.describe("datawindow.table.SQLselect")ls_sql = dw_1.describe("datawindow.table.select.attribute")〓修改数据窗口的SQL语句使用上面介绍的方法获得SQL后,可以进行修改加工,然后重新应用于数据窗口对象。
使用这种方法可以创建功能比较强大的查询程序。
和提取语法一样,也有两种修改SQL的方法:使用函数Modify或者SetSQLSelect。
不管使用哪种方法,修改完SQL语句后都要重新设置事务对象。
比较常用的是后一种函数,它的语法是:dw_1.SetSQLSelect(statement)其中,dw_1是要重新设置SQL语句的数据窗口控件名称,可以是子数据窗口或者datastore。
statement是一个包含合法SQL语句的字符串。
该函数正确执行返回1,否则返回-1。
另外,对于新的SQL语句有很多需要注意的地方:(1)字段的类型和个数必须和原SQL语句相同;(2)原来的SQL语句中定义了检索变量时,就不能重新设置SQL语句。
如果原来的数据窗口可以修改数据库中的数据表,那么重新设置时,PowerBuilder把和原来主键位置相同的字段仍然作为新的主键。
如果碰到了下面的两种情况,则将使数据窗口无法更新:a)from于句中包含多个数据表名;b)数据窗口可以更新的是数据库的计算列。
使用相应的Modify函数和相应的语法也可以修改数据窗口的SQL。
例如:dw_1.modify("datawindow.table.select=~"select name,sex,from addresswhere sex='男'~"")也可以直接使用语法来修改数据窗口的SQL语句。
例如,上面的语句可以改写成:dw_1.datawindow.table.select="select name,sex,from address where sex='男'"然而这种方法无法验证SQL语句是否正确,不如使用Modify函数,但是上面这种方法的执行速度比较快,如果能够确保准确无误,这种方法还是可以考虑的。
可以看出它的语法和上面的相同。
这里的技巧是,如果在运行时需要对数据窗口的SQL语句进行修改,创建没有where子句的数据窗口比较好些。
因为where子句可以在动态修改时添加,sort 可以在运行时使用setsort函数实现。
这样,程序运行时处理数据窗口的SQL语句就比较方便。
下面介绍一个在程序运行时动态修改数据窗口的SQL语句的实例。
在该例子中,使用数据窗口控件函数ModIfy可以修改数据窗口对象中的控件的属性。
脚本如下:String ls_SQL,ls_where,ls_selectls_SQL = dw_1.Describe("DataWindow.table.select") //获取数据窗口当前的SQL语句If Pos(ls_SQL,"where") > 0 Then //如果有where子句(有可能是运行时添加的)ls_select = Left(ls_SQL,pos(ls_SQL,"where") - 1) //取where前面的内容Elsels_select = ls_SQL //如果没有where子句则直接赋值End Ifls_where = " where xm like '郭%' order by xm" //where子句。
可以设计界面让用户构造ls_SQL = ls_select + ls_where //添加where子句If dw_1.SetSQLSelect(ls_SQL) = 1 Thendw_1.Retrieve()End If在上面的例子中,where条件都是固定的。
也可以设计界面,让用户指定条件来查询数据。
该脚本可以编写成一个函数,将where子句作为参数,将是否成功设置SQL作为返回值,在用户每次指定查询条件进行检索时调用该函数。
〓其他*GetFileOpenName(title,pathname,filename{,extension{,filter}})功能:Displays the system's Open File dialog and allows the user to select a file or enter a filename.(打开选择文件对话框)--具体请见PB帮助*LibraryDirectory ( libraryname, objecttype )功能:Obtains a list of the objects in a PowerBuilder library.(获得PBL中的对象)--具体请见PB帮助*long dwcontrol.ImportString ( string string {, long startrow {, long endrow {,long startcolumn {, long endcolumn {, long dwstartcolumn } } } } } ) 功能:Inserts data into a DataWindow control or DataStore fromtab-delimited data in a string.(把字符串数据插入到数据窗口中)--具体请见PB帮助。