Power Builder编程技巧十例

Power Builder编程技巧十例
Power Builder编程技巧十例

广告招租收藏本页

联系我们

论坛帮助

xxlcbz 重登隐身信息搜索风格状态设施服务退出

>> 探讨PB高级应用技巧,本板块内容为PowerBuilder开发综合版块。我的收件箱 (0) https://www.360docs.net/doc/ad2228260.html, → PB软件开发→高级开发技巧→ Power Builder编程技巧十例

您是本帖的第 935 个阅读者

* 贴子主题:Power Builder编程技巧十例

琳子

头衔:昕晨空间

等级:管理员

威望:2

门派:灵漪涧

文章:1131

精华:57

积分:2615

魅力:2063

股票:0.53

现金:12397

存款:257094

财产:269,491.53

注册:2003-8-24

个人文集个人精华

鲜花(0) 鸡蛋(0) 楼主

Power Builder编程技巧十例

一、有关应用的编程技巧仅让应用程序运行一次的技巧:

有时需要限制一个PowerBuilder应用同时运行的实例(Instance)个数或仅让应用运行一

次,我们可以通过调用WindowsSDK函数或使用PowerBuilder的Handle()函数来实现。

先谈调用SDK函数的方法。为了调用SDK函数,需要在ApplicationPainter的菜单项Declare\GlobalExternalFunctions中定义:

FunctionuintGetModuleHandle(stringModuleName)Library"Kernel.exe" FunctionuintGetModuleUsage(uintModuleHandle)Library"Kernel.exe"

下面这段程序写在Application的Open事件中。它先通过调用SDK函数GetModuleHandle()

获得指定应用程序的句柄,然后调用GetModuleUsage()函数确定应用程序同时运行的实例

个数。

uint IApplHandle

int App_num

IApplHandle=GetModuleHandle("ocmis.exe")

if IApplHandle>0 then

App_num=GetModuleUsage(IApplHandle)

if App_num>1 then

Messagebox("注意","本程序已经运行!",Stopsign!)

return

endif

endif

Open(w_main)

若需要限制应用同时运行的实例个数,比如仅允许同时运行N个实例,那么将上述程序中的语句“if App_num>1 then”改为“if App_num>N then”即可。

采用Handle()函数的方法更简洁一些,代码如下:

int hand

hand=Handle(this,TRUE)

If hand>0 then

Messagebox("注意","本程序已经运行!",Stopsign!)

Halt

else

Open(w_main)

endif

郑重声明:请尊重作者劳动成果,如需转载,转载请注明原创和本贴来自昕晨论坛。

----------------------------------------------

昕晨空间欢迎你:https://www.360docs.net/doc/ad2228260.html,

----------------------------------------------

2004-1-1 1:10:00 论坛新手登陆后,5分钟才能发贴,请先仔细浏览一下论坛琳子

头衔:昕晨空间

等级:管理员

威望:2

门派:灵漪涧

文章:1131

精华:57

积分:2615

魅力:2063

股票:0.53

现金:12397

存款:257094

财产:269,491.53

注册:2003-8-24

个人文集个人精华

第 2 楼

提供实时帮助条

1、提供实时帮助条

中文之星2.0版的链形菜单管理器提供了实时帮助条,增强了系统的易用性,在PowerBuilder中也可以实现类似的功能。当鼠标移动到窗口中的某些控制(Control),如编辑器、图片等时,会在鼠标附近自动产生帮助条,实时地提示操作要领。

首先在窗口w_main中任意位置定义一个黄底黑字的静态文本st_help,设定

st_help.visible=false,st_help.text=&Help;然后在该窗口模块的

Declare\WindowFunctions...下定义函数show_help(),其参数只有一个,参数名为text,类型为string,通过传值方式接收参数;无返值。show_help()代码如下:

if st_help.visible then

return

endif

st_help.text=text

st_help.width=Len(st_help.text)*38

st_help.x=w_main.PointerX()

st_help.y=w_main.PointerY()+50

if st_help.x+st_help.width>w_main.Workspacewidth() then

st_help.x=w_main.Workspacewidth()-st_help.width

endif

if st_help.y+st_help.height>w_main.Workspaceheight()

then st_help.y=w_main.Workspaceheight()-st_help.height

endif

st_help.visible=true

接下来,我们就可以调用show_help()函数了。但PowerBuilder提供的所有控制均缺乏当鼠标移至其上就触发的事件,显然,需要定义相应的用户事件。先选中准备定义用户事件的控制,如某个单行编辑器,然后在窗口模块的菜单Declare\UserEvents...下,双击PasteEventID:中的pbm_mousemove条目,将其拷贝至EventID下,取EventName为Mouseon,这样,我们就定义好了相应控制的用户事件Mouseon。我们可以在该控制的用户事件Mouseon下,写下调用函数show_help()的语句:

if st_help.visible then

Hide(st_help)

show_help("瞧!这便是实时帮助条!")

endif

郑重声明:请尊重作者劳动成果,如需转载,转载请注明原创和本贴来自昕晨论坛。

----------------------------------------------

昕晨空间欢迎你:https://www.360docs.net/doc/ad2228260.html,

----------------------------------------------

2004-1-1 1:10:00 论坛新手登陆后,5分钟才能发贴,请先仔细浏览一下论坛

琳子

头衔:昕晨空间

等级:管理员

威望:2

门派:灵漪涧

文章:1131

精华:57

积分:2615

魅力:2063

股票:0.53

现金:12397

存款:257094

财产:269,491.53

注册:2003-8-24

个人文集个人精华

第 3 楼

“跑马灯”的实现技巧

2、“跑马灯”的实现技巧

有时需要用一矩形条显示少量用户特别关心的信息,这条信息串首尾相连,向一个方向循环滚动,我们通常将其称作“跑马灯”。证券业中常用“跑马灯”来显示不断变化的股票行情;实际应用中也常通过“跑马灯”来监视是否死机。我们可以写一个简单的函数

running_horse()来实现“跑马灯”的显示。

running_horse有两个参数,

第一个参数的参数名为textline,类型为string,传值;

第二个参数的参数名为num,类型为int,传值;函数返值类型为string。

该函数的代码仅一句:

returnMid(textline,(num+1))+Left(textline,num)

下面就可以调用running_horse()函数了。先在一个窗口里定义好单行编辑器

sle_running_horse,在该窗口的Open事件下写上:

sle_running_horse.text="Iamtestingrunning_horse!"

Timer(0.2)

然后在该窗口的Timer事件下调running_horse(),代码如下:

sle_running_horse.text=running_horse(sle_running_horse.text,1) 这样,当你打开这个窗口时,“跑马灯”便会运转起来。可以在程序中加些语句,适时地增减

sle_running_horse.text中的内容,你便会在“跑马灯”中看到相应变化的信息。

郑重声明:请尊重作者劳动成果,如需转载,转载请注明原创和本贴来自昕晨论坛。

----------------------------------------------

昕晨空间欢迎你:https://www.360docs.net/doc/ad2228260.html,

----------------------------------------------

2004-1-1 1:11:00 网友可以每隔10分钟去社区财务领取一次工资

琳子

头衔:昕晨空间

等级:管理员

威望:2

门派:灵漪涧

文章:1131

精华:57

积分:2615

魅力:2063

股票:0.53

现金:12397

存款:257094

财产:269,491.53

注册:2003-8-24

个人文集个人精华

第 4 楼

通用右键菜单技术

对象被右键单击就弹出一个功能菜单是Windows应用程序一项不可缺少的功能

。在PowerBuilder应用开发中,可在需弹出右键菜单对象的rbuttondown事件中调

用该菜单的Popmenu( )方法实现这一功能。但多数情况下,应用中有多处要用到

不同的弹出式菜单,如一一用这种方法就需要做大量的工作。能不能做一个通用

的菜单,可以用任何对象的rbuttondown事件激发弹出,并在弹出前动态改变弹出

菜单项的内容,当点击菜单项时又可执行被右击对象的相应用户事件?由于这一

技术最大的特点是当函数创建成功后,可在任何应用的任何对象中随心所欲的使

用,随时随地弹出自己想要显示的菜单项,并执行相应的自己需要的功能脚本,

但目前各种资料上鲜有系统、成型的介绍。笔者抱着一种探索的态度,作了一番

仔细深入的研究,并小有收获,愿和大家共同探讨。

一、创建弹出菜单m_popup

创建一个菜单m_popup,定义菜单条m_main,其下有十五个菜单项,分别命名为m_ item1,m_item2,……m_item15,各项的显示文本(text)分别为item1,item2,……

item15;

为m_popup菜单定义一个Powero b j e c t类型的Instance变量:Anyo b j e c t 脚本为:

Powero b j e c t Anyo b j e c t

给m_item1,m_item2,……m_item15各菜单项的Clicked事件下分别输入脚本:

Anyo b j e c t.triggerevent("ue_item1")

//m_item1的clicked事件

Anyo b j e c t.triggerevent("ue_item2")

……

Anyo b j e c t.triggerevent("ue_item15")

---- 4、定义几个菜单函数:

---- 1) setmenuitem(string itemstring),返回值为Null。

---- 参数Itemstring是由多个子串组成的。各个子串间用“|”间隔,每个子串

