PB常用代码

PB常用代码
PB常用代码

pb 常用的一些代码

窗口的open 事件或者【浏览】和【查询】按钮的click 事件

dw_1.settransobject(sqlca)//指定事务对象

dw_1.retrieve()//检索数据

【添加】按钮的click 事件

dw_1.insertrow(0)

dw_1.setfocus()

dw_1.scrolltorow(dw_1.rowcount())

if dw_1.updata()=1 then

messagebox("提示","保存成功!")

cb_1.enabled=true

cb_3.enabled=false

esle

messagebox("提示","保存失败,请核实!")

end if

dw_1.setcolumn(1)//将第一列设置为当前列

cb_1.enabled=false

cb_3.enabled=true//cb_3 为保存控件

【保存】按钮的click 事件

if dw_1.update()=1 then

messagebox("提示","保存成功!")

cb_1.enabled=true

cb_3.enabled=false

else

messagebox("提示","保存失败,请核实!")

end if

【删除】按钮的click 事件

if dw_1.deleterow(0) then//其中0 表示删除当前行

if dw_1.update()=1 then

messagebox("提示","删除成功!")

else

messagebox("提示","删除失败!")

end if

else

messagebox("提示","删除失败")

end if

【退出】按钮click 事件

close(parent)

【上一条】按钮的click 事件

dw_1.scrollpriorrow()

dw_1.selectrow(0,false)//0 表示选取或者取消所有行,dw_1.selectrow(1,true)//第一行高亮显示

dw_1.selectrow(dw_1.getrow(),true)

【下一条】按钮的click 事件

dw_1.scrollnextrow()

dw_1.selctrow(0,false)

dw_1.selectrow(dw_1.getrow(),true)

【升序】按钮的click 事件本例按商品编号升序排列

dw_1.setransobject(sqlca)

dw_1.setsort("商品编号A")//setsort 函数用来定义数据窗口如何排序,sort()函数则实际对数

据窗口进行排序。A 表示升序,D 表示降序。

dw_1.sort()

dw_1.retrieve()

下拉数据窗口的selectionchanged 事件,用于动态绑定数据窗口

string sjckdx

sjckdx=trim(ddlb_1.text)

if sjckdx="商品信息表" then

dw_1.dataobject="spxxb_data"//在程序运行时动态绑定数据窗口对象spxxb_data

elseif sjckdx="供应商信息表" then

dw_1.dataobject="gysxxb_data"//在程序运行时绑定数据窗口对象gysxxb_data

end if

控制数据窗口中数据列的显示颜色关键技术

打开数据窗口对象画板,选择数据窗口对象中要为其设置显示颜色的字段列,然后再属性页中选择【font 】选项卡background Color 后的expression 中填入代码,例如:if( 数

量>4,rgb(240,0,0),if(数量>3,rgb(0,240,0),rgb(50,50,250)))

使用下列数据窗口选择商品名称实现快速输入

在属性页中选择【edit】,在【style type】下拉列表框中选择【dropdowndw】

在数据录入时对行进行计算

数据窗口控件的rbuttondown 事件,实现行数据的自动计算其代码如下:

decimal jj,je

long sl,i,rowcnt

rowcnt=dw_1.rowcount()//获取数据窗口中的记录总数

if rowcnt>0 then

dw_1.scrolltorow(1)

for i=1 to rowcnt

jj=dw_1.getitemnumber(i,5)//从数据窗口中取值

sl=dw_1.getitemnumber(i,6)

je=dec(mid(string(jj*sl),1,pos(string(jj*sl),".",1) 2))

dw_1.setitem(i,7,je)//为数据窗口赋值

next

end if

为数据窗口建立一个用户自定义事件us_dw,event id 选择pbm_dwnprocessenter 其代码如下,

实现行数据的自动计算

decimal jj,je

long sl,i,rowcnt

rowcnt=dw_1.rowcount()

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

if dw_1.getcolumn()=7 then

if rowcn>0 then

dw_1.scrolltorow(1)

for i=1 to rowcnt

jj=dw_1.getitemnumber(i,5)

sl=dw_1.getitemnumber(i,6)

je=dec(mid(string(jj*sl),1,pos(string(jj*sl),".",1) 2))

dw_1.setitem(i,7,je)

next

dw_1.scrolltorow(rowcnt)

end if

end if

密码触发相关程序

用户名的单行编辑框进行代码的编写。在该单行编辑框中用户按下enter 键下来验证用户名。如果存在,输入焦点自动切换到密码输入框中;否则提示用户输入错误,要求重新输入用户名。

keydown 中添加如下的代码:

string is_username

integer li_isexist

if key=keyenter! then//当按下的按键是enter 键时处理

is_username=trim(this.text)

select count(*) into:li_isexist from password where

username=:is_username;

if li_isexist<=0 then//用户不存在的话

messagebox("错误","该用户不存在")

this.selecttext(1,len(this.text))

return

end if

sle_password.setfocus()//切换焦点到密码输入窗口

end if

用户登录模块登录按钮的代码如下所示:

string is_password,is_userpass

is_password=trim(sle_password.text)

if trim(sle_username.text)='' then

