在PB中如何实现数据模糊查询(四)

在PB中如何实现数据模糊查询(四),第1张

;    StaticText: st_ 属性

    X = Y = Width = Height =     TabOrder = Visible = true Text = 请输入查询条件: TextColor =     BackColor = Alignment = left! FillPattern = solid!

     CommandButton: cb_exit属性

    X = Y = Width = Height =     TabOrder = Visible = true Enabled = true Text = &F 返回     Cancel = true

     CommandButton: cb_exit的 clicked 事件

    功能 直接退出

    Close(parent)

     CommandButton: cb_exec属性

    X = Y = Width = Height =     TabOrder = Visible = true Enabled = true Text = &Z 执行     Default = true

     CommandButton: cb_exec的 clicked 事件

    功能 设置组和sql语法

    注释 ( ) n_cst_sql n_cst_sqlattrib为PFC中用户对象 这里不再详述

     DataWindow: dw_column属性

    X = Y = Width = Height =     TabOrder = Visible = true Enabled = true DataObject = d_column_set     Border = true LiveScroll = true BorderStyle = stylebox     DataWindow: dw_where属性

    X = Y = Width = Height =     TabOrder = Visible = true Enabled = true DataObject = d_where     VScrollBar = true Border = true BorderStyle = stylelowered!

     DataWindow: dw_where的 editchanged 事件

    功能 设置 执行 按钮是否有效

     DataWindow: dw_where的itemchanged 事件

    功能 见代码中的注释

    string colname colvalue logvalue    long currow    ib_changed = true    cb_exec Enabled = True    currow = GetRow()    If MaxEditRow < Currow Then MaxEditRow = currow    // MaxEditRow 为当前已编辑过的最大行的行号 实例变量     colname = GetColumnName()    colvalue = GetItemString(currow colname)    Choose Case dwo name    Case dispvalue     Object value[row] = data    Case Else    End Choose    //设置当前行的operator的初始值为 =     //设置上一行的logical的初始值为 and     if colname = column then    if colvalue = or isnull(colvalue) then    SetItem(currow operator = )    if currow >= then    colvalue = GetItemString(currow colname)    logvalue = GetItemString(currow logical )    if colvalue <> and (logvalue = or isnull(logvalue)) then    SetItem(currow logical and )    end if    end if    end if    end if    //检查并设置左括号     long ll i    colvalue = GetText()    if colname = precol then    if colvalue <> and not isnull(colvalue) then    ll = len(colvalue)    colvalue =     For i = to ll    colvalue += (     Next    SetItem(currow precol colvalue)    this Settext(colvalue)    Return     end if    end if

     DataWindow: dw_where的losefocus 事件

    AcceptText()

     DataWindow: dw_where的rbuttondown 事件

    功能 设置d出式菜单

    注释

    ( ) m_cpq_rbutton_paste菜单的属性和代码如下

lishixinzhi/Article/program/SQL/201311/16226

PowerScript可以使用代词来引用对象或控件,这样可以增加程序代码的通用性。PowerScript中的代词有:Parent、This和Super。

(1) Parent

Parent引用当前对象的父对象或包含当前对象的对象,它可用于窗口中的控件、用户对象的控件和菜单等。

(2) This

This用于引用当前对象自身的属性或事件等。它可用于窗口、用户对象、菜单、应用对象和各种控件等。

(3)Supper

子对象或控件中的程序可以调用祖先对象或控件中的程序,可以直接使用祖先的名称调用,也可使用代词Supper来调用。这里所说的子对象与祖先对象是有继承关系的两个对象。

调用祖先对象函数的格式为:

Supper::函数名(参数)

调用祖先对象事件的格式为:

Call Supper::事件名

或:Supper::event(事件名)

(4) ParentWindow

用于菜单的时间和函数中,用于引用菜单所在的窗口的事件和属性。

实现原理

PowerBuilder中有一种以PSR为后缀的特殊的保存报表的文件格式(本文简称PSR文件) 数据窗口可以直接读取PSR文件生成报表 而程序通过生成PSR文件 就可以实现动态报表格式的保存

首先 通过设置数据窗口对象(dataobject)中的文本 列等的Resizeable和moveable属性为 来实现对象位置的拖动控制 通过数据窗口的Modify函数实现对象值的更改(包括增加和删除)

其次要保存报表格式 在一个应用中 数据窗口对象的名称总是惟一的 将每一个数据窗口对象转化成PSR文件存于数据库表中 在窗口打开时 程序先校验报表格式是否存在 如果存在 将报表格式读出来放在一个临时文件当中 然后设置数据窗口(datawindow)的数据对象(dataobject)为这个报表文件 并提取数据 如果不存在 直接提取数据即可