为一个菜单项的显示文本(text)。

---- 该函数功能是把itemstring分解为多个子串,并把子串赋给相应菜单项的t ext。脚本如下:

int itempos,itemorder=1,i

string currentitem

if len(itemstring)=0 then return

itempos=pos(itemstring,"|")

DO WHILE itempos<>0

// itempos为间隔符"|"的位置

currentitem=left(itemstring,itempos -1)

//取出子串

itemstring=mid(itemstring, itempos+1)

this.m_main.item[itemorder].text=currentitem

itempos=pos(itemstring,"|")

itemorder++

LOOP

this.m_main.item[itemorder].text=itemstring

for i=1 to itemorder

this.m_main.item[i].visible=true

this.m_main.item[i].enabled=true

end if

for i=itemorder+1 to 15

this.m_main.item[i].visible=false

next

2)setitemdisable(integer itemorder) 返回值Null。

该函数把第itemorder菜单项置灰(disable)。

脚本如下:

if itemorder<1 or itemorder>15 then return

this.m_main.item[itemorder].enabled=false

3)popupmenu(integer x, integer y) 返回值Null。

该函数弹出菜单条m_main。

脚本如下:

this.m_main.popmenu(x,y)

二、 rbuttondown事件激发弹出菜单m_popup

---- 至此,我们就可以在窗口中任意对象如DataWindow、 Picture、 SingleLi neEdit、 ListBox、 PictureListBox、 DropDownPictureListBox、 MultiLine Edit、 ListView、 TreeView等的rbuttondown事件中写脚本调用m_popup的函数来实现右键单击弹出一个菜单。下面以数据窗口dw_1为例,在其rbuttondown事件下写入脚本,使得右击dw_1 可弹出菜单:刷新/插入/删除/修改。步骤如下:

1、事先给窗口定义一个m_popup 型instance变量om_1:

m_popup om_1

2、dw_1的rbuttondown事件脚本:

if not isvalid(om_1) then

om_1= CREATE m_popup

end if

//把菜单的anyo b j e c t指向被右击的对象(dw_1)

om_1.anyo b j e c t=this

om_1.setmenuitem("刷新|插入|删除|修改")

//可在此调用om_1.setitemdisable(itemorder)函数disable某

菜单项。

om_1.popupmenu(this.x+this.pointerx(),

this.y+this.pointery())

3、给dw_1定义用户事件ue_item1、ue_item2、ue_item3

及 ue_item4。

事件ue_item1脚本:

dw_1.retrieve()

事件ue_item2脚本:

long newrow

newrow=dw_1.insertrow(0)

dw_1.scrolltorow(newrow)

事件ue_item3脚本:

dw_1.deleterow(0)

事件ue_item4脚本:

dw_1.update()

---- 这样,只要用户单击dw_1弹出的右键菜单,就可完成对dw_1的插入、删除、

修改等功能。

三、推广为全程函数

---- 如果应用中有许多地方要用此功能,我们可以把dw_1的rbuttondown事件脚

本改造成一个全程函数。

---- 1、将变量om_1定义为global变量:

---- m_popup om_1

---- 2、定义一个全程函数

---- pupmenu(powero b j e c t sender,string itemstring,integer x,integer y) 返回值Null。其中参数sender为被右击的对象,itemstring为弹出菜单的菜单项

字符串,x、y为菜单弹出的坐标位置。

脚本如下:

if not isvalid(om_1) then

om_1= CREATE m_popup

end if

om_1.anyo b j e c t=sender

om_1.setmenuitem(itemstring)

sender.triggerevent("ue_beforepop")

//激活sender用户事件。

om_1.popupmenu(x,y)

这样,上述dw_1的rbuttondown事件脚本就可改写为:

string items="刷新|插入|删除|修改"

popmenu(this, items ,this.x+this.pointerx(),

this.y+this.pointery())

注意:在MDI 应用中,popmenu()函数需要改为:

popmenu(this, items ,w_frame.pointerx(),w_frame.pointery())

其中w_frame为MDI主窗口名。

---- 在函数popmenu中,又激活了被右击对象的ue_beforepop用户事件。如有必要

,你可以给被右击对象定义一个ue_beforepop事件,在该事件中可调用om_1.set itemdisable()函数来屏蔽某个菜单项。

---- 最后,别忘了在应用的close事件里加上下列语句,及时释放系统内存。

---- if isvalid(om_1) then destroy om_1

---- 以上代码在Windows98 和Powerbuilder6.5平台上开发,并在多个大型系统

中应用,效果很好。

郑重声明:请尊重作者劳动成果,如需转载,转载请注明原创和本贴来自昕晨论坛。

----------------------------------------------

昕晨空间欢迎你:https://www.360docs.net/doc/ad2228260.html,

----------------------------------------------

2004-1-1 1:12:00 论坛新手登陆后,5分钟才能发贴,请先仔细浏览一下论坛

琳子

头衔:昕晨空间

等级:管理员

威望:2

门派:灵漪涧

文章:1131

精华:57

积分:2615

魅力:2063

股票:0.53

现金:12397

存款:257094

财产:269,491.53

注册:2003-8-24

个人文集个人精华

第 5 楼

自动调整大小的数据窗

在PowerBuilder应用运行过程中,常常会用鼠标拖动窗口角以改变窗口大小,尤其是在多文档窗口(MDI)中,通常有多个sheet存在的情况下,有时为了察看后面窗口中的数据而将前面窗口缩小,但窗口缩小了,其中的数据窗并没有缩小,由此而不能方便地使用数据窗的卷滚条,那么怎样使前面窗口中的数据窗大小随窗口的大小自动调整呢?

很简单,我们只需要在数据窗所在窗口的Resize事件下写上一句话:

Resize(dw_datamon,this.Workspacewidth()-50,this.Workspaceheight()-50) 其中dw_datamon是数据窗的名字,数字50可以调整。这样,你就拥有了一个会随窗口大小变化而自动调整大小的数据窗了。卷滚条用起来很方便,不信试试。

郑重声明:请尊重作者劳动成果,如需转载,转载请注明原创和本贴来自昕晨论坛。

----------------------------------------------

昕晨空间欢迎你:https://www.360docs.net/doc/ad2228260.html,

----------------------------------------------

2004-1-1 1:13:00 网友可以每隔10分钟去社区财务领取一次工资

琳子

头衔:昕晨空间

等级:管理员

威望:2

门派:灵漪涧

文章:1131

精华:57

积分:2615

魅力:2063

股票:0.53

现金:12397

存款:257094

财产:269,491.53

注册:2003-8-24

个人文集个人精华

第 6 楼

Retrieve后不回卷的数据窗

我们经常面对一大堆数据,其具体体现就是数据窗很长,需要拉动垂直卷滚条才能看到后面的数据,当你在包含长数据窗的窗口的Timer事件中写下Retrieve()语句后,令人气恼的事情就会发生:Timer事件一执行,数据窗就翻回第一页;如果Timer事件执行的时间间歇很短,那我们就永远没有足够的时间来察看后面的数据了。下面我们着手解决这个问题。可能你已经注意到了,每个数据窗都拥有两个与Retrieve有关的事件:

Retrievestart和Retrieveend,它们分别允许我们在Retrieve的前后干一些事,这正是我们所需要的。实际上,就这两个事件,我们已经能够提出两个解决方案了。

其一,在Retrievestart事件中,保存当前数据窗中可见的数据行;然后Retrieve;接着在Retrieveend事件中,恢复先前保存的数据行。

其二,在Retrievestart事件中,保存当前垂直卷滚块的位置;Retrieve后再恢复其位置。后者使用了动态数据窗函数,实现起来更简洁一些,下面详细探讨。假设你已设计好了一个在窗口w_datamon中的数据窗dw_datamon,现在可以先定义一个保存垂直卷滚块位置的类型为string的Globle变量old_vspos,然后在该数据窗的Retrievestart事件下输入以下语句以保存其位置:

old_vspos=this.dwDescribe("DataWindow.VerticalScrollPosition")

dw_datamon.SetRedraw(false)

在相应的Retrieveend事件下输入恢复垂直卷滚块位置的语句:

this.dwModify("DataWindow.VerticalScrollPosition="+old_vspos)

dw_datamon.SetRedraw(true)

这样,数据窗上的工作已做完。下面是相应窗口上的工作。该窗口的Open事件下:

dw_datamon.Settrans(sqlca)

dw_datamon.Retrieve()

timer(6)

该窗口的Timer事件下:

Setfocus(w_datamon)

Retrieve(dw_datamon)

至此,Retrieve后不会回卷的数据窗dw_datamon已经可以工作了。值得注意的是,数据窗的排序分类等操作应在Retrieve前就在数据库表中完成,否则Retrievestart事件保存的卷滚块位置很可能并不是你所期待的,换句话说,Retrievestart事件应发生在所有数据窗操作之后;另外,在每次Retrieve后,应将处于该数据窗上的Focus移开,以免具有焦点的数据窗的第一行第一列总要显示,故在窗口w_datamon的Timer事件中设置了Setfocus(w_datamon)这条语句。

郑重声明:请尊重作者劳动成果,如需转载,转载请注明原创和本贴来自昕晨论坛。