messagebox("错误","请输入用户名")

return

end if

select password into:is_userpass from password where

username=:sle_username.text;

if is_password=is_userpass then

open(w_changpass)

close(parent)

else

messagebox("错误","密码不存在")

sle_password.selecttext(1,len(sle_password.text))

return

end if

在主窗口的closequery 事件编写脚本。如果数据窗口的数据被修改和删除过以后还没保存,则需要提示用户先进性保存然后再对出窗口。

if dw_1.modifiedcount() dw_1.deletedcount()>0 then

if messagebox("提示","数据已经被修改,是否保存以后再退出?",question!,yesno!)=1 then return -1//返回-1 可以不关闭当前窗口

end if

end if

if trim(ddlb_1.text)=trim(ddlb_2.text) then

if trim(ddlb_1.text)='' then

dw_2.dataobject="d_result_search_arrive"

dw_2.settransobject(sqlca)

dw_2.retrieve(ddlb_2.text)

return

end if

if trim(ddlb_2.text)='' then

dw_2.dataobject="d_result_search"

dw_2.settransobject(sqlca)

dw_2.retrieve(ddlb_1.text)

return

end if

datastore ldt_1

ldt_1=create datastore

ldt_1.dataobject="d_result_rearch_between"

ldt_1.settransobject(sqlca)

ldt_1.retrieve(ddlb_1.text,ddlb_1.text)

long ll_row,ll_total,ll_order_start,ll_order_end,ll_id,ll_currow

string is_startstation,is_endstation,is_trainno

ll_total=ldt_1.rowcount()

if ll_total<=0 then

messagebox("抱歉","当前没有所需要查询的数据")

destroy(ldt_1)

return

end if

dw_2.dataobject='d_result_search'

for ll_row=1 to ll_total

ll_id=ldt_1.getitemnumber(ll_row,'id')

select "traindetail"."order" into :ll_order_start from traindetail where id=:ll_id and

station=:ddlb_1.text;

select "traindetail"."order" into :ll_order_end from traindetail where id=:ll_id and

station=:ddlb_2.text;

select startstation into :is_endstation from trainbase where id=:ll_id;

select endstation into :is_endstation from trainbase where id=:ll_id;

select trainno into:is_trainno from trainbase where id=:ll_id;

if ll_order_start

ll_currow=dw_2.insertrow(0)

dw_2.setitem(ll_currow,'trainbase_id',ll_id)

dw_2.setitem(ll_currow,'trainbase_startstation',is_startstation)

dw_2.setitem(ll_currow,'trainbase_endstation',is_endstation)

dw_2.setitem(ll_currow,'trainbase_trainno',is_trainno)

end if

end for

部分菜单的代码

w_main.arrangesheets(tile!)//窗口水平

w_main.arrangesheets(tilehorizontal!)//窗口垂直

w_main.arrangesheets(layers!)//窗口平铺

w_main.arrangesheets(cascade!)//窗口层叠

opensheet(sheet,parentwindow)//打开opensheet()在mdi 框架窗口中打开mdi 子窗口,并在指定才当中创建选择该子窗口的菜单项。例子//opensheet(child,mid_user,2,original!)

动态窗口下拉列表源代码

string sty,exp,err

choose case ddlb_1.text

case"自由格式"

sty="form"

case"网格格式"

sty="grid"

case"列表格式"

sty="tabular"

case"标签格式"

sty="label"

end choose

//对label 显示风格做处理

If sty="label" then

exp="style(type=" sty ")datawindow(units=2" &

"timer_interval=0 color=16777215 processing=2" &

"https://www.360docs.net/doc/e710079899.html,='laser address 0.50*1.755627'" &

"label.width=750 label.height=200 label.row=5" &

"label.rows.spacing=100 label.columns=4" &

"label.columns.spacing=313 label.topdown=no" &

"label.sheet=yes label.shape=roundrectangle" &

"label.ellipse_height=80 label.ellipse_width=83)"

else

exp="style(type=" sty ")datawindow(units=2 color=16777215)"

end if

//利用函数生成数据窗口的源代码

exp=syntaxfromsql(sqlca,dw_1.getsqlselect(),exp,err)

//syntaxfromsql()函数根据sqlselect 语句生成数据窗口对象的源代码,通常用于创建动态数据窗口

//创建数据窗口

dw_1.create(exp,err)

//dw_1.creat()可以用来动态创建数据窗口对象。使用指定的源代码创建数据窗口对象,并用新的数据窗口对象取代数据窗口原有的数据窗口。

//显示数据

dw_1.settransobject(sqlca)

dw_1.retrieve()

闪动的文字代码timer 事件

if mod(second(now()),2)=1 then

st_1.visible=false

else

st_1.visible=true

end if

移动的字体timer 事件

if mod(second(now()),2)=0 then

st_1.move(st_1.x 50,st_1.y)//沿水平方向移动

end if

PB 通用右键菜单制作(2007-08-23 14:13:44)转载分类:关于计算机

