本人PB菜鸟求高手,PB窗口中按钮与数据窗口的问题,急用

本人PB菜鸟求高手,PB窗口中按钮与数据窗口的问题,急用,第1张

dw_1settransobject(sqlca)
dw_1retrieve() //如果有参数要加上参数
取前三行数据是什么意思,是只检索出三行还是要得到前三行的数据
如果仅仅是检索出三行数据就要修改dw的sql 源,方法很多,如:select top 3 from
如果是要得到前三行的数据,可以用for ll_row =1 to dw_1rowcount() next 进行循环获得。

在编制管理信息应用系统中 一般都会遇到一个共同问题 那就是如何根据不同情况去控制表中的数据列 比如对于同一DATAWINDOW不同的用户有不同的 *** 作(如对于数据录入人员可以更改数据 而对于查询人员一般不能更改数据) 下面就以一个简单的工资表为例来说明利用PB如何在DATAWINDOW中控制列的修改方式

工资表基本列如下

代码 姓名 工作时间 基础工资 浮动工资 岗位工资 知识分子补贴 其它工资

code name workdata basesa movesa stationsa bt othersa

char varchar char decimal decimal decimal decimal deciaml

在PB中有两种方式可控制列属性 一是静态方式 另一种是动态方式实现 所谓静态方式就是在列的属性上通过选项实现 所谓动态方式就是利用编程实现 现分别给予介绍

一 静态方法

( )在datawindow中选中某列后点MOUSE右键 选 properities 后系统d出一标签 选中 Edit 标签 将 Display Only 选项制为有较

( )或者选中 Expression 标签 在 Protect Express 中填入 ;

( )或者选中 Expression 标签 在 Protect Express 中填入条件表达式 如工作时间不满一年的人员不能修改 则写入 if (daysafter(date(workdate) today()) <= ) ;

( )在datawindow中 将某列的Tab Order 值制为 则该列因得不到焦点而不能被修改

( )在DataWindow Painter 状态下选取Rows菜单 再选取Update Properties d出Specify Update Properties对话框 将Allow Updates 设为空

二 动态修改方法

( )将整个Datawindow设置为保护方式 利用DataWindow Object的ReadOnly 属性可以将整个Datawindow 设置为保护方式

语法为 dw_ Object DataWindow ReadOnly=value 或 dw_ Modify( DataWindow ReadOnly{=value} )

其中 value表示Datawindow是否为只读(read only)状态 它有两个取值 Yes 和No Yes表示使Datawindow为read only;No 则相反 默认值是No

例如 如果要使Datawindow设置为保护方式 可以在相应事件的脚本中包含下列代码

dw_ Modify( DataWindow ReadOnly=Yes ) 或者为

dw_ Object DataWindow ReadOnly=Yes

( )只保护Datawindow的某些列

方法一 利用列的Protect属性

语法为 dw_ Object name Protect=integer 或 dw_ Modify( columnname Protect{=integer} )

参数说明 cloumnname:为要保护的列名 integer:为该列的保护状态 值为 或False时该列不受保护 值为 或True时该列受到保护 例如 要将列name设置为保护状态 则相应的代码为 dw_ Object name Protect= 或者为 dw_ Moidfy( name Protect= )

方法二 利用列的TabSequence属性 在程序执行时可以根据需要将该列的TabOrder置为 从而达到保护的目的

语法为 dw_ Object name TabSequence= number或dw_ Modify( columnname TabSequence{=number} )

参数说明 columnname:要保护的列名 number:该列的TabOrder值( )

例如 要将列name设置为保护状态 相应的代码为

dw_ Object name TabSequence=

或者 dw_ Modify( name Tabsequence= )

lishixinzhi/Article/program/PB/201311/24605

如何在PB中制作特殊形状数据窗口或按钮 作者:LZP_ LR P 责任编辑:LZP_LRP 以下是全部源码,感兴趣的朋友可以整个窗口的源代码导入到PBL里自己运行一下试试。 $PBExportHeader$w_buttonsrw forward global type w_button from window end type

在每个单选按钮中写代码if thischecked=true thenopen(w1)end if如果在命令按钮执行则需要判断是哪个被选中了,可以用dragobject配合tag属性循环判断,也可以用if判断,如上所述

//有很多实现方法,其中一种
long ll_find
sle_2text = ''
ll_find = dw_1find("姓名 = '"+ trim(sle_1text)+"'" ,1,dw_1rowcount())
if ll_find > dw_1rowcount() then
messagebox('提示','没有符合条件的数据')
return
else
sle_2text = string(dw_1object成绩总分[ll_find]06 + dw_1object素质总分[ll_find]02 + dw_1object体能总分[ll_find]02)
end if
-----rowcount错了 -->rowcount()低级错误
-----呵呵~感谢二楼的意见,确实写错了~只算了第一行
-----谁有空帮楼主远程调试下吧,我白天不能上外网
---- 楼主定义两个实例变量看看吧