----------------------------------------------

昕晨空间欢迎你:https://www.360docs.net/doc/ad2228260.html,

----------------------------------------------

2004-1-1 1:13:00 论坛顶部菜单有强大的功能,请访问顶部菜单“社区设施”和“社区服务”,论坛使用1024*768

琳子

头衔:昕晨空间

等级:管理员

威望:2

门派:灵漪涧

文章:1131

精华:57

积分:2615

魅力:2063

股票:0.53

现金:12397

存款:257094

财产:269,491.53

注册:2003-8-24

个人文集个人精华

第 7 楼

依据条件改变数据颜色

依据条件改变数据颜色是许多场合都要用到的重要功能,数据颜色的改变不仅引人注目,而且能起到暗示作用,清楚地告诉用户价位的涨跌或状态的改变等。大多数证券期货实时行情显示软件都提供了这种功能。在当前价位比其前一价位高时,当前价位数据颜色变红,表示价位上涨;反之,颜色变绿,表示价位下跌;若当前价位与其前一价位相等,则数据颜色不变。PowerBuilder没有提供解决这一问题的捷径,但我们仍可利用动态数据窗来实现。先考虑一下实现的步骤,在Retrieve前需要把有关列的数据先保存起来;Retrieve后我们获得了相应列的新数据;我们需要将上述二者作一比较,以确定颜色的变化。值得指出的是,由于动态数据窗函数dwModify()只能用描述数据窗的模式串作参数,不能接收变量作参数,故我们得想法把比较的结果传递给数据窗。为解决这个问题,可以在定义数据窗时多定义几个空列,这几列不与数据库表中的列相对应,它们作为存放比较结果的缓冲区。原则上若需要N列实时地变色,则需要N列缓冲区,就应该多定义N个空

列。下面给出了一个例子具体说明。这段程序写在某窗口的Timer事件中,该窗口内有数据窗dw_infor,其"buy"、"sell"列分别表示买价和卖价,需要实时地变颜色。为此,我们在数据窗dw_infor中多定义了"buybuf"和"sellbuf"两列,分别存放"buy"列和"sell"列Retrieve前后数据比较的结果。

//Red=255;Green=65280

int i,infor_rownum decimalbuy_old[],sell_old[],buy_new[],sell_new[]

dw_infor.SetRedraw(false)

infor_rownum=dw_infor.RowCount()

FOR i=1 To infor_rownum

buy_old[i]=dw_infor.GetitemNumber(i,"buy")

sell_old[i]=dw_infor.GetitemNumber(i,"sell")

NEXT

dw_infor.retrieve()

FOR i=1 TO infor_rownum

buy_new[i]=dw_infor.GetitemNumber(i,"buy")

sell_new[i]=dw_infor.GetitemNumber(i,"sell")

NEXT

FOR i=1 TO infor_rownum

dw_infor.Setitem(i,"buybuf",buy_new[i]-buy_old[i])

dw_infor.Setitem(i,"sellbuf",sell_new[i]-sell_old[i])

NEXT

dw_infor.dwModify("buy.color='0~tif(buybuf>0,255,if(buybuf<0,65280,0))'")