---- 对象被右键单击就弹出一个功能菜单是Windows 应用程序一项不可缺少的功能。在PowerBuilder 应用开发中,可在需弹出右键菜单对象的rbuttondown 事件中调用该菜单的Popmenu( )方法实现这一功能。但多数情况下,应用中有多处要用到不同的弹出式菜单,如一一用这种方法就需要做大量的工作。能不能做一个通用的菜单,可以用任何对象的rbuttondown 事件激发弹出,并在弹出前动态改变弹出菜单项的内容,当点击菜单项时又可执行被右击对象的相应用户事件?

一、创建弹出菜单m_popup

创建一个菜单m_popup, 定义菜单条m_main ,其下有十五个菜单项,分别命名为

m_item1,m_item2,……m_item15,各项的显示文本(text)分别为item1,item2,……item15;

为m_popup 菜单定义一个Powerobject 类型的Instance 变量:Anyobject

脚本为:

Powerobject Anyobject

给m_item1,m_item2,……m_item15 各菜单项的Clicked 事件下分别输入脚本:Anyobject.triggerevent("ue_item1")

//m_item1 的clicked 事件

Anyobject.triggerevent("ue_item2")

… …

Anyobject.triggerevent("ue_item15")

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

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

---- 参数Itemstring 是由多个子串组成的。各个子串间用“|”间隔,每个子串为一个菜单项的显示文本(text)。

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

下:

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.item[itemorder].text=currentitem

itempos=pos(itemstring,"|")

itemorder++

LOOP

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

for i=1 to itemorder

this.item[i].visible=true

this.item[i].enabled=true

next

for i=itemorder+1 to 15

this.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。

该函数弹出菜单条。

脚本如下:

this.popmenu(x,y)

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

---- 至此,我们就可以在窗口中任意对象如DataWindow、Picture、SingleLineEdit、ListBox、PictureListBox 、DropDownPictureListBox 、MultiLineEdit 、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

//把菜单的anyobject 指向被右击的对象(dw_1)