实现过程

建立一个数据库表用以保存报表格式文件

建立一个窗口w_temp 定义实例变量如下

string is_dwtype is_dwobject

//保存报表中对象的类型及名称

在窗口的Open事件中加入如下代码 校验报表格式是否存在 如果存在 读取定义好的报表格式到数据窗口

blob emp_pic

long ll_handle

string ls_dwobject ls_reportfile ls_path

ls_dwobject = dw_print dataobject

//判断是否存在该数据窗口的报表格式

select count() into:ll_count from dyn_report where dwobject =:ls_dwobject;

if ll_count> then

//读取报表格式文件到大文本变量

selectblob memo into:emp_pic from dyn_report where dwobject =:ls_dwobject;

//创建PSR临时文件并保存到硬盘

ls_reportfile = \temp psr

ll_handle = FileOpen(is_reportfile StreamMode! write! LockWrite! Replace!)

FileWrite(ll_handle emp_pic)

FileClose(ll_handle)

dw_print dataobject = ls_reportfile

dw_print settransobject(sqlca)

else

Dw_print settransobject(sqlca)

End if

Dw_print retrieve()

保存报表格式 这可以通过Cb_savereport按钮的clicked事件实现

string ls_filename

long ll_count

blob Emp_id_pic

ls_filename = temp psr

//保存报表格式到硬盘临时文件

dw_print saveas(ls_filename PSReport! false)

sqlca automit = true

select count() into :ll_count from dyn_report where dwobject =:is_dwobject;

if ll_count = then

insert into dyn_report(dwobject rptitle)

values( is_dwobject :ls_filename :ls_path)

end if

//从硬盘临时文件读取数据保存到数据库表中

emp_id_pic = of_readbmpfile(ls_filename)

//该函数将二进制文件内容读到大文本对象中

UPDATEBLOB dyn_report SET memo = :Emp_id_pic where dwobject = :is_dwobject;

//更新数据库

sqlca automit = false

动态报表的实现 通过数据窗口dw_print的clicked事件捕获数据窗口中的对象 并将对象名存放在实例变量is_dwobject中 为下一步修改报表做准备

string ls_type ls_dwoname

//得到对象类型和名称

ls_type = trim(upper(dwo type))

ls_dwoname = trim(dwo name)

is_dwtype = ls_type

choose case ls_type

case TEXT CommandButton GROUPBOX

is_dwobject = ls_dwoname

//设置为可以拖动和改变大小

this modify(ls_dwoname+ Resizeable= + )

this modify(ls_dwoname+ moveable= + )

case LINE

//直线对象不能通过设置Resizeable和moveable属性进行调整 必须通过其他途径

is_dwobject = ls_dwoname

case RECTANGLE ELLIPSE GRAPH BITMAP

is_dwobject = ls_dwoname

this modify(ls_dwoname+ Resizeable= + )

this modify(ls_dwoname+ moveable= + )

case COLUMN PUTE

is_dwobject = ls_dwoname

this modify(ls_dwoname+ Resizeable= + )

this modify(ls_dwoname+ moveable= + )

end choose

最后再通过modify()函数就可以实现基本的动态报表 *** 作 这一类的文章较多 PB中也有大量的例子可直接使用 在此不再赘述

在cb_exit按钮的clicked()事件中加入 close(parent)

在应用的open事件中加入 open(w_temp) 然后保存并运行 全部工作到此结束!

本程序在PB Oracle 下调试通过

       编辑推荐

       ASP NET开发培训视频教程

lishixinzhi/Article/program/PB/201311/24637

使用窗口名加界定符再加变量的形式。

根据pb的使用说明,在打开和关闭窗口时进行数据传递OpenWithParm(windowvar,parmeter{,parent})其中windowvar是要打开的窗口名称,可以是window画板中定义的窗口,使用窗口名加界定符再加变量的形式可以调节。

pb是PowerBuilder缩写,窗口控件是构造PowerBuilder应用程序界面的基本部件,应用程序和用户之间的交互活动都需要通过具体的窗口控件来完成。

以上就是关于在PB中如何实现数据模糊查询(四)全部的内容,包括:在PB中如何实现数据模糊查询(四)、PB有哪几个代词各自的作用是什么、PB动态报表的实现等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/9802624.html

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

发表评论

登录后才能评论

评论列表(0条)

保存