dw_infor.dwmodify("sell.color="0~tif(sellbuf>0,255,if(sellbuf<0,65280,0))'") dw_infor.setredraw(true)

我们看到,程序在Retrieve前后分别将"buy"和"sell";列的数据写进与其类型匹配的数组中,然后将比较的结果分别写入"buybuf"和"sellbuf"列,最后用函数dwModify()改变有关列的颜色。记住在该窗口的Open事件中设置事务对象并激活Timer事件。此外,还有一些方法可以改变颜色,比如先在某些需要变颜色的行或列设置带颜色的长方形,同时将其上面的数据窗中的数据设置成透明的,当条件改变时,可以通过改变数据窗后的长方形的颜色来实现。

郑重声明:请尊重作者劳动成果,如需转载,转载请注明原创和本贴来自昕晨论坛。

----------------------------------------------

昕晨空间欢迎你:https://www.360docs.net/doc/ad2228260.html,

----------------------------------------------

2004-1-1 1:13:00 网友可以每隔10分钟去社区财务领取一次工资

琳子

头衔:昕晨空间

等级:管理员

威望:2

门派:灵漪涧

文章:1131

精华:57

积分:2615

魅力:2063

股票:0.53

现金:12397

存款:257094

财产:269,491.53

注册:2003-8-24

个人文集个人精华

第 8 楼

用Enter键替代Tab键切换栏目的数据窗

许多情况下,PowerBuilder应用的数据是通过数据窗输入的,而且输入的数据是单纯的数字数据,也就是说,输入内容完全可以通过敲击键盘右面的数字小键盘来完成。但在实际使用中,数据窗栏目间的切换却要通过按键盘最左边的Tab键来实现,既不方便又影响录入速度。如果能用Enter键替代Tab键切换栏目就好了。由于按Enter键是Windows直接支持的消息,故我们可以使用用户事件来解决问题。在用户事件中,PowerBuilder提供的一条pbm_事件对应Windows的一条或几条消息。我们在数据窗dw_datamon的用户事件中选择pbm_dwnProcessEnter并命名为Enterkeydown。在该事件下写代码:

Send(Handle(this),256,9,Long(0,0))

This.SetActionCode(1)

这将把消息传递给Tab键,同时忽略Enter键的处理。下面是一段用数据窗接收数据的完整的程序段,其中采用了用Enter键替代Tab键的代码。当光标在每行最后一列时按Enter 键,光标会移至下一行第一列;当光标在最后一行的最后一列时按Enter键,会自动产生新行并将光标置于该行的第一列;在其它情况下按Enter键,光标会移至当前行的下一列。这段程序仍然写在与pbm_dwn ProcessEnter相对应的用户事件Enterkeydown下:

IF This.AcceptText()<0 then

this.setactioncode(1) return

endif

if this.getcolumn()=Long(This.DwDescribe("datawindow.column.count")) then

if this.getrow()=This.RowCount() then

this.insertrow(0)

this.scrolltorow(this.getrow()+1)

this.setcolumn(1)

this.setactioncode(1)

return

endif

endif

send(handle(this),256,9,long(0,0))

this.setactioncode(1)

郑重声明:请尊重作者劳动成果,如需转载,转载请注明原创和本贴来自昕晨论坛。

----------------------------------------------

昕晨空间欢迎你:https://www.360docs.net/doc/ad2228260.html,

----------------------------------------------

2004-1-1 1:14:00 网友可以每隔10分钟去社区财务领取一次工资

琳子

头衔:昕晨空间

等级:管理员

威望:2

门派:灵漪涧

文章:1131

精华:57

积分:2615

魅力:2063

股票:0.53

现金:12397

存款:257094

财产:269,491.53

注册:2003-8-24

个人文集个人精华

第 9 楼

数据从文本文件写入数据库表的捷径

许多情况下,文本文件中的数据排列顺序与数据库表中列的顺序一致,并且其数据类型与数据库表中对应列的一致,要做的就是将该文件中的内容存入对应数据库表中。例如在点对点通讯的情况下,一方把数据库表中的数据以文本文件格式存储并传送给另一方,另一方要做的工作就是将收到的数据存入相同的数据库表中。PowerBuilder有多种方式与文本文件打交道,比如使用ODBC的文本文件驱动器、采用DDE(动态数据交换)方式、采用OLE方式或使用Cursor将文本文件逐行逐列读取并写入数据库表等。但在这种情况下,还有一种更快捷的方法:使用ImportFile()函数将文本文件内容直接倒入数据库表中。该函数用法为: datawindowname.ImportFile(filename{,startrow{,endrow&

{,startcolumn{,endcolumn{,dwstartcolumn}}}}}) ImportFile()函数要求数据窗列的数据类型和列的排列顺序必须与文本文件中的数据相匹配。在存储文本文件时要注意接收数据库对表的格式要求,比如在SYBASE中,表格的列与列间是采用Tab键区分的,所以如果要用ImportFile()函数将文件内容写入SYBASE表中,就要将相应文本文件的列与列间加入Tab键——这在文件形成时即可加入。下面的代码将文件infor.txt写入数据窗

dw_infor,并将与dw_infor对应的数据库表更新:

int impt

if (FileLength("c:\data\infor.txt")>0) then

impt=dw_infor.ImportFile("c:\data\infor.txt")

if impt>0 then

dw_infor.settrans(sqlca)

update(dw_infor)

commit;

If sqlca.sqlcode=-1 then

messagebox("SQLERROR",sqlca.sqlerrtext)

endif

else

messagebox("注意","文件infor.txt写入失败!")

endif

endif

此外,ImportFile()函数还支持从文本文件的指定开始行列到结束行列读取并写入数据;并且支持.dbf(dBase)文件的读写,这给原有台式数据库数据文件向新的分布式数据库表中转换带来了极大的方便。

郑重声明:请尊重作者劳动成果,如需转载,转载请注明原创和本贴来自昕晨论坛。

----------------------------------------------

昕晨空间欢迎你:https://www.360docs.net/doc/ad2228260.html,

----------------------------------------------

2004-1-1 1:14:00 请仔细阅读论坛发言规范,新手问题在论坛大部分都可以搜索到答案琳子

头衔:昕晨空间

等级:管理员

威望:2

门派:灵漪涧

文章:1131

精华:57

积分:2615

魅力:2063

股票:0.53

现金:12397

存款:257094

财产:269,491.53

注册:2003-8-24

个人文集个人精华

第 10 楼

打印前的模拟显示的编程技巧

在制作完一段文档或表格后,我们在正式打印输出前总希望看一下模拟显示的效果,看看是否需要调整打印参数等。笔者在调试一个标签打印程序时就遇到了这个问题,标签文档的输出格式正确与否、标签间的横竖间距恰当与否等均可通过模拟显示直观地看到。总之,我们需要打印前的模拟显示。单纯写一段模拟显示程序并不难,但多思考一下往往能找到好方法。在文件读写时需要有文件号、在用Socket编程时涉及到Socket号,同样,多任务的操作系统管理进程时也采用了进程号——显然,整个软件系统都是采用一些数据类型为整型的变量来管理它要处理的逻辑对象的。一台打印机有它的逻辑文件名,在操作系统看来,它和磁盘上的一个文本文件没有两样。这样,向打印机输出与向磁盘文件输出就统一起来了,我们就依据这个想法来写模拟显示程序。大家知道,打印机的逻辑名是"PRN",我们可以对此作与磁盘文件相同的处理。下面的程序可写于按钮cb_print的Click事件下:

int retn,fileno

string filename,write_string

retn=Messagebox("提示","输出至打印机选,~r~n模拟显示(c:\simulate.txt)选,~r~n取消选! " ,Information!,YesNoCancel!,1) Choose Case retn

Case 1

sle_help.text="请准备好打印机!" filename="PRN"

Case 2

filename="c:\simulate.txt"

Case else

Return

End Choose

fileno=FileOpen(filename,linemode!,write!,lockwrite!,replace!)

if fileno=-1 then

Messagebox("警告","设备文件<打印机>打开失败!",information!,ok!)

Return

endif

write_string="打印前的模拟显示!"

FileWrite(fileno,write_string)

FileClose(fileno)

if Upper(filename)="PRN" then

sle_help.text="文件打印完毕!"

else

Run("Notepad.exec:\simulate.txt",maximized!)

sle_help.text="模拟显示文件输出完毕!"

endif

这样,当需要模拟显示时,write_string被送往磁盘文件c:\simulate.txt,并调用Notepad将其显示出来;当需要打印时,write_string被送往打印机。六、结语写作本文不仅想与读者交流编程技巧,还希望向读者提供一些有用的思路。PowerBuilder不仅支持ODBC,而且支持MAPI,是企业级信息管理系统和Intranet应用开发的强大工具。笔者深信,PowerBuilder的应用范围将更加广泛,随着应用的深化,必定会涌现出更多优秀的PowerBuilder应用,并将在各行各业充分发挥作用。

郑重声明:请尊重作者劳动成果,如需转载,转载请注明原创和本贴来自昕晨论坛。

----------------------------------------------

昕晨空间欢迎你:https://www.360docs.net/doc/ad2228260.html,

----------------------------------------------

2004-1-1 1:14:00 新手经常问到的问题,在问题版块 [精华] 和专题[常见问题]里有

本主题贴数 30 分页:9 1 2 3 : 跳转论坛至...╋PB软件开发├问题专版├高级开发技巧├控件与界面├数据窗口应用├源码共享├PB资料专区├Pocket PB开发├网友原创╋专题讨论├数据库开发├MRPII/ERP/CRM╋休闲园地├社区娱乐├心灵驿站╋站务管理├软件基地├站务公告

*快速回复:Power Builder编程技巧十例

发贴表情

段落格式普通格式标题 1标题 2标题 3标题 4标题 5标题 6标题 7已编排格式地址字体宋体黑体楷体仿宋隶书幼圆新宋体细明体ArialArial BlackCourierVerdanaWide LatinWingdings 字号1234567

第 1 页,共 7 页, 49 个

显示签名验证码:内容限制:字节.

管理选项:专题管理 | 修复 | 锁定 | 解锁 | 提升 | 跟贴管理 | 删除 | 移动 | 设置固顶 | 奖励 | 惩罚 | 发布公告

Powered By :Dvbbs Version 7.0.0 Sp2 SQL版 Copyright ◎2002 - 2005 昕晨空间在本论坛发表言论,请相互尊重,并遵守相关法律。本论坛所有观点均代表网友个人立场,与论坛无关。

执行时间:343.75000毫秒。查询数据库8次。

当前模板样式:[默认模板]

《面向对象编程思想》实验报告册剖析

《面向对象编程思想》实验报告 专业年级: 姓 学 名: 号: 指导教师: 开课时间: 中南林业科技大学理学院信计教研室 制

说明 随着计算机的发展,传统的面向过程的设计方法不能满足用户需求,需要一种可视化的,面向对象的程序设计语言,用于发开。本课程先介绍面向对象的基本概念,再介绍一种面向对象程序设计开发工具-POWERBUILDER,过程中整书贯穿了一个应用程序实例“教学管理系统”设计开发的全过程,讲完后,由学生上机实践。教学计划在进行24学时理论知识讲授的同时,穿插有16学时的上机实验。通过实验,使学生熟悉POWERBUILDER的使用,设置实验内容时,在完成基本训练的基础上,设计了应用性、综合性的实验内容,使学生通过实验提高综合分析问题、解决问题的能力。 信息与计算科学教研室

目录 目录...................................................................................................................................II 实验一实验二实验三PowerBuilder基本操作及应用程序对象的创建(2学时) (1) 数据库操作一(2学时) (4) 数据库操作二(2学时) (5) 实验四应用对象、窗口、控件操作一(2学时) (6) 实验五实验六数据窗口对象(2学时) (14) 菜单对象(2学时) (15)

实验一 《面向对象编程思想》实验报告 PowerBuilder基本操作及应用程序对象的创建(2学时) 一、实验目的 熟悉PowerBuilder 开发环境,掌握使用帮助查找信息的方法,掌握应用程序对象的创建方法,了解对象、属性、事件的基本概念,了解编写一般脚本的方法。 二、实验内容 PowerBuilder 的启动和退出,熟悉PowerBuilder 的桌面(Desktop),包括 菜单(Menu)、工具条(Toolbar)、工作区(Workspace)等;完成一些基本的程序编写;学习使用在线帮助系统。 三、实验步骤 1、打开PowerBuilder 主窗体,熟悉PowerBuilder 开发环境。 2、分别使用帮助主题窗口的“目录”和“索引”页查找messagebox 函数的使 用方法。 3、运行以下程序: int n for n=1000to0step–1 if mod(n,17)=0 then exit next 结果为: 四、思考题 1、PowerBuilder有哪些特点?

数据结构实验指导书(2016.03.11)

《数据结构》实验指导书 郑州轻工业学院 2016.02.20

目录 前言 (3) 实验01 顺序表的基本操作 (7) 实验02 单链表的基本操作 (19) 实验03 栈的基本操作 (32) 实验04 队列的基本操作 (35) 实验05 二叉树的基本操作 (38) 实验06 哈夫曼编码 (40) 实验07 图的两种存储和遍历 (42) 实验08 最小生成树、拓扑排序和最短路径 (46) 实验09 二叉排序树的基本操作 (48) 实验10 哈希表的生成 (50) 实验11 常用的内部排序算法 (52) 附:实验报告模板 .......... 错误!未定义书签。

前言 《数据结构》是计算机相关专业的一门核心基础课程,是编译原理、操作系统、数据库系统及其它系统程序和大型应用程序开发的重要基础,也是很多高校考研专业课之一。它主要介绍线性结构、树型结构、图状结构三种逻辑结构的特点和在计算机内的存储方法,并在此基础上介绍一些典型算法及其时、空效率分析。这门课程的主要任务是研究数据的逻辑关系以及这种逻辑关系在计算机中的表示、存储和运算,培养学生能够设计有效表达和简化算法的数据结构,从而提高其程序设计能力。通过学习,要求学生能够掌握各种数据结构的特点、存储表示和典型算法的设计思想及程序实现,能够根据实际问题选取合适的数据表达和存储方案,设计出简洁、高效、实用的算法,为后续课程的学习及软件开发打下良好的基础。另外本课程的学习过程也是进行复杂程序设计的训练过程,通过算法设计和上机实践的训练,能够培养学生的数据抽象能力和程序设计能力。学习这门课程,习题和实验是两个关键环节。学生理解算法,上机实验是最佳的途径之一。因此,实验环节的好坏是学生能否学好《数据结构》的关键。为了更好地配合学生实验,特编写实验指导书。 一、实验目的 本课程实验主要是为了原理和应用的结合,通过实验一方面使学生更好的理解数据结构的概念

蔬菜中重金属(Pb、Cd)含量的测定 实验报告

蔬菜中重金属(Pb、Cd)含量的测定 摘要:本实验目的在于测定蔬菜中重金属(Pb、Cd)含量。以芥菜为样品,用干法灰化处理样品,用悬汞电极微分脉冲极谱法对铅离子和镉离子进行测定,用标准加入法做定量分析。测得结果为芥菜根中铅含量为2.5579mg/kg,镉含量为3.1836mg/kg。超过国标中对铅镉含量的测定。 关键词:蔬菜;重金属(铅Pb、镉Cd);微分脉冲极谱法 1 引言 1.1 测定蔬菜中Pb、Cd含量的现实意义 随着现代工业的发展,环境污染加剧,工业“三废”的排放及城市生活垃圾、污泥和含重金属的农药、化肥的不合理使用,导致蔬菜中重金属污染加剧。蔬菜是人们生活中的重要农产品,蔬菜中具有积累性和持续性危害的重金属含量的多少,将直接影响人们的健康。其中,铅及其化合物对人体有毒,摄取后主要贮存在骨骼内,部分取代磷酸钙中的钙,不易排出,中毒较深时引起神经系统损害,严重时会引起铅毒性脑病;镉会对呼吸道产生刺激,长期暴露会造成嗅觉丧失症、牙龈黄斑或渐成黄圈,镉化合物不易被肠道吸收,但可经呼吸被体内吸收,积存于肝或肾脏造成危害,尤以对肾脏损害最为明显。因此对蔬菜中的重金属铅、镉测定的研究具有极大的现实意义。 1.2目前有关蔬菜中重金属(Pb、Cd)含量的测定方法的概述 根据《GB 5009.12-2010 食品安全国家标准食品中铅的测定》,测定食品中铅含量包括以下方法:石墨炉原子吸收光谱法、氢化物原子荧光光谱法、火焰原子吸收光谱法、二硫腙比色法、单扫描极谱法。 根据《GB/T 5009.15-2003 食品安全国家标准食品中镉的测定》,测定食品中镉含量包括以下方法:石墨炉原子吸收光谱法、原子吸收光谱法之碘化钾-4-甲基戊酮-2法、原子吸收光谱法之二硫腙-乙酸丁酯法、比色法、原子荧光法。 此外,测定食品中铅镉含量方法还有电感耦合等离子体质谱法(ICP-MS)法、二次导数极谱法、催化极谱分析法、离子选择性电极法、溶出伏安法、高效液相色谱法。用毛细管区带电泳法可准确有效地测定了奶粉中的镉、铅、铜;通过观察试纸显色法可实现了快速检测食品中镉含量的要求。 火焰原子吸收法操作简单、分析速度快、测定高浓度元素时干扰小、信号稳定;石墨炉原子吸收法灵敏、准确、选择性好,但基体干扰严重,不适合多种元素分析;电感耦合等离子体质谱法灵敏度高,选择性好,能同时分析多种元素,但价格昂贵,易受污染;紫外分光光度法简便、快速、灵敏度高、仪器简单、价格低廉、容易普及,但干扰因素较多,选择性较差。阳极溶出伏安法灵敏度高、分辨率好,仪器价格低廉,可同时测定几种元素。其次还有间接碘量法,但这一方法测定误差较大;而比色法方法虽简单,但由于要使用有毒和易挥发的三氯甲烷等试剂,有害于分析人员的健康和污染环境。

数据结构课后习题

第一章 3.(1)A(2)C(3)D 5.计算下列程序中x=x+1的语句频度 for(i=1;i<=n;i++) for(j=1;j<=i;j++) for(k=1;k<=j;k++) x=x+1; 【解答】x=x+1的语句频度为: T(n)=1+(1+2)+(1+2+3)+……+(1+2+……+n)=n(n+1)(n+2)/6 6.编写算法,求一元多项式p n(x)=a0+a1x+a2x2+…….+a n x n的值p n(x0),并确定算法中每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数。注意:本题中的输入为a i(i=0,1,…n)、x和n,输出为P n(x0)。算法的输入和输出采用下列方法 (1)通过参数表中的参数显式传递 (2)通过全局变量隐式传递。讨论两种方法的优缺点,并在算法中以你认为较好的一种实现输入输出。 【解答】 (1)通过参数表中的参数显式传递 优点:当没有调用函数时,不占用内存,调用结束后形参被释放,实参维持,函数通用性强,移置性强。 缺点:形参须与实参对应,且返回值数量有限。 (2)通过全局变量隐式传递 优点:减少实参与形参的个数,从而减少内存空间以及传递数据时的时间消耗 缺点:函数通用性降低,移植性差 算法如下:通过全局变量隐式传递参数 PolyValue() { int i,n; float x,a[],p; printf(“\nn=”); scanf(“%f”,&n); printf(“\nx=”); scanf(“%f”,&x); for(i=0;i

溶出伏安法测水中Pb离子含量

化学与材料工程学院 环境监测分析实验报告 实验名称:溶出伏安法测定水样中微量重金属铅专业班级:应化13 学号150313135 姓名:朱建南 指导教师:翟春 实验地点:敬行楼B508 实验日期:2016年 11月 1日

一、实验目的 1.了解溶出伏安法测定重金属的原理。 2.学习电化学工作站的操作。 3.掌握标准加入法的原理,并学会根据伏安图计算溶液中铅离子的浓度。 二、主要实验器材和药品 器材:电化学分析仪,采用三电极系统:玻碳电极( 工作电极),甘汞电极( 参比电极),铂丝( 对电极) 。 药品:聚乙烯醇( PVA) 溶液: 50 mg/ L; Pb2+标准溶液:1 *10- 4 mol/L( 按常规方法配制);NH4OH-NH4Cl 缓冲溶液:2 mol/L( pH = 8.6)(所用试剂均为分析纯, 实验用水为去离子水)。 三、实验原理 阳极溶出伏安法是指在一定的电位下,使待测金属离子部分地还原成金属并溶入微电极或析出于电极的表面,然后向电极施加反向电压,使微电极上的金属氧化而产生氧化电流,根据氧化过程的电流一电压曲线进行分析的电化学分析法。 阳极溶出伏安法包括电解富集和溶出两个基本过程。富集过程:向工作电极施加恒定电压,使溶液中的待测离子富集在电极表面。溶出过程:富集一段时间后,工作电极电压由负方向向正方向扫描,使电极上已经富集的金属重新氧化溶出回到溶液中。 阳极溶出伏安法常用于检测稀溶液金属元素含量,具有待测物消耗量少的特点,常结合标准加入法应用。在测量条件一定时,由于峰电流与待测物浓度成正比,故可以进行定量分析。峰电流的主要影响因素有富集时间、搅拌速度、富集电位、电极面积、待测样品体积、溶出时间扫描电压、扫描速度等,所以要严格控制实验条件。 按下面公式计算样品中铅或镉的含量 C x= C s V s H /(H(V x+V s)-h x V x) C s:标准溶液浓度(mol/L) V s:标准溶液体积(mL) H:水样加入标准溶液后的峰电流高度 V x:水样的体积(mL)

PB9.0实验操作说明

实验步骤: 一、建立数据库 1.创建数据库exam_pb 2.建立表students 3.为表students指定主键为“学号” 4.向表中输入数据 二、建立应用程序 1.建立工作空间“练习一” 2.建立应用程序“test” 3.建数据窗口dw_1 5.建应用程序窗口w_main 6在应用程序窗口中添加控件 7.为数据窗口指定目标对象“student”为主窗口定义标题!为控件定义标题! 8.为应用程序和控件编写脚本一定要保存窗口!! ①应用程序test脚本: open(w_main) ——打开主窗口 ②应用程序窗口w_main的各个脚本: w_main open事件的脚本: SQLCA.DBMS = "ODBC" SQLCA.AutoCommit = False SQLCA.DBParm = "Connectstring='DSN=exam_pb;uid=dba;pwd=sql'" connect using sqlca;

dw_1.settransobject(sqlca) “增加”命令按钮click事件的脚本: dw_1.insertrow(0) dw_1.setfocus() “删除”命令按钮click的脚本: dw_1.deleterow(0) “检索”命令按钮click的脚本: dw_1.retrieve() “过滤”命令按钮click的脚本: w_main.dw_1.setfilter("系别='计算机系'") w_main.dw_1.filter() “保存”命令按钮click的脚本: dw_1.update() “退出”命令按钮click的脚本: close(parent) 三、连接数据库 1.建立ODBC数据源“exam_pb”用户名:dba 密码:sql 考试时也是这个 2.建立数据库描述文件“exam_pb”预览和测试!! 3.连接数据源 四、运行程序

基于PowerBuilder的学生成绩管理系统的设计与实现-2019年精选文档

基于PowerBuilder 的学生成绩管理系统的设计与实 信息社会的高科技,商品经济化的高效益,使计算机的应用已普及到经济和社会生活的各个领域。计算机虽然与人类的关系愈来愈密切,但还有由于计算机操作不方便而继续用手工进行劳动的人。学生成绩管理和分析系统为教务人员带来了极大的方便。该软件是以汉语编程语言为实现语言,其功能在系统内部有源代码直接完成。通过操作手册,使用者可以了解本软件的基本工作原理。操作人员只需输入一些简单的汉字、数字,即可达到自己的目的。 现今成绩管理的繁琐给教务人员带来了诸多不便,教学办公室缺少一种完善的成绩管理软件,为了方便的管理学生成绩,因此开发了此学生成绩管理和分析系统。 学生成绩管理和分析系统的目标: 1)节约资源,提高学生信息的精确度:能够减少很多不必要的资源,不用像以前那样用冗余的纸张式的管理。大大节省了学院资源。并且计算机的存储与快速查询功能大大提高了学生成绩管理的效率,并且还提高了成绩信息管理的精确度。 2)方便快速的操作,精简人员,节约开支:方便快速的操作,可减少学生信息管理的漏洞,又可减少工作的错误,并且操作非常简单,可减少许多不必要的工作人员,这无论从物质上还

是工作人员的工资上都为学院节约了开支,为学院增加了财富。 1系统分析 成绩管理系统主要针对三类用户:学生、教师、管理员。 个良好的成绩管理系统不仅要求有方快捷的操作、简单有效的管理,而且要有高级的安全性以及很强的通用性。根据需求分析,使用面向对象的设计技术,系统应具有如下的几个功能模块: 1) 用户登录模块 学生用户和教师用户登录以后只能输入相关查询条件进行一系列相关的成绩查询。 管理员登录以后不仅有学生用户和教师用户的所有权限,且可以对数据库和基础信息进行维护。 2) 系统维护模块 若系统在应用过程中出现问题确实需要进行初始化时,系统 管理员就可以对系统进行初始化操作。 3)基本信息维护模块 在此模块中,系统管理员可以对基本信息进行维护,如对班级信息、学生信息、课程信息等进行维护。 4)数据库管理模块 此模块可以对数据库中的数据进行备份和还原。 5)成绩管理模块 此模块只有管理员有权限进行操作,管理员登录后可以对学生成绩进行插入、删除、修改、保存等操作并且能导入和导出学