om_1.anyobject=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(powerobject 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.anyobject=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.setitemdisable()函数来屏蔽某个菜单项。

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

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

---- 以上代码在Windows98 和Powerbuilder6.5 平台上开发,并在多个大型系统中应用,效果很好。__

pb数据窗口常用代码

一、连接数据库 连接数据库也就是指定事务对象。PowerBuilder提供了两个函数:SetTrans()和SetTransObject()。 语法格式: dw_control.SetTrans(TransactionObject) dw_control.SetTransObject(TransactionObject) 其中,dw_control是所使用的数据窗口控件,transactionObject是所要指定的事务对象。 这两个函数有一个重要的区别就是在使用SetTrans()函数时,用户不需做任何数据初始化或事务对象初始化工作。用户只需要在这里填充一个事务对象,PB 就会自动完成对该事物对象的初始化以及和数据库连接的工作。而使用SetTransObject()函数时,用户必须首先把所用的事务对象连接到数据库上。但是,这并不意味着SetTrans()函数比SetTransObject()函数更好,使用SetTrans()函数时,每调用一次函数必须连接一次数据库,因为这个函数在每个事务处理的末端都会执行Disconnect语句。与此相反,使用SetTransObject()函数可以为数据库维持一个开放性的连接。因此在一般情况下,为了提高效率,总是采用SetTransObject()函数。 这两个函数都是成功时返回1,发生错误时返回-1。 二、检索数据 用于检索数据的函数只有一个,就是Retrieve()函数。 语法格式: dw_control.Retrieve() 如果数据窗口控件上的数据窗口对象是有检索参数的,就要在这个函数调用时加上检索参数。而且检索参数必须和数据窗口对象中定义顺序一致。 此函数返回一个长整型的数据,代表检索出来的数据行数。如果发生错误,将返回-1。 三、更新数据 当用户对数据窗口对象内的数据修改后,想把这些修改反映到数据库中去时,必须使用Update()函数。 语法格式: dw_control.Update() 这个更新可能成功,也可能失败。一般在这个函数被调用之后,总是要做一个检查。请看下面的例子: Int li_return

PB动态数据窗口

[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属性来实现。在修改了这一特性之后,数据窗口控件就不再具有与它相关的事务处理对象了,应该再重新为数据窗口设置事务

pb中数据窗口函数总结

pb中数据窗口函数总结 一、连接数据库 连接数据库也就是指定事务对象。PowerBuilder提供了两个函数:SetTrans()和SetTransObject()。 语法格式: dw_control.SetTrans(TransactionObject) dw_control.SetTransObject(TransactionObject) 其中,dw_control是所使用的数据窗口控件,transactionObject是所要指定的事务对象。 这两个函数有一个重要的区别就是在使用SetTrans()函数时,用户不需做任何数据初始化或事务对象初始化工作。用户只需要在这里填充一个事务对象,PB就会自动完成对该事物对象的初始化以及和数据库连接的工作。而使用SetTransObject()函数时,用户必须首先把所用的事务对象连接到数据库上。但是,这并不意味着SetTrans()函数比SetTransObject()函数更好,使用SetTrans()函数时,每调用一次函数必须连接一次数据库,因为这个函数在每个事务处理的末端都会执行Disconnect语句。与此相反,使用SetTransObject()函数可以为数据库维持一个开放性的连接。因此在一般情况下,为了提高效率,总是采用SetTransObject()函数。 这两个函数都是成功时返回1,发生错误时返回-1。 二、检索数据 用于检索数据的函数只有一个,就是Retrieve()函数。 语法格式: dw_control.Retrieve() 如果数据窗口控件上的数据窗口对象是有检索参数的,就要在这个函数调用时加上检索参数。而且检索参数必须和数据窗口对象中定义顺序一致。 此函数返回一个长整型的数据,代表检索出来的数据行数。如果发生错误,将返回-1。 三、更新数据 当用户对数据窗口对象内的数据修改后,想把这些修改反映到数据库中去时,必须使用Update()函数。 语法格式: dw_control.Update() 这个更新可能成功,也可能失败。一般在这个函数被调用之后,总是要做一个检查。请看下面的例子: Int li_return li_return = dw_1.Update() IF li_return = 1 THEN

PB中下拉数据窗口带参数应用

PB中下拉数据窗口带参数应用 在数据输入时,当用到下拉列表时,会发现有些数据是和别的数据相关的,这时我们会希望过滤掉那些不相关的数据。例如生成一个入库单,某种物料有多个供应商,我们要根据物料来过滤掉和这个物料不相关的供应商,这样会加快检索和输入的速度。 入库单表:billrec

1.以supply表,制作一个带参数的数据窗口,命名为d_supply_replace_list,参数列为item_id,字符型,隐藏物料代码列。 2.以billrec表,制作一个数据窗口,命名为billrec_maintain,将supply_id列的edit属性中的style type选定为DropDownDW,datawindow为d_supply_replace_list。 在窗口中放置数据窗口控件dw_1,将其与billrec_maintain数据窗口关联。 在窗口中定义实例变量datawindowchild idwc_child。 3.在dw_1的constructor事件中编写以下脚本: this.getchild("supply_id",idwc_child) //生成子数据窗口,supply_id为下拉列表列idwc_child.insertrow(0) idwc_child.settransobject(SQLCA) this.of_settransobject(SQLCA) this.insertrow(0) 4.在dw_1的itemchanged事件中编写以下脚本: long ll_getcolumn ll_getcolumn = this.getcolumn() //获得当前列 choose case ll_getcolumn case 7 //假设item_id列是第7列 dw_1.accepttext() is_id = dw_1.getitemstring(row,7) //获得物料代码 idwc_child.retrieve(is_id) //检索替代供应商 end choose 这样在输入不同的物料时,会像下图那样,只列出相关的供应商。

pb数据窗口技巧38个 收藏

pb数据窗口技巧38个收藏 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按钮, 保存所做的修改.

PB 数据窗口高级( DataWindow)应用37个技巧

PB 数据窗口高级( DataWindow) 37个技巧 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中定义大于零的值就有定时器(可以精确到毫秒),有了这个定时器就可以实现动画了。比如要改变某字段的背景颜色,可设 ackgound.color=RGB(Integer(Right(string(now(),'hhmmssf'),1))*256/10,In teger(Right(string(now(),'hhmmssf'),1))*256/10,0) 当然,您不仅可以改变背景颜色,而且可以改变字体等等任何属

PB数据窗口使用绝对技巧与方法

原文地址:PB数据窗口绝对技巧作者:千人急 1、如何让存储文件目录的列,显示图片? 答:选择对应的column的display as picture属性为true 2、如何复制grid类型的所选择的行的数据到系统剪切板? 答:string ls_selected ls_selected=dw_1.Object.DataWindow.Selected.Data clipbord(ls_selected) 4、如何设置的DW底色? 在DW的editsource中改变color的值 5、如何将Grid风格改成自由格式? 在DW的editsource中将processing=1的1改为0 6、要新建一个表A但风格和现有表格B风格一样,怎么将A表快速设置成表B 风格? 复制B表C,在C表的DW中的editsource中将表名和字段名改成A表的,即可 7、如何实现gird风格的datawindow的多栏表头? 答:添加 text到header带区,并设置band属性为foreground保存,edit source 修改text的x和width属性表达式如下: x="100~t integer(describe('firstcol.x')" width="100~tinteger(describe('lastcol.x')) - integer(describe('firstcol.x')) +integer(describe('lastcol.width')) 8、如何过滤dddw编辑风格的显示值为指定值的记录? 答: dw_1.setfilter("lookupdisplay('column_name')='"+ls_display_value_your +"'") dw_1.filter() 9、如何设置datawindow的某一列为空?

Pb常用概念与术语及script编程规范

Pb常用概念与术语及script编程规范 1.dbms 数据库管理系统的缩写,它是可以提供数据库管理功能的软件2.Profile 保存在pb初始化文件中的命名的参数的集合,它定义一个指向数据库的连接 3.Data Source 数据源,pb有五种数据源:QUICK SELECT,SQL SELECT,QUERY,EXTERNAL和STRORE PROCEDURE 4.ODBC 开放数据库连接的缩写,是微软提供的访问数据库的接口标准. 通过ODBC接口,PB可以连接到大部分DBMS 5.MTS MTS是微软事物服务器的缩写,它是基于一个组件的事物处理系统,支持开放.发行和管理基于组件的应用 https://www.360docs.net/doc/e710079899.html,PONENT 组件是在JAGUAR中或MTS中的一个包含业务逻辑的可重用模块.用户对象可以作为组件发行到中间层的JAGUAR或MTS服务器中. 7.LIBRARY 库,存储PB对象的文件,它的扩展名是.PBL 8.PAINTER

画笔,创建和编辑PB对象的编辑器,或是管理数据或库的工具9.APPLICATION OBJECT 应用对象是一个应用系统的入口点,它定义乐系统的一些应用级行为 10.SCRIPT 脚本是响应特定事件的一段语句的集合.在PB中编写脚本执行POWERSCRIPT语言 11.PRIMARY KEY 主健,唯一标识表中每一条记录的一个或多个列. https://www.360docs.net/doc/e710079899.html,EROBJECT 用户对象,用户自定义的用于完成某项处理的.可重复使用的对象 13.FOREIGN KEY 外部键,是一种约束,要求构成外部键的一个或多个列的值必须对应主健表中的一个值 14.EVENT 事件,一个发生在对象或控制中的动作,可以触发一段脚本程序的执行. 15.FUNCTION 函数,执行特定处理的例程,在面对对象编程中,也称方法. 16.POLYMORPHISM 多态,同一个对象中的两个或多个名字相同,参数列表不同的

PB数据窗口绝对技巧

PB数据窗口绝对技巧 1、如何让存储文件目录的列,显示图片? 选择对应的column的display as picture属性为true。 2、如何复制grid类型的所选择的行的数据到系统剪切板? string ls_selected ls_selected=dw_1.Object.DataWindow.Selected.Data clipbord(ls_selected) 3:如何改变GRID数据窗口列位置(新手常见) 先preview,然后在预览窗口拖动位置即可。 4、如何设置DW的底色? 在DW的editsource中改变color的值。 5、如何将Grid风格改成自由格式? 在DW的editsource中将processing=1的1改为0。 6、要新建一个表A但风格和现有表B风格一样,怎么将A表快速设置成表B风格? 复制B表C,在C表的DW中的editsource中将表名和字段名改成A表的,即可。 7、如何实现gird风格的datawindow的多栏表头? 添加text到header带区,并设置band属性为foreground保存,edit source修改tex t的x和width属性表达式如下: x="100~t integer(describe('firstcol.x')" width="100~tinteger(describe('lastcol.x')) - int eger(describe('firstcol.x')) +integer(describe('lastcol.width')) 8、如何过滤dddw编辑风格的显示值为指定值的记录? dw_1.setfilter("lookupdisplay('column_name')='"+ls_display_value_your+"'") dw_1.filter() 9、如何设置datawindow的某一列为空? string ls_temp[] setnull(ls_temp) dw_1.object.columnname.primary.current=ls_temp 10、如何设置datawindow的单双行不同颜色间隔? 在detail带区的color属性表达式中写上if(mod (getrow(),2)=1 ,rgb(255,0,0),rgb(0,25 5,0)),如果是当前行以第三种颜色表示,表达式如下:if(getrow()=current(), rgb(255,0,0),if(m od(getrow(),2)=1 ,rgb(0,0,255),rgb(0,255,0))) 11、如何获取指定名称的datawindowobject? DWObject ldwo_use,ldwo_abc ldwo_use = dw_1.Object ldwo_abc = ldwo_use._ _get_attribute("t_1",FALSE)//t_1为datawindow中text对象的名称 12、如何缩放datawindow的打印大小?

PB 基本语句 循环语句

PB 基本语句循环语句 PB 基本语句 一、赋值语句 赋值语句用于给变量、对象属性赋值,这是应用程序中使用最频繁的语句,其语法格式为:variablename = expression 其中:⑴variablename是变量名或对象属性; ⑵expression是表达式,其数据类型应该与variablename的数据类型兼容。 下面是赋值语句的几个简单示例: Address = "北京" TaxRate = .05 Age = 30 mle.text="北京欢迎你" PowerScript的赋值语句不支持多重赋值,也就是说,一条赋值语句只对一个变量赋值,不能同时对多个变量赋值。 下面的语句:A=B=0 在有些编程语言中同时把A和B均赋值0,但PowerScript中,该语句等价于: A=(B=0) 其意义为,检查B等于0是否成立,成立时将TRUE赋给变量A,否则把FALSE赋给变量A。如果A不是Boolean类型的变量,则上述语句将引起编译错误。 二、条件语句 IF语句有两种形式,下面我们按照从简单到复杂的次序逐一介绍。 1. 单行IF ... THEN语句 单行IF ... THEN语句的格式为: IF逻辑表达式THEN语句1 [ELSE语句2] 单行IF ... THEN语句书写时整条语句写在一行上,当逻辑表达式的结果为True时执行语句1,否则执行语句2(如果有该子句的话)。 例如:IF sle_State.text="BJ" THEN MessageBox("欢迎","北京") 2.多行IF ... THEN语句 多行IF ... THEN语句的语法格式为: IF 逻辑表达式1 THEN 语句1 [ ELSEIF 逻辑表达式2 THEN 语句2 . . . ] [ ELSE 语句n] END IF 本语句的执行过程为:计算逻辑表达式1,如果其结果为True,则执行语句1,然后离开整个IF语句;否则计算逻辑表达式2,如果其结果为True,则执行语句2,然后离开整个IF语句;... 如果逻辑表达式的结果都是False,且存在ELSE子句,则执行语句3。 例1:从单行编辑框中输入考分,按“输入”按钮再根据考分显示及格或不及格。 Integer s s = integer(sle_1.text) //sle_1 text单行编辑框文本 If s < 60 then St_1.text = “不及格”// St_1.text静态编辑框文本

PB得到首拼音码函数无错码

//得到首拼音码函数 //把这段代码加入到函数地f_get_py(string as_InputString) char lc_FirstLetter[23] string ls_ch string ls_SecondSecTable string ls_ReturnStr integer li_SecPosValue[23] integer i , j integer li_SectorCode integer li_PositionCode integer li_SecPosCode integer li_offset //Set initial value li_SecPosValue[]={1601,1637,1833,2078,2274,2302,2433,2594,2787,3106,3212,3472,3635,3722,3 730,3858,4027,4086,4390,4558,4684,4925,5249 } lc_FirstLetter[] = { "A ", "B ", "C ", "D ", "E ", "F ", "G ", "H ", "J ", "K ", "L ", "M ", "N ", "O ", "P ", "Q ", "R ", "S ", "T ", "W ", "X ", "Y ", "Z "} ls_SecondSecTable= "CJWGNSPGCGNE[Y[BTYYZDXYKYGT[JNNJQMBSGZSCYJSYY[PGKBZGY[YWJKGKLJYWKPJQHY[W[DZL SGMRYPYWWCCKZNKYYGTTNJJNYKKZYTCJNMCYLQLYPYQFQRPZSLWBTGKJFYXJWZLTBNCXJJJJTXD TTSQZYCDXXHGCK[PHFFSS[YBGXLPPBYLL[HLXS[ZM[JHSOJNGHDZQYKLGJHSGQZHXQGKEZZWYSCS CJXYEYXADZPMDSSMZJZQJYZC[J[WQJBYZPXGZNZCPWHKXHQKMWFBPBYDTJZZKQHYLYGXFPTYJYY ZPSZLFCHMQSHGMXXSXJ[[DCSBBQBEFSJYHXWGZKPYLQBGLDLCCTNMAYDDKSSNGYCSGXLYZAYBN PTSDKDYLHGYMYLCXPY[JNDQJWXQXFYYFJLEJPZRXCCQWQQSBNKYMGPLBMJRQCFLNYMYQMSQY RBCJTHZTQFRXQHXMJJCJLXQGJMSHZKBSWYEMYLTXFSYDSWLYCJQXSJNQBSCTYHBFTDCYZDJWYG HQFRXWCKQKXEBPTLPXJZSRMEBWHJLBJSLYYSMDXLCLQKXLHXJRZJMFQHXHWYWSBHTRXXGLHQ HFNM[YKLDYXZPYLGG[MTCFPAJJZYLJTYANJGBJPLQGDZYQYAXBKYSECJSZNSLYZHSXLZCGHPXZHZNY TDSBCJKDLZAYFMYDLEBBGQYZKXGLDNDNYSKJSHDLYXBCGHXYPKDJMMZNGMMCLGWZSZXZJFZN MLZZTHCSYDBDLLSCDDNLKJYKJSYCJLKWHQASDKNHCSGANHDAASHTCPLCPQYBSDMPJLPZJOQLCD HJJYSPRCHN[NNLHLYYQYHWZPTCZGWWMZFFJQQQQYXACLBHKDJXDGMMYDJXZLLSYGXGKJRYWZ WYCLZMSSJZLDBYD[FCXYHLXCHYZJQ[[QAGMNYXPFRKSSBJLYXYSYGLNSCMHZWWMNZJJLXXHCHS Y[[TTXRYCYXBYHCSMXJSZNPWGPXXTAYBGAJCXLY[DCCWZOCWKCCSBNHCPDYZNFCYYTYCKXKYBS QKKYTQQXFCWCHCYKELZQBSQYJQCCLMTHSYWHMKTLKJLYCXWHEQQHTQH[PQ[QSCFYMNDMGB WHWLGSLLYSDLMLXPTHMJHWLJZYHZJXHTXJLHXRSWLWZJCBXMHZQXSDZPMGFCSGLSXYMJSHXPJ XWMYQKSMYPLRTHBXFTPMHYXLCHLHLZYLXGSSSSTCLSLDCLRPBHZHXYYFHB[GDMYCNQQWLQHJJ [YWJZYEJJDHPBLQXTQKWHLCHQXAGTLXLJXMSL[HTZKZJECXJCJNMFBY[SFYWYBJZGNYSDZSQYRSLJ PCLPWXSDWEJBJCBCNAYTWGMPAPCLYQPCLZXSBNMSGGFNZJJBZSFZYNDXHPLQKZCZWALSBCCJX[ YZGWKYPSGXFZFCDKHJGXDLQFSGDSLQWZKXTMHSBGZMJZRGLYJBPMLMSXLZJQQHZYJCZYDJWB MYKLDDPMJEGXYHYLXHLQYQHKYCWCJMYYXNATJHYCCXZPCQLBZWWYTWBQCMLPMYRJCCCXFPZ NZZLJPLXXYZTZLGDLDCKLYRZZGQTGJHHGJLJAXFGFJZSLCFDQZLCLGJDJCSNZLLJPJQDCCLCJXMYZFTS XGCGSBRZXJQQCTZHGYQTJQQLZXJYLYLBCYAMCSTYLPDJBYREGKLZYZHLYSZQLZNWCZCLLWJQJJJKD GJZOLBBZPPGLGHTGZXYGHZMYCNQSYCYHBHGXKAMTXYXNBSKYZZGJZLQJDFCJXDYGJQJJPMGWG JJJPKQSBGBMMCJSSCLPQPDXCDYYKY[CJDDYYGYWRHJRTGZNYQLDKLJSZZGZQZJGDYKSHPZMTLCP

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:计算字段数据的最小值。 数据类型转换与检查函数 数据类型转换与检查函数用于定义数据窗口的过滤条件、有效性检查和数据类型转换,数据类型转换与检查函数的功能如下:

PB]-子数据窗口操作

PB]-子数据窗口操作 PB]-子数据窗口 **通常的子数据窗口也就是下拉数据窗口。子数据窗口也是普通的数据窗口对象,没有什么特殊的地方,它的创建方法、可以使用的控件、编程时可以使用的函数等,都和普通的数据窗口相同。特殊的地方只是因为它放在了父数据窗口中,需要和父窗口进行配合。 **当为数据窗口中某字段指定为下拉数据窗口编辑风格时,必须提供以下三个属性: a)子数据窗口名称。 b)显示字段名称:该字段中的内容显示在父数据窗口的字段上,只是显示。 c)数据字段名称:该字段中的内容要赋给父数据窗口的字段,要保存到数据库中。 分别对应数据窗口画板的Edit属性页中的:Eidt Style、Display Column、Data Column。 *子数据窗口不能再包含子数据窗口;父数据窗口可以对其包含的子数据窗口进行插入、删除、检索和保存等操作。 **获取子数据窗口的引用是进行其他操作的前提,使用函数GetChild来获取指定字段的子数据窗口。该函数的语法如下: dw_1.GetChild(name,dwchildvariable) 其中,dw_1.是数据窗口控件名称;name为字段名称,为string类型;dwchildvariable为datawindowchild 类型变量,该变量在函数正确执行后保存对子数据窗口的引用。该函数正确执行则返回1,否则返回-1。在获取了子数据窗口的引用之后,就可以捡索子数据窗口中的数据了。但是,检索子数据窗口的情况比较多,并且也有多种方法。 **保证子数据窗口中的数据更新 用户使用下拉数据窗口录入数据时,其中的数据并不一定有用户需要的。在某些情况下不允许用户再输入其他值,否则可能造成数据的不一致性,这时就可以不再编写其他的脚本。但在允许用户录入时,就需要把用户录入的数据保存在子数据窗口对应的数据表中,以便以后数据录入时不再重复输入该数据。这时就应该编写脚本保存该数据了。 **检索子数据窗口 在应用中,对子数据窗口的编程不是检索数据,就是更新其中的数据。检索数据时,如果只显示子数据窗口中同父数据窗口中某字段取值对应的数据,这时子数据窗口的定义就应该有检索参数。根据检索和更新数据这两个因素,可以将检索数据的情况划分成以下三种: a)没有条件限制,并且不允许更新。 b)没有条件限制,并且允许更新。 c)有条件限制,不管是否可以更新。

