Pb动态排序Word下载.docx

上传人:b****3 文档编号:17396278 上传时间:2022-12-01 格式:DOCX 页数:15 大小:23.60KB
下载 相关 举报
Pb动态排序Word下载.docx_第1页
第1页 / 共15页
Pb动态排序Word下载.docx_第2页
第2页 / 共15页
Pb动态排序Word下载.docx_第3页
第3页 / 共15页
Pb动态排序Word下载.docx_第4页
第4页 / 共15页
Pb动态排序Word下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

Pb动态排序Word下载.docx

《Pb动态排序Word下载.docx》由会员分享,可在线阅读,更多相关《Pb动态排序Word下载.docx(15页珍藏版)》请在冰豆网上搜索。

Pb动态排序Word下载.docx

+ls_column+"

"

+ls_order

ifdw_1.setsqlselect(ls_newsql)=-1then

messagebox("

警告"

"

数据设置失败"

stopsign!

dw_1.settransobject(sqlca)

dw_1.reset()

dw_1.retrieve()

dw_1.setsqlselect(ls_oldsql)

方法2:

用describe()和modify()

stringls_mod,ls_order,ls_old,ls_column

ls_old=dw_1.describe('

datawindow.table.select'

dw_1.settransobject(sqlca)

ls_column="

endchoose

ls_mod="

datawindow.table.select='

+ls_old+'

ORDERBY"

'

+ls_column+'

'

+ls_order+"

dw_1.modify(ls_mod)

dw_1.retrieve()

dw_1.modify("

datawindow.table.select='

+ls_old+"

方法3:

用setsort()和sort()

stringls_sort,ls_order,ls_column

#1"

#2"

#3"

#4"

#5"

A"

D"

ls_sort=ls_column+'

dw_1.setsort(ls_sort)

dw_1.sort()

如何检测数据窗口中数据是否被修改

integerli_ret

ifdw_wh.deletedcount()+dw_wh.modifiedcount()>

0then

li_ret=messagebox("

注意"

数据已经被修改,是否存盘?

"

Question!

YesNoCancel!

choosecaseli_ret

case1

ifdw_wh.update()=1then

commit;

return0

else

rollback;

messagebox("

出错"

存盘时出错!

请检查数据的正确性。

return1

endif

case2

case3

endchoose

endif

在PB下实现圆形的窗口

首先在窗口定义下列局部外部函数(LocalExternalFunctions...)

FUNCTIONulongCreateEllipticRgn(ulongX1,ulongY1,ulongX2,ulongY2)LIBRARY"

gdi32.dll"

FUNCTIONulongSetWindowRgn(ulonghWnd,ulonghRgn,booleanbRedraw)LIBRARY"

user32.dll"

在窗口的open事件中加上:

longhrgn

longlres

hrgn=createellipticrgn(20,20,400,400)//其中参数为左上到右下的坐标值,可修改。

lres=setwindowRgn(handle(this),hrgn,true)

//记得在窗口中放置一个按钮关闭窗口

//在窗口处放置一幅图片即可实现圆形的窗口了。

查阅API函数手册中有如下函数定义,应该是用来定义多边形窗口的,但不知如何使用。

FUNCTIONulongCreateEllipticRgnIndirect(refRectlpRect)LIBRARY"

动态实现下拉数据窗口DDDW的设定

假设所设定列为部门号"

department_id"

,相关连的子数据窗口为"

d_dddw_dep"

,显示列为部门名称"

dept_name"

,数据列为部门号"

dept_id"

,实现方法如下:

dw_1.Modify("

department_id.DDDW.Name=d_dddw_dep"

department_id.DDDW.DisplayColumn='

dept_name'

department_id.DDDW.DataColumn='

dept_id'

或:

dw_1.object.department_id.dddw.name="

dw_1.object.department_id.DDDW.DisplayColumn="

dw_1.object.department_id.DDDW.DataColumn="

注:

PowerBuilder有一个小工具DWSyntax(程序名为:

dwsyn60.exe),提供了获得及修改数据窗口、列等的各项属性值的语法,对编程非常有帮助.

PB中表的修改对数据窗口和报表的影响的解决办法

数据窗口(DataWindow)是PB最强大的功能之一,Datawindow是PB中获取专利技术的控件,它对数据的处理方法相当简洁,能处理各种显示格式和快速的报表制作能力。

深受PB开发者的喜爱。

但一件产品不可能十全十美,DataWindow也有不少缺点,其中对datawindow的所关联的数据表的一些变动,可能就会使辛辛苦苦做出的数据录入、维护界面、报表得重新做,特别是复杂中国式的报表,是令许多开发人员头痛的事情,而在其它开发语言如Delphi就不会存在此类问题。

现在采用原型模型的开发的不少,使得开发中表的修改变得比较平常,为了解决已做的报表、数据界面主体不必重做,下面提出一些解决的方法,希望能对碰到此类问题的开发人员有所帮助,同时也希望能起到抛砖引玉的作用。

1、问题一:

表的字段增减。

此问题比较容易解决。

表的字段增加,打开DataWindow窗口,点击DataSource图标,将新字段在DataWindow窗口的SelectionList选中,然后新的字段就会在添加到原datawindow窗口中,问题也就解决了。

不过值得提醒的是若在输入数据DataWindow中添加字段,记得在数据窗口的UpdateProperties属性中,将新字段在UpdateableColumns列表中选中,否则新字段值不能提交;

表的字段删除,打开DataWindow窗口,点击DataSource图标,先执行表的弹出菜单SeselectAll,再执行SelectAll即可。

2、问题二:

表中字段的数据长度的修改

打开DataWindow窗口,点击DataSource图标,先执行表的弹出菜单SeselectAll,再执行SelectAll即可在数据窗口的ColumnSpecification中看到修改长度的字段已为新的长度。

不过别急,对于字符类型的字段,问题还未完全解决,选中已修改长度的字符类型字段,按鼠标右键,选择Properties,再选择Edit属性中Limit的值为新的长度值,问题才解决。

3、问题三:

表中字段的数据类型的修改

打开DataWindow窗口,点击DataSource图标,先执行表的弹出菜单SeselectAll,再执行SelectAll即可。

4、问题四:

表的名称改变字段不变

4.1点击Library库画板,选中要修改的数据窗口或报表。

4.2按鼠标右键,选择弹出菜单项Export,或选择Entry菜单的Export项将数据窗口或报表到出后缀为.srd的文件,文件名默认为数据窗口或报表的名字。

4.3在Powerbar工具条中选择Edit图标,打开刚存的文件。

4.4在FileEditor中使用Replace替换按钮,将被修改文件中的含有老的表名字符串全部替换成新的表名,然后保存。

4.5选择Entry菜单的Import项,将刚修改过的文件导入,覆盖原来的数据窗口或报表,问题解决。

对于问题4,若原数据窗口有检索参数(RetrievalArguments)和Where子句,应先将它们删除,能后再进行操作,否则转换会失败,使用数据窗口的Previwe会报“selecterror无效列名”。

转换成功后再手工增加检索参数和Where子句。

对于一些稍微复杂的表的变动,可通过上述的方法组合解决。

如改变了表名又增加了字段并修改了原有字段长度的数据表,则解决步骤可为:

先建与原表一样只是表名不同的过度表,然后采用方法4;

在过度表增加了字段,然后采用方法1;

修改过度表中的某些字段长度形成新表,最后采用方法2,问题解决。

本人在用PB开发MIS系统中使用以上方法,能比较快的复用开发原型中的报表和数据维护窗口,不过值得提醒大家的是,使用以上方法最好应先将原数据窗口进行备份,以防止误操作破坏了报表和数据维护窗口。

PB中动态DataWindow的技术应用

在PowerBuilder的应用程序开发过程中,对数据库中数据进行操作的对象是数据窗口对象(DataWindow),利用数据窗口对象,我们可以十分方便地完成对数据库中已经存在的表中数据进行检索、查询、插入、删除和更新。

但是,在实际问题中,我们常常遇到数据库中的一些表是用户在程序运行期间动态生成的,若要对这样表中的数据进行操作,就要运用动态数据窗口对象,值得提到的一点是,在动态数据窗口对象生成时,其标题区(HeaderBand)中的文本不能直接显示成汉字,这的确是一点遗憾,不过这个问题可以通过映射的方法得到解决。

一、问题的提出

设有如下两张表:

A表中的记录是用户可以在程序运行期间进行自由增加、修改、删除和更新的,B表中的属性(即:

字段)由A表中的记录决定并动态创建,而且,能够方便地对B表中的数据提供汉化的操作界面。

当然,将B表创建为下表也是可以的,但是,在动态生成数据窗口对象时,其标题区(HeaderBand)中的文本不会显示成汉字,而是一些乱码,反而不利于问题的解决。

二、问题的解决

1、动态创建B表的解决

我们要动态创建B表,就要构建动态SQL语句。

何谓动态SQL语句?

数据库应用程序通常进行确定的工作,因此在编写和编译时,就可以确定完整的SQL语句,但当需要使用PowerBuilder不支持的嵌入SQL语句(如DDL语句),或者在编译时不知道语句的具体格式或参数,则在运行时构成SQL语句,这类语句被称为动态SQL语句。

动态SQL语句的格式:

EXECUTEIMMEDIATESQLstatement[UsingTransationObject];

参数说明:

SQLstatement包含一条有SQL语句的字符串

TransationObject事务对象

2、动态数据窗口对象创建及标题区(HeaderBand)中文本汉化的解决

(1)在程序运行时,我们可以调用Create函数动态生成数据窗口对象。

格式如下:

DataWindowControl.Create(Syntax{,Errorbuffer})

DataWindowControl将在其中创建数据窗口对象的数据窗口控件名

Syntax数据窗口对象源代码

Errorbuffer用于保存错误信息的字符串

(2)由于标题区(HeaderBand)中文本框的名称是对应细目区(DetailBand)中相应列的名称加上"

_t"

构成的,而细目区(DetailBand)中列的名称又是相应表的属性的名称。

因此,我们能够使用游标(Cursor)取出A表中的ywm和zwm的值,然后使用映射的方式替换标题区(HeaderBand)中文本框的文本(Text)属性,从而使标题区(HeaderBand)中文本框的文本显示为相应的汉字。

三、一个简单的例子

在PowerBuilder6.5和MSSQLServer6.5的环境下,使用一个简单的例子实现上述的观点,限于篇幅,只列出主要界面及关键程序。

1、"

动态创建B表"

按钮对应的代码是:

intli_i=1,li_count

stringywm[],zdlx[],ls_temp,ls_sql

//使用游标(Cursor)从数据库的表中获取ywm和zdlx的值并存储于数组ywm[]和zdlx[]中

selectcount(*)into:

li_countfroma;

DECLAREa_curCURSORFORSELECTywm,zdlxFROMaorderbyywm;

OPENa_cur;

FETCHa_curINTO:

ywm[li_i],:

zdlx[li_i];

dowhilesqlca.sqlcode=0

ls_temp=trim(zdlx[li_i])

choosecasels_temp

case"

1"

ls_temp="

char(10)"

2"

numeric(7,2)"

zdlx[li_i]=ls_temp

ywm[li_i]=trim(ywm[li_i])

li_i++

FETCHa_curINTO:

loop

closea_cur;

//创建B表和主键(PrimaryKey)

ls_sql="

createtableb"

+"

("

+ywm[1]+"

+zdlx[1]+"

notnull,"

constraintpk_bprimarykey("

+ywm[1]+"

))"

executeimmediate:

ls_sql;

//增加B表的列

forli_i=2toli_count

ls_sql="

altertablebadd"

+ywm[li_i]+"

+zdlx[li_i]

executeimmediate:

endfor

2、"

动态创建数据窗口对象"

stringsyntax,sqlselect,errmsg,ls_col1,ls_col2,ls_name,ls_b;

//动态创建数据窗口对象DataWindow

ls_b="

b"

sqlselect="

select*from"

+ls_b;

syntax=sqlca.syntaxfromsql(sqlselect,"

style(type=grid)"

errmsg);

dw_1.create(syntax)

//汉化标题区(HeaderBand)文本

DECLAREv_curCURSORFORSELECTywm,zwmFROMaorderbyywm;

OPENv_cur;

FETCHv_curINTO:

ls_col1,:

ls_col2;

dowhilesqlca.sqlcode=0

ls_name=ls_col1+'

_'

+'

t'

.'

text'

='

+ls_col2+'

dw_1.modify(ls_name)

FETCHv_curINTO:

closev_cur;

dw_1.settransobject(sqlca);

PowerBuilder制作IE风格的图标按钮

本文介绍在PowerBuilder中实现IE风格的图标按钮的技巧。

在C++Builder开发工具中,有一种图标按钮(SpeedButton),这种按钮可以在鼠标移入按钮后,在图片的周围会出现凸出的边框,鼠标移出按钮后边框消失。

而在PowerBuilder中没有提供这种功能的按钮,为了使开发的应用程序界面更丰富,我们使用自定义图形控件(Picture)扩展并实现了此功能,这种方法设计出的程序简洁实用。

一、实现功能

按钮可以显示四种状态图形:

1、Normal状态;

2、Disabled状态;

3、MouseOver状态(鼠标进入按钮区);

4、ClickDown状态(鼠标按下)。

二、关键方法

1、当鼠标进入按钮区域时,控件图片改换成MouseOver状态的图片,并设置状态信号;

2、鼠标滑入按钮区域后用WindowsAPI函数SetCapture来捕获鼠标输入消息,跟踪鼠标位置;

3、当监测到鼠标滑出按钮区域时,用ReleaseCapture函数释放鼠标捕获,恢复按钮图片到Normal状态并设置状态信号;

4、改变控件的图片(PictureName)前,先用ReleaseCapture释放鼠标捕获,然后改变PictureName属性值,接着重新调用SetCapture函数,因为改变图片后PowerBuilder重新建立了控件窗口,窗口的句柄(hWnd)也随之改变了。

三、设计过程

1、新建“UserObject”-〉选择Visual的Standard类-〉选择“Picture”;

2、定义全局的或局部的外部函数:

//*******************************

//DeclareExternalFunctions

functionulongSetCapture(ulonghwnd)library"

functionbooleanReleaseCapture(ulonghwnd)library"

functionbooleanDrawEdge(ulonghdc,refrectqrc,uintedge,uintgrfFlags)library"

3、定义结构数据类型

RECT

{

longleft

longtop

longright

longbottom

}

4、定义控件共享变量:

//DeclareSharedVariables

booleansb_SuppressHoverBorder

5、定义控件实例变量:

//DeclareInstanceVariables

Private:

booleanib_MouseCaptured

Public:

stringis_PicNormal

stringis_PicDisabled

stringis_PicMouseOver

stringis_PicClickDown

intin_State

6、定义用户事件:

//DeclareUserEvents

EventName="

mousemove"

ID="

pbm_mousemove"

lbuttondown"

pbm_lbuttondown"

lbuttonup"

pbm_lbuttonup"

7、编写事件代码:

//“Constructor”事件代码

//***beginconstructorevent***

//

is_PicNormal=this.PictureName

is_PicDisabled="

Disabled状态图片.bmp"

is_PicMouseOver="

MouseOver状态图片.bmp"

is_PicClickDown="

ClickDown状态图片.bmp"

in_State=0

sb_SuppressHoverBorder=FAL

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 中考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1