根式函数值域定稿版

根式函数值域 HUA system office room 【HUA16H-TTMS2A-HUAS8Q8-HUAH1688】

探究含有根式的函数值域问题 含根式的函数的值域或者最值问题在高中数学的学习过程中时常遇到,因其解法灵活,又缺乏统一的规律,给我们造成了很大的困难,导致有些学生遇到根式就害怕。为此,本文系统总结此类函数值域的求解方法,供学生参考学习。 1.平方法 例1:求31++-=x x y 的值域 解:由题意知函数定义域为[]1,3-,两边同时平方得:322422+--+=x x y =4+()4212+- +x 利用图像可得[]8,42∈y ,又知?y 0[]22,2∈∴y 所以函数值域为[]22,2 析:平方法求值域适用于平方之后可以消去根式外面未知量的题型。把解析式转化为()x b a y ?+=2 的形式,先求y 2 的范围,再得出y 的范围即值域。 2.换元法 例2: 求值域1)12--=x x y 2)x x y 2 4-+= 解:(1)首先定义域为[)+∞,1,令()01≥-=t x t ,将原函数转化为 [)+∞∈,0t ,?? ????+∞∈∴,815y 析:当函数解析式由未知量的整数幂与根式构成,并且根式内外的未知量的次幂保持一致。可以考虑用代数换元的方法把原函数转化成二次函数,再进行值域求解。 (2)首先,函数定义域为[]2,2-∈x ,不妨设αsin 2=x ,令?? ????-∈2,2ππα