PB中的时间日期函数

常用的PB时间函数汇总收藏 Day() 功能得到日期型数据中的号数(1到31之间的整数值)。 语法Day ( date ) 参数date:要得到号数的日期值返回值 Integer。函数执行成功时返回号数(1到31之间的整数值)。如果date参数的值为NULL,则Day()函数返回NULL。 -------------------------------------------------------------------------------- DayName() 功能得到指定日期是一周中的星期几(例如,Sunday, Monday...)。 语法DayName ( date ) 参数date:date类型值或变量返回值String。函数执行成功时返回指定日期的星期表示(例如,Sunday, Monday...)。如果date参数的值为NULL,则DayName()函数返回NULL。 -------------------------------------------------------------------------------- DayNumber() 功能得到日期型数据是一星期中的第几天(用1到7之间的整数表示,星期天为1,星期一为2,...)。 语法DayNumber ( date ) 参数date:date类型值或变量返回值Integer。函数执行成功时返回指定日期是一星期中的第几天(用1~7表示,星期天为1,星期一为2,...)。如果date 参数的值为NULL,则DayNumber()函数返回NULL。 -------------------------------------------------------------------------------- DaysAfter() 功能得到两个日期间的天数。 语法DaysAfter ( date1, date2 ) 参数date1:date类型,指定起始日期date2:date类型,指定终止日期返回值Long。函数执行成功时得到两个日期之间的天数。如果date2的日期在date1的前面,那么DaysAfter()函数返回负值。如果任何参数的值为NULL,则DaysAfter()函数返回NULL。 -------------------------------------------------------------------------------- Hour() 功能得到时间值中的小时,采用24小时制。 语法Hour ( time ) 参数time:time类型的值返回值Integer。函数执行成功时得到time参数中的小时(00到23之间)。如果time参数的值为NULL,则Hour()函数返回NULL。---------------------------------------------------------------------