可以的。
找个反编译工具来,然后反编译,虽然不能完全回复到源代码,但是基本上来说你也能减少很多工作。
而且,看你说的只有exe的代码也是一个小小程序,很简单。
你百度下“PB反编译”,就会有很多结果!

本文介绍一种在Power Builder(以下简称为PB)中利用OLE把数据库中的数据传送到Word文档的方法 通过这种方法 用户可以根据需求而改变内容 以Word方式打印结果文档 例如 在处理学生成绩时 如果要将每个学生的成绩报告生成Word文档 不同的学生只改变姓名 学号和年度等数据 其他的格式不改变 只要从学生成绩数据库中调出特定数据 插入或替换到已经制作好的Word模版中 即可解决问题

一 创建Word模版文档

Word模板文档的创建根据用户的要求进行 在固定的内容输入完成后 将需要变换内容(例如姓名 年度 系别和证书编号等)的位置输入 student_name student_year department 以及 student_id 等编码 注意: 尽量使用英文来表示这些变量 目的是避免某些汉字相同而造成的误替换

在需要动态改变内容的位置 不需要输入文字 可以通过插入书签的方法实现 具体 *** 作如下 首先 选择在Word中 选择 插入 书签 d出 书签 对话框(如图 所示) 在 书签名 文本框中输入书签名称后 点击 添加 按钮 即在当前光标位置上增加了一个书签 假设我们增加了 个书签 分别是 name year department以及id 分别代表姓名 年度 系别以及证书编号

二 PB实现方法

在窗体中新建一OLE控件 在d出的 insert object 属性窗口的 create new tab 选项卡中选择 Microsoft Word 文档 选项 点击 OK 按钮后将该控件放在窗体中适当位置 PB系统会自动出现Microsoft Word应用程序 将控件命名为 OLE_Word 并创建 打开文件 替换数据 和 存盘 按钮 编写如下代码

.打开文件 string docname named integer value value = getfileopenname( Select File docname named DOC Doc Files ( DOC) DOC ) if value = THEN // 将模版文件另存为实际 *** 作文件(程序略) if ole_Word open(docname)= then ole_Word activate(inplace!) end if end if

这里使用 GetFileOpenName 函数让用户自行选择文件 实际应用时可以进行条件的限定 注意: 需要将模版文件另存为实际 *** 作文件后再打开 不能直接 *** 作模版文件 打开文件参数有 种 其中 inplace 表示在PB程序内部窗口调用Word 部分提供Word的功能菜单; 另一种参数是 offsite 表示PB程序外启动Word应用程序 提供Word的所有功能菜单 简单的演示文档如图 所示

.插入或替换 *** 作

( )替换数据法

string ls_find_string ls_replace_string //取数据库中数据赋值变量ls_replace_string(程序略) ls_find_string = student_name ls_replace_string = 张某 ole_Word object application Selection find Execute(ls_find_string false true false false false true true ls_replace_string ) //替换student_year department student_id的程序与替换student_name相同 略 其运行结果如图 所示

( )插入数据法

除了使用查找替换方式 您还可以使用书签方式来实现上述 *** 作 string ls_name ls_year department ls_id//取数据库中数据赋值变量ls_name ls_year department ls_id(程序略) IF ole_Word object application ActiveDocument Bookmarks Exists( name ) THEN ole_Word object application activedocument bookmarks item( name ) select//定位书签name ole_Word object application selection typetext(ls_name)//插入值 for i = to //消除非法字符 ole_Word object application Selection TypeBackspace() next ELSE//错误提示 END IF //定位书签year department id一样 略 注意事项 :

.一定要判断书签是否存在 如果书签不存在 进行以上 *** 作将导致系统错误 .因为汉字双字节问题 PB 中每插入一个汉字后会在后面产生一非法字符 需要判断汉字个数来决定调用 TypeBackspace() 的次数 上面涉及的 次循环次数是举例说明 实际编程要使用变量替代 上面的 种方法各有利弊 插入数据方式设计思想简单 *** 作容易 控制也比较方便 但不适合多处插入同一内容 并且需要删除产生的非法字符; 而替换方式只调用一个函数 可以搜索整个文档替换同一内容 并不产生非法字符 但有可能替换掉不该替换的内容 但是涉及的参数太多 不易记住

.存盘

ole_Word save() ole_Word clear()

lishixinzhi/Article/program/SQL/201311/16393


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13396378.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-28
下一篇 2023-07-28

发表评论

登录后才能评论

评论列表(0条)

保存