则原函数转化为:??? ? ?+=+=4sin 22cos 2sin 2παααy ?? ????-∈2,2ππα,∴??????-∈+43,44πππα 析:形如题目中的解析式,考虑用三角换元的方法,在定义域的前提下,巧妙地规定角的取值范围,避免绝对值的出现。 不管是代数换元还是三角换元,它的目的都是为了去根式,故需要根据题目灵活选择新元,并注意新元的范围。 3.数形结合法 例3:1)求()()8222+-+= x x y 的值域。 2)求1362222+-++-= x x y x x 的最小值。 解:(1)()()8222+-+=x x y 82++-=x x 其解析式的几何意义为数轴上的一动点x ,到两定点2与-8的距离之和,结合数轴不难得到[]+∞∈,10y (2)解析式可转化为()()41312 2+++=--x x y , 定义域为R ,进行适当的变形 ()()=+++--413122x x ()()()()2031012 222----+++x x , 由它的形式联想两点间的距离公式,分别表示点到点的距离与点的距离之和。 点()0,x P 到()1,1A 和()2,3B 的距离之和。即PB PA y +=,结合图形可知 13min =+'=PB A P y ,其中()1,1-'A 析:根据解析式特点,值域问题转化成距离问题,结合图形得出最值,进而求出了值域。 例4:1) 求x x y x 2312 +--+=的值域

实验报告模版 (3)

实验名称:声速的测量 实验目的: 了解超声波的产生、发射和接收的方法,用干涉法(驻波法)和相位法测量声速。 实验原理: (一)为什么选择超声波进行测量。 在弹性介质中,频率从20Hz到20kHz的振动所激起的机械波称为声波,高于20kHz,称为超声波,超声波的频率范围在2×104Hz-5×108Hz之间。超声波的传播速度,就是声波的传播速度。超声波具有波长短,易于定向发射等优点,在超声波段进行声速测量比较方便。 实验装置 由波动理论可知,波速与波长、频率有如下关系:v = f λ,只要知道频率和波长就可以求出波速。本实验通过信号发生器控制换能器,信号发生器的输出频率就是声波频率。声波的波长用驻波法(共振干涉法)和行波法(相位比较法)测量。下图是超声波测声速实验装置图。

1)驻波法测波长 由声源发出的平面波经前方的平面反射后,入射波与发射波叠加,它们波 动方程分别是: ??? ?? -=λπx ft A y 2cos 1 ??? ? ? +=λπx ft Acod y 22 叠加后合成波为: ()()y = 2Acos 2X/cos 2ft πλπ 当X =n /2 λ±时y = 2Acos2X / =1πλ±称为波腹 当()X =2n+1/4 λ±时()cos 2X/0πλ=,称为波节 因此只要测得相邻两波腹(或波节)的位置Xn 、Xn-1即可得波长。 2)相位法测波长 从换能器S 1发出的超声波到达接收器S 2,所以在同一时刻S 1与S 2处的波有一相位差: = 2x/其中是波长,x 为S 1和S 2之间距离。因为x 改 变一个波长时,相位差就改变2。利用李萨如图形就可以测得超声波的波长。

二次函数和几何综合压轴题题型归纳

学生: 科目: 数 学 教师: 刘美玲 一、二次函数和特殊多边形形状 二、二次函数和特殊多边形面积 三、函数动点引起的最值问题 四、常考点汇总 1、两点间的距离公式:()()22B A B A x x y y AB -+-= 2、中点坐标:线段AB 的中点C 的坐标为:??? ??++22 B A B A y y x x , 直线11b x k y +=(01≠k )与22b x k y +=(02≠k )的位置关系: (1)两直线平行?21k k =且21b b ≠ (2)两直线相交?21k k ≠ (3)两直线重合?21k k =且21b b = (4)两直线垂直?121-=k k 3、一元二次方程有整数根问题,解题步骤如下: ① 用?和参数的其他要求确定参数的取值范围; ② 解方程,求出方程的根;(两种形式:分式、二次根式) ③ 分析求解:若是分式,分母是分子的因数;若是二次根式,被开方式是完全平方式。 例:关于x 的一元二次方程()0122 2 =-m x m x ++有两个整数根,5<m 且m 为整数,求m 的值。 4、二次函数与x 轴的交点为整数点问题。(方法同上) 例:若抛物线()3132 +++=x m mx y 与x 轴交于两个不同的整数点,且m 为正整数,试确定 此抛物线的解析式。 课 题 函数的综合压轴题型归类 教学目标 1、 要学会利用特殊图形的性质去分析二次函数与特殊图形的关系 2、 掌握特殊图形面积的各种求法 重点、难点 1、 利用图形的性质找点 2、 分解图形求面积 教学内容

5、方程总有固定根问题,可以通过解方程的方法求出该固定根。举例如下: 已知关于x 的方程2 3(1)230mx m x m --+-=(m 为实数),求证:无论m 为何值,方程总有一个固定的根。 解:当0=m 时,1=x ; 当0≠m 时,()032 ≥-=?m ,()m m x 213?±-= ,m x 3 21-=、12=x ; 综上所述:无论m 为何值,方程总有一个固定的根是1。 6、函数过固定点问题,举例如下: 已知抛物线22 -+-=m mx x y (m 是常数),求证:不论m 为何值,该抛物线总经过一个固定的点,并求出固定点的坐标。 解:把原解析式变形为关于m 的方程()x m x y -=+-122 ; ∴ ???=-=+-0 1 02 2x x y ,解得:???=-=1 1 x y ; ∴ 抛物线总经过一个固定的点(1,-1)。 (题目要求等价于:关于m 的方程()x m x y -=+-122 不论m 为何值,方程恒成立) 小结.. :关于x 的方程b ax =有无数解????==0 b a 7、路径最值问题(待定的点所在的直线就是对称轴) (1)如图,直线1l 、2l ,点A 在2l 上,分别在1l 、2l 上确定两点M 、N ,使得MN AM +之和最小。 (2)如图,直线1l 、2l 相交,两个固定点A 、B ,分别在1l 、2l 上确定两点M 、N ,使得 AN MN BM ++之和最小。

PB常用函数