PB源码大全

getfirstletter.zip 5K 取汉字拼音的首字母 ctrl_alt_del.zip 5K 关掉ctrl_alt_del热键 multithread.zip 8K 多线程实现的例程 wallpaper.zip 10K 显示图片的例程 w_test.srw 4K 如何使用COM对象:WORD EXCEL errortrap.zip 19K 错误陷阱模块,错误信息可以是中文的了 taskbar5.zip 10K 把PB程序加入到系统任务栏(WIN95/97/98系统) exfuns.zip 23K 常用的外部动态链接库函数 alltext45.zip 3419K 现RichText,功能更强大,中文不会出现问题。(但不能象PB自带的RichText可以和DataWindow紧密结合) closeapp.zip 5K 关闭程序 context.zip 14K 实现Win95风格的上下文帮助,原来只有VB才有此功能,请看PB如何实现,帅呆了! multi.zip 41K sybase提供一个关于在在PB中实现多线程的例子。使用SharedObjectRegister,SharedObjectGet函数实现。 mdigraph_v2.zip 97K 允许在MDI主窗口显示图形,加强程序视觉效果。解决了当其它应用覆盖MDI窗口会出现图片被盖住的部分不能刷新。例如切换输入法就会出现上述问题。numerical.zip 14K 一个用户对象用于实现十进制,二进制,十六进制之间的互相转换,已经写了一个简单的例程.调用很方便.使用PFC的用户只需简单的将n_cst_numerical替换为本程序中的对象即可. pbfix.zip 17383K PB 6.5.1中对以前PB版本进行修正过的错误列表。 pfc.txt 34K PFC入门的中文介绍,PFC是PowerBuilder开发组为PB开发的框架包,结构严谨,功能强大,为PB专业开发人员的首选。需要深入全面学习还需仔细阅读Online Book。虽然是英文的,但是目前介绍最全面的书籍。另外《PowerBuilder 6.0程序设计大全》也有一章是中文入门介绍。 wangsamp.zip 8K 一个使用Windows自带的扫描仪控件的例子,用VB编写的,可以用到PB 中.是微软自Windows97开始附加的一个kodak提供的ImagingControls.并且还带有在线帮助.在windows 97中有它的1.0版本,windows 98是2.1版本.并且在Win97中带有VB制作的例子,只要安装Win97就有,它的存放路径是windows\wangsamp(使用win97朋友不用下载了).此控件有四组功能,分别为:(控件的详细使用方法可以看 windows\help\wangocxd.hlp) kodak 图像编辑控件(ImgEdit.ocx)kodak 图像管理控件(ImgAdmin.ocx)kodak 图像扫描控件(ImgScan.ocx)kodak 图像缩略图控件(ImgThumb.ocx). account.zip 2296K 一个财务系统源代码 pb65ckb2.zip 2004K pb65汉化核心模块 PB701Maint.zip 19144K pb7.1patch pb6v11.zip 73K 例程 query.zip 11K 有一些朋友提出对于记录个数很多的表进行查询的问题,得到的大多数解答是限制返回的结果集大小,例如SQL Server 7.0中可以通过Select Top N..... (N表示返回的记录数),而周游第二天就写了一个例程来说明查询大结果集的问题。采用的方法是使用ID字段,定义游标,能过循环读取并放入到Datawindow中,大家可以下载看看,(注意下载后不要直接运行,要改动Application Open事件中的代码,以便联接到自己所用的数据库)。此例程还可以进一步改进,因为通过游标读取效率不高,需要多次与后台数据库通讯。可以改用Datawindow使用Retrieve来实现,在Where条件中可以加上对于ID的辨断。这两种方法可以反复试验,希望能对大家有所帮助。 fxgold.zip 4197K 是实现多媒体功能的控件,是罕有能兼容PB的多媒体设计控件,带有几十个VB例子.可以改为在PB使用. taskbar.zip 10K 增加了一个PB程序驻留在System Tray区的例子(Win95/98右下角),已经封装成了用户对象,随意挂接,超级好用。(编译成exe后将显示正确图标) pb5zlib.zip 74K 一个简单的压缩/解压缩程序,附有PB例子,可以应付一般的用途。ChgPrn.zip 3K 使用注册表和win.ini文件动态改变当前默认打印机,调用方便,调用完成后自动恢复系统默认打印机,你可以使用此对象在程序中控制,当前打印输出到本地打印机或网络打印机,如果需要更多功能应该使用PowerPrint DLL。 trigger.txt 2K 关于触发器的使用

相关文档
最新文档