PB常用函数日期时间类函数 日期时间类函数的功能如下: Date:把日期转换为Date类型。 Time:把时间转换为Time类型。 Day:日期值。 Month:月值。 Year:年值。 DayName:星期几。 DayNumber:一周中的第几天。 DaysAfer:两个日期之间所差的天数。 SecondsAfer:两个时间之间所差的秒数。 Hour:小时。 Minute:分钟。 Second:秒。 Now:系统当前时间。 Today:系统日期和时间。 RelativeDate:指定日期前后的天数值。 RelativeTime:指定时间的前后时间值。 数值计算类函数 数值计算类函数主要的作用就是对数据进行计算,功能如下:Abs:返回数据的绝对值。 Max:求输入的最大值。 Min:求输入的最小值。 Ceiling:返回整数,小数会自动向上进位。 Int:返回整数,小数会自动向下退位。 Round:对数据进行四舍五入操作。 Truncate:删除掉小数点后若干位。 Cos:求余弦值。 Sin:求正弦值。 Tan:求正切值。 Exp:以e为底,输入值为次方的乘方值。 Sqrt:求平方根。 Fact:求阶乘。 Log:求自然对数。 LogTen:求以10为底的对数。 Mod:求余数。 Pi:求与PI的乘积。 Rand:返回1与输入值之间的一个伪随机数。 字符串类函数 字符串类函数的功能如下。 Fill:建立一个指定长度的字符串。 Lower:转换为小写字母。

Upper:转换为大写字母。 WordCap:首写字母大写,其他小写。 Space:由指定字符个数组成的空格字符串。 Left:从字符串左边开始指定字符串。 Right:从字符串右边开始指定字符串。 LeftTrim:删除字符串左边的空格。 RightTrim:删除字符串右边的空格。 Trim:删除左右两边的空格。 Len:返回字符串长度。 Match:判断是否有指定模式的字符。 Mid:取子字符串。 Replace:用指定字符替换另外一个字符串。 String:将数据转换为指定格式的字符串。 信息类函数 信息类函数可以获取数据窗口中的一些信息,函数的功能如下: CurrentRow:获取数据窗口的焦点的行数。 Page:获取当前记录的页数。 PageAcross:获取当前水平方向的页面。 PageCount:获取总页数。 RowHeight:获得记录的高度。 Describe:获取数据窗口对象的属性值。 IsRowModified:获取记录是否修改过,如果修改过返回True。 IsRowNew:获取是否新插入数据,如果插入返回True。 IsSelected:获取记录是否被选中,选中返True。 PageCountAcross:获取水平方向总页面。 RowCount:获取主缓冲区的总记录数。 统计类函数 统计类函数主要是用来对数据库中的数据进行统计操作,统计函数功能如下: Avg:计算字段的平均数,例如Avg(id)。 Max:计算字段的最大值,例如Max(id)。 Min:计算字段的最小值,例如Min(id)。 Median:计算字段的中间值。 Count:计算表或字段的记录数,例如Count(*)。 Frist:返回第一条记录。 Last:返回最后一条记录。 交叉表函数 只能在交叉列表风格的数据窗口中的细节区使用交叉表函数,交叉表的函数功能如下:CrosstabVag:计算字段数据的平均数。 CrosstabCount:计算字段数据的记录数。 CrosstabMax:计算字段数据的最大值。 CrosstabMin:计算字段数据的最小值。 数据类型转换与检查函数 数据类型转换与检查函数用于定义数据窗口的过滤条件、有效性检查和数据类型转换,数据类型转换与检查函数的功能如下:

常用控件的编程实验报告

实验二常用控件的编程 一、实验目的和要求 (1)掌握窗口下拉列表框、选择钮、组合框、多行编辑框等常用控件的基本使用方法和编程方法; (2)掌握窗口控件的齐整性操纵方法以及Tab顺序的设置; (3)掌握SQL语句的使用,PowerBuilder系统提供的SQL画板的使用方法。 二、实验准备 (1)复习有关下拉列表框控件、选择按钮控件、多行编辑框控件以及组合框控件的内容; (2)启动Powerbuilder 9.0; (3)选择已经创建的应用mypb..pbl。 三、实验步骤 本次实验将创建一个学生基础数据的录入窗口;其功能是向实验1中创建的student数据库中的student表输入数据。 1.创建窗口对象 创建一个新的弹出式窗口对象,Title为“学生基本情况输入”;W indowType为“popup!”;保存窗口名称为w_studentinput。 2.向窗口中添加控件 (1)布置窗口中的静态文本控件 在窗口控件下拉列表工具栏图标中选择静态文本控件,然后在窗口上单击,生成静态文本控件。将Text属性设置为“学生情况录人”,选择字体为“华文行楷”(无此字体时,可以换成别的字体),字体尺寸为26,按下“Bold”图标按钮,选择“TextColor”为深蓝色。其他输入栏的说明文字都选为宋体12号黑色宇;使用Ctr l和T组合键进行外观复制后修改Text属性完成。 (2)布置窗口中的单行编辑框控件 在窗口控件下拉列表工具栏图标中选择单行编辑框控件,然后在窗口上单击,生成单行编辑框控件。使用Ctrl和T组合键进行外观复制生成5个单行编辑框,它们的名称和用途见表4。 表4 单行编辑框的名称和用途 (3)布置窗口中的多行编辑框控件 在窗口控件下拉列表工具栏图标中选择多行编辑框控件,然后在窗口上单击,生成多

PB中一些技巧

PB中一些技巧 1.RGB函数计算公式: 颜色值= (65536 * Blue) + (256 * Green) + (Red) 2.控件可拖动: send(handle(this),274,61458,0) 3.如何用程序控制下拉子数据窗口的下拉和收起 用modify或者直接用dw_1.object.col1.dddw.showlist = true 4.检索参数有些不需要传入则传%. 5.如何屏蔽鼠标滚轮触发 在控件的other事件写 if message.number = 522 then return 1 6.得到数据窗口的语法: string ls_dwsyntax ls_dwsyntax=dw_1.describe("datawindow.syntax") 7.得到数据窗口中各列及标题: long ll_count,i string ls_value,ls_colname ll_colnum = Long(dw_1.object.datawindow.column.count) for i = 1 to ll_colnum //得到标题头的名字 ls_colname = dw_1.describe('#' + string(i) + ".name") + "_t" ls_value = dw_1.describe(ls_colname + ".text") next 8.在程序中动态设置初始值: ex:dw_contro.object.columnName.initial = 'xxxx' 9.如何在DataWindow的SQL语法中不使用SELECT DISTINCT实现删除重复的行 ---- 起先对你要显示唯一值的列进行排序:"city A",然后增加如下过滤字符串:" city < > city [-1] or GetRow () = 1" 10.如何改变列的字体颜色,提醒用户此列已做修改

数据库实验报告 PB9.0 图书管理系统

目录 一、设计题目和功能 (2) 二、实习目的 (2) 三、需求分析 (2) 3.1、功能需求概述 (2) 3.2、E-R图 (3) 四、设计方案及具体实现 (3) 4.1、数据库的设计 (3) 4.2、系统功能实现总体框架 (4) 4.3、系统模块的实现 (5) 4.3.1、主窗体 (5) 4.3.2、图书管理 (5) 4.3.3、图书租借 (7) 4.3.4、图书检索 (8) 4.3.5、证件管理 (10) 4.3.6、系统设置 (12) 4.3.7、基本信息 (12) 五、实验感想 (13) 参考文献 (14) 附录:各个模块的代码 (15)

一、设计题目和功能 功能: (1)图书信息的录入和删除,出版社信息管理等; (2)图书的检索(包括按作者姓名、出版时间、出版社名称、图书类别、书名、关键宇等); (3)图书的租借(包括借书登记、限借数量控制、还书登记、过期罚款计算等); (4)借书证件的管理(包括办新证件,挂失、注销等) (5)系统设置(主要是不同类型证件的可借书的总量和借书时间等)二、实习目的 (1)培养综合应用SQL Server和PowerBuilder进行应用程序设计和解决实际问题的能力; (2)加深对PowerBuilder编程环境和编程方法的理解; (3)发挥各人的想像能力和分析能力,拓展思维空间; (4)掌握应用程序设计的基本方法; (5)巩固已经学到的编程技术,学会在编程中学习编程。 三、需求分析 3.1、功能需求概述 根据本次课程设计的要求,把本次课程设计设计为六个模块,并分别实现其功能: (1)新书入库模块。 (2)图书检索模块:按图书编号检索、按书名检索、按图书编号检索、按关键字检索。 (3)图书租借模块:借书办理、还书办理、借阅记录。 (4)借书证管理模块:借书证的办理、借书证挂失(挂失和解挂)办理、借书证注销办理。 (5)系统设置模块:不同类型借书证的设置(学生证和教师证)包括借书天数、借书本数。 (6)基本信息模块:简单介绍本程序实现的功能。

Pb2+和Bi3+的连续滴定实验报告完整版

Pb2+和Bi3+的连续滴定 一、实验目的 1. ZnO标定EDTA的方法 2. EDTA连续滴定Pb2+和Bi3+的原理和方法 3. XO指示剂的颜色变化判断 二、实验原理 1.因为lgK BiY=27.94 lgK PbY=18.04 所以能实现连续滴定 2. PH=1 Bi3++H2Y2-?BiY-+2H+ 3. PH=5—6 Pb2++XO?PbXO Pb2++H2Y2-?PbY2-+2H+ 三、实验步骤 1. 0.01mol/L EDTA的标定 ①称ZnO 0.25—0.37g与小烧杯中,逐渐加1:1 HCl 溶解,定容150ml。 ②取10.00ml Zn 标液于锥形瓶中加30ml H2O,2—3滴XO加1:8 氨水,使溶液由黄到橙,再逐滴加(CH2)6N4,使溶液为紫红色,多加3ml (CH2)6N4。用EDTA滴定,由红到黄色。 2.Pb2+和Bi3+的滴定 ①Bi3+、Pb2+的混合液25.00ml滴定。加0.2mol/L HNO3 10ml,PH≈1加1—2滴XO,用EDTA滴定,由红到黄,记录V1。 ②继续在上述溶液中加1~2滴XO,逐滴加1:8氨水,由黄到橙,再逐滴加(CH2)6N4至紫红色,再多加5 ml(CH2)6N4,PH≈5~6,用EDTA

滴定由红到黄记录V2。 四、数据处理 1.EDTA的标定 m1ZnO/g 15.9006 m2ZnO/g 15.5943 Δm ZnO/g0.3063 EDTA标定I II III V EDTA(ml)21.24 22.00 21.50 C EDTA(mol/L) 0.01187 0.01146 0.01173 平均C EDTA(mol/L) 0.01169 d r1% 1.2% 2.Pb2+、Bi3+的测定 Bi的测定I II III V1/ml 22.70 22.50 22.78 ρBi(g/L) 2.218 2.199 2.226 平均ρBi(g/L) 2.214 D r2% 0.47% Pb2+的测定I II III V2/ml 48.00 47.80 47.78 ρPb(g/L) 2.451 2.451 2.442

信息系统开发实验报告

信息系统开发实验概 通过一系列实验完成一个实例员工管理系统的开发过程,将系统开发各个阶段的基本活动贯穿起来,从而对管理信息系统的开发形成一个全面、整体的理解和认识。 ㈠员工管理系统的开发背景 绿油油公司为了便于掌握和了解员工的基本情况,需要建立一个能够储存员工各种信息,对员工可以进行信息的浏览、添加、删除、保存的操作。 ㈡员工管理系统实验内容 通过实际建立一个完整的信息系统来加深对信息系统开发理论知识的理解与认识,掌握使用PowerBuilder数据库画板完成在Sql Anywhere 中创建后台数据库、数据表,以及定义各表的主键及外部键等各种操作。建立MDI风格的应用程序框架,并与数据库建立连接,使用 PowerBuilder中提供的菜单编辑画板创建一个菜单对象。使用 PowerBuilder中提供的各种类型的窗体和基本控件创建各个功能模块的相应窗体对象。使用 PowerBuilder中提供的数据窗口对象和数据窗口控件完成对数据库中各类数据的增加、修改、删除操作等操作。

实验Ⅰ数据库设计 实验内容: ㈠在D盘的“实验报告”目录下创建名为YGGL的数据库。 实验步骤: ①单击工具栏上的Database图标,打开数据库画板,在其工作窗口中弹出一个Select Tables对话框,如图1所示。单击其中的 ②从File菜单中单击Create Database...菜单项,打开Create Local Database对话框。 ③在Database Name文本框中输入要创建数据库的路径和文件。 ④在UerID文本框中输入数据库用户名,默认值为DBA。 ⑤在Password文本框中输入密码,默认值为SQL。 ⑥在Start Command文本框中输入启动数据库系统的程序名称,一般使用系统的默认值dbeng50。此时,操作结果如图2所示。 ⑦单击OK按钮完成数据库的创建,并连接到新建数据库上。 ㈡在刚建立的MISYGGL库中创建一个员工卡片表YGKP和一个部门卡片表BMKP以及用户表YH,其结构如表1和表2 、表3所示。 表1员工卡片表YGKP

PB中实现图片按钮的mousemove事件

PB中实现图片按钮的mousemove事件 ---- PB中除窗口(window)和富文本(richtextedit)具有mousemove事件外,其他控件都不接收ousemove事件。在某些程序中,可能会对按钮进行动态的图片切换,如:鼠标移到按钮上时,切换按钮的图片以实现动感。 ---- 创建一个用户自定义对象(User Object),取名uo_picbutton,其上放一个Picture控件(p_1)。选中p_1,定义用户自定义事件(user events),在event name中输入mousemove, 由下面的Paste Event ID中选取pbm_mousemove放入Event ID栏。自此,p_1的事件栏中增加了事件mousemove,在其中编程: ---- p_1.picturename="c:\图片_over.bmp" //鼠标移动到p_1上时要显示的图片 ---- 关闭user object,新建一个窗口,添加刚才建成的user object(uo_1).在form的open事件中编程: ---- uo_1.p_1.picturename="c:\图片_up.bmp" //初始图片 ---- 在form的mousemove事件中编码: ---- uo_1.p_1.picturename="c:\图片_up.bmp" //恢复原来的图片 ---- 这样,运行时一旦鼠标移动到该控件上就会变换图片,从而产生动态效果。只要在uo_picbutton的mousemove事件中增加两三句代码,可以使其成为通用的图片按钮;添加user event事件,并拷贝下面列出的事件ID(event id),可以生成更多的原本不能接收的事件。

PB函数常用

Max() 功能求两个数中的最大值。 语法Max ( x, y ) 参数x:数值型变量或表达式,参加比较的第一个数y :数值型变量或表达式,参加比较的第二个数返回值以x、y中数据类型更精确的数据类型作为该函数的返回值数据类型。函数执行成功时返回参数比较的两个数中更大者。如果任何参数的值为NULL,Max()函数返回NULL。 Min() 功能求两个数中的最小值。 语法Min( x, y ) 参数x:数值型变量或表达式,参加比较的第一个数y :数值型变量或表达式,参加比较的第二个数返回值以x、y中数据类型更精确的数据类型作为该函数的返回值数据类型。函数执行成功时返回参数比较的两个数中较小者。如果任何参数的值为NULL,Min()函数返回NULL。 Mod() 功能求余数。 语法Mod ( x, y ) 参数x:数值型变量或表达式,被除数y :数值型变量或表达式,除数返回值以x、y中数据类型更精确的数据类型作为该函数的返回值数据类型。函数执行成功时返回x除以y所得的余数。如果任何参数的值为NULL,Mod()函数返回NULL。 Round() 功能将x四舍五入到n位。 语法Round ( x, n )参数x:要四舍五入的数值型数据n:整数类型,指定从哪个小数位上四舍五入x。有效值在0到18之间返回值Decimal。函数执行成功时返回将x四舍五入到小数点后第n位的数值,如果函数执行失败或任何参数的值为NULL,Round()函数返回NULL。Truncate() 功能截断数值到指定的小数位。 语法Truncate ( x, n ) 参数x:要截断的数值型数据n:整数类型,指定从哪个小数位上截断x。有效值在0到18之间返回值Decimal。函数执行成功时返回将x截断到小数点后第n位的数值,如果函数执行失败或任何参数的值为NULL,Truncate()函数返回NULL。所谓截断就是舍弃指定位之后的数值。 Asc() 功能得到字符串第一个字符的ASCII码整数值。 语法Asc ( string ) 参数string:要得到第一个字符ASCII值的字符串返回值Integer。函数执行成功时返回string 参数第一个字符的ASCII值,如果string参数的值为NULL,则Asc()函数返回NULL。Char() 功能将字符串的第一个字符、Blob变量的第一个值、或一个整数转换成字符。 语法Char ( n ) 参数n:字符串、Blob变量或整数,也可以是包含上述类型数据的Any类型变量返回值Char。返回参数n的第一个字符。如果n参数的值为NULL,则Char()函数返回NULL。 Dec()

Pb3O4组成的测定论文

山东轻工业学院 分析化学综合设计实验论文 题目:Pb3O4组成的测定 专业班级: 姓名: 学号: 指导教师: 二O一一年六月

摘要: 实验使用6mol/L HNO3溶解铅丹中的PbO,得到二氧化铅固体,过滤。然后在PH5~6的HAc-NaAc缓冲溶液中用EDTA滴定,算出铅离子的质量。过滤出的固体在缓冲溶液中与KI反应,剩余KI用NaS2O3返滴定,算出PbO2质量。测量三次,求出偏差和Pb3O4的质量分数。 关键词:铅丹四氧化三铅二氧化铅氧化铅 ----------------------------------------------------------- Abstract: Experimental use 6mol/LHNO3dissolve leade Dan and get the Pb02 solid ,filtering.Then,we can have a titration with EDTA to the solid in the HAc-NaAc buffer solution at PH5-6.At least,calculate the quality of the Lead ions. Filters solid in buffer solution and potassium iodide response,The surplus potassium iodide returns to the titrate with the sodium hyposulfite .Calculate the quality of PbO2.measure three,To deviate and the quality scores. Key words: Red lead Red lead The oxidizing lead Oxidation lead

相关文档
最新文档