当前位置:文档之家› PB常用方法

PB常用方法

PB常用方法
PB常用方法

PB数据窗口datawindow技术更新时间:2014-2-1 17:17:10pb数据窗口datawindow常用技巧1、如何让存储文件目录的列,显示图片?答:选择对应的column的display as picture属性为true2、如何复制grid类型的所选择的行的数据到系统剪切板?答:string ls_selectedls_selected=dw_1.object.datawindow.selected.dataclipbord(ls_selected)3、如何复制graph风格的datawindow中的图形到剪切板?答:dw_1.clipbord("gr_1")4、如何设置的dw底色?在dw的editsource中改变color的值5、如何将grid风格改成自由格式?在dw 的editsource中将processing=1的1改为06、要新建一个表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(describ

e('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_temp10、如何设置datawindow的单双行不同颜色间隔?答:在detail带区的color属性表达式中写上if(mod(getrow(),2)=1 ,rgb(255,0,0),rgb(0,255,0)),如果是当前行以第三种颜色表示,表达式如下:if(getrow()=current(),rgb(255,0,0),if(mod(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的查询模式?答:dw_1.object.datawindow.querymode='yes'将datawindow改变为查询模式后,接收用户的输入,再使用一下代码获取结果:dw_1.accepttext()dw_1.retrieve()13、如何缩放datawindow的打印大小?答:dw_1.object.datawindow.zoom=150 or dw_1.object.datawindow.zoom=7514、如何在已过滤后的数据基础上对datawindow进行过滤?答:dw_1.setfilter(dw_1.describe("datawindow.table.filter")+your_join+your_new_filter)dw_1.filter() 15、如何在datawindow中显示动态时间?答:建立一个计算域,表达式为string(datetime(today(),now()),'yyyy年mm月dd日 hh点mm分ss秒'),同时设置datawindow 的属性dw_1.object.datawindow.timer_interval=50016、如何让带用title bar的datawindow控件的标题栏诚活动窗口的颜色?答:外部函数定义:funcation logn setactivewindow(long hwnd ) library "user32.dll"datawindow常用技巧2008年01月17日星期四 11:171、如何让存储文件目录的列,显示图片?答:选择对应的column的display as picture属性为true2、如何复制grid类型的所选择的行的数据到系统剪切板?答:string ls_selectedls_selected=dw_1.object.datawindow.selected.dataclipbord(ls_selected)3、如何复制graph风格的datawindow中的图形到剪切板?答:dw_1.clipbord("gr_1")4、如何设置的dw底色?在dw的editsource中改变color的值5、如何将grid风格改成自由格式?在dw 的editsource中将processing=1的1改为06、要新建一个表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(describ

e('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_temp10、如何设置datawindow的单双行不同颜色间隔?答:在detail带区的color属性表达式中写上if(mod(getrow(),2)=1 ,rgb(255,0,0),rgb(0,255,0)),如果是当前行以第三种颜色表示,表达式如下:if(getrow()=current(),rgb(255,0,0),if(mod(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的查询模式?答:dw_1.object.datawindow.querymode='yes'将datawindow改变为查询模式后,接收用户的输入,再使用一下代码获取结果:dw_1.accepttext()dw_1.retrieve()13、如何缩放datawindow的打印大小?答:dw_1.object.datawindow.zoom=150 or dw_1.object.datawindow.zoom=7514、如何在已过滤后的数据基础上对datawindow进行过滤?答:dw_1.setfilter(dw_1.describe("datawindow.table.filter")+your_join+your_new_filter)dw_1.filter() 15、如何在datawindow中显示动态时间?答:建立一个计算域,表达式为string(datetime(today(),now()),'yyyy年mm月dd日 hh点mm分ss秒'),同时设置datawindow 的属性dw_1.object.datawindow.timer_interval=50016、如何让带用title bar的datawindow控件的标题栏诚活动窗口的颜色?答:外部函数定义:funcation logn setactivewindow(long hwnd ) library "user32.dll"datawindow常用技巧2008年01月17日星期四 11:171、如何让存储文件目录的列,显示图片?答:选择对应的column的display as picture属性为true2、如何复制grid类型的所选择的行的数据到系统剪切板?答:string ls_selectedls_selected=dw_1.object.datawindow.selected.dataclipbord(ls_selected)3、如何复制graph风格的datawindow中的图形到剪切板?答:dw_1.clipbord("gr_1")4、如何设置的dw底色?在dw的editsource中改变color的值5、如何将grid风格改成自由格式?在dw 的editsource中将processing=1的1改为06、要新建一个表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(describ

e('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_temp10、如何设置datawindow的单双行不同颜色间隔?答:在detail带区的color属性表达式中写上if(mod(getrow(),2)=1 ,rgb(255,0,0),rgb(0,255,0)),如果是当前行以第三种颜色表示,表达式如下:if(getrow()=current(),rgb(255,0,0),if(mod(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的查询模式?答:dw_1.object.datawindow.querymode='yes'将datawindow改变为查询模式后,接收用户的输入,

再使用一下代码获取结果:dw_1.accepttext()dw_1.retrieve()13、如何缩放datawindow的打印大小?答:dw_1.object.datawindow.zoom=150 or dw_1.object.datawindow.zoom=7514、如何在已过滤后的数据基础上对datawindow进行过滤?答:dw_1.setfilter(dw_1.describe("datawindow.table.filter")+your_join+your_new_filter)dw_1.filter() 15、如何在datawindow中显示动态时间?答:建立一个计算域,表达式为string(datetime(today(),now()),'yyyy年mm月dd日 hh点mm分ss秒'),同时设置datawindow 的属性dw_1.object.datawindow.timer_interval=50016、如何让带用title bar的datawindow控件的标题栏诚活动窗口的颜色?答:外部函数定义:funcation logn setactivewindow(long hwnd ) library "user32.dll"word文档答:给你两个函数: 1、辅助函数 $pbexportheader$f_cncharnum.srf $pbexportcomments$得到字符串中汉字或者双字节的个数 global type f_cncharnum from function_object end type forward prototypes global function in teger f_cncharnum (string astring) end prototypes global function integer f_cncharnum (string ast ring); //函数名: f_cncharnum //用途: 返回一个字符串中汉字的个数 //输入: astring - string, 给定的字符串 //返回值: li_num - integer, 给定的字符串中汉字的个数 //注意: 1. 此方法基于汉字的国标汉字库区位编码的有效性,不符合此编码的系统此函数无效! // 2. 若汉字串含有非汉字字符,如图形符号或ascii码,则这些非汉字字符将保持不变. //例如: li_ret = f_cncharnum("摆渡人ferryman") li_ret = 3 string ls_ch //临时单元 string ls_secondsectable //存放所有国标二级汉字读音 integer li_num = 0 //返回值 integer i,j for i = 1 to len(astring) ls_ch = mid(astring,i,1) if asc(ls_ch) >= 128 then //是汉字 li_num++ i = i+1 end if next return li_num end function --------------------------------------------------------------- 2、转到word $pbexportheader$f_outputtoword_new.srf global type f_outputtoword_new from function _object end type forward prototypes global function integer f_outputtoword_new (datawindow adw) end prototypes global function integer f_outputtoword_new (datawindow adw); //函数名:f_outputtoword_new //输入: adw - datawindow,指定的数据窗口 //返回值: integer constant integer pplayoutblank = 12 oleobject ole_object ole_object = create oleobjec t integer li_ret li_ret = ole_object.connecttoobject("","word.application") if li_ret <> 0 then //如果word还没有打开,则新建。 li_ret = ole_object.connecttonewobject("word.application") if li_ret <> 0 then messagebox(' ole错误','ole无法连接!错误号:' + string(li_ret)) return 0 end if ole_object.visible = true end if long ll_colnum,ll_rownum constan t long wdword9tablebehavior = 1 constant long wdautofitfixed = 0 constant long wdcell = 12 strin g ls_value pointer oldpointer oldpointer = setpointer(hourglass!) string ls_objects,ls_obj,ls_objs[], ls_objtag[] long ll_pos,ll_len,ll_num = 0 ls_objects = trim(adw.describe('datawindow.objects')) do while (pos(ls_objects,"~t") > 0) ll_pos = pos(ls_objects,"~t") ll_len = ll_pos - 1 ls_obj = left(ls_obje cts,ll_len) if (adw.describe(ls_obj + '.type') = 'column' or & adw.describe(ls_obj + '.type') = 'compu te') and & (adw.describe(ls_obj + '.band') = 'detail') and (ls_obj <> "asd") then ll_num += 1 ls_objs [ll_num] = ls_obj ls_objtag[ll_num] = adw.describe(ls_obj + '.tag') end if ls_objects = right(ls_obje cts,len(ls_objects) - ll_pos) loop //得到数据窗口数据的列数与行数(行数应该是数据行数 + 1) ll_colnum = ll_num ll_rownum = adw.rowcount() + 1 ole_object.documents.add() ole_o bject.activedocument.tables.add(ole_object.selection.range, ll_rownum, ll_colnum) string ls_coln ame integer i,j,k for i = 1 to ll_colnum //得到标题头的名字 ls_value = ls_objtag[i] ole_object.selection.typetext(ls_value) for k = 1 to f_cncharnum(ls_valu

e) ole_object.selection.typebackspace() next ole_object.selection.moveright(wdcell) next adw.set redraw(false) ole_object.selection.moveleft(wdcell) string column_name for i = 2 to ll_rownum fo r j = 1 to ll_colnum column_name = ls_objs[j] if adw.describe(column_name + '.type') = 'column' t hen ls_value = adw.describe("evaluate('lookupdisplay("+column_name+")',"+string(i - 1)+")") end if if adw.describe(column_name + '.type') = 'compute' then ls_value = adw.describe("evaluate('" + adw.describe(column_name + '.expression') + "',"+string(i - 1)+")") end if ole_object.selection.mo veright(wdcell) ole_object.selection.typetext(ls_value) //for k = 1 to f_cncharnum(ls_value) //ole _object.selection.typebackspace() //next next next adw.setredraw(true) constant long wdformat document = 0 setpointer(oldpointer) //保存新建的文档 if messagebox("保存","文档已经成功完成,是否保存?",question!,yesno!) = 1 then string docname, named integer value value = getfilesavename("选择文件",docname, named, "doc","doc files (*.doc), *.doc") if value = 1 then ole_object.activedocument. saveas(docname, 0,false,"",true,"",false,false,false, false,false) end if end if //断开ole连接 ole_object.disconnectobject() destroy ole_object return 1 end function38、字段如何自动换行的同时且自动高度?答:将数据窗口中相应列的auto horz scroll 为不选中,选中autosize height 将detail的autosize height选中。在数据窗口retrieve 后调用下面函数即可 uf_set_text(datawindow adw_content,string as_columns,boolean,ab_ignoreblank) /******** ***************************************************** describe: 在数据窗口adw_content中,在as_columns中包含的列中插入空格 args: as_columns 要操作的多个列,列间用逗号隔开 *************************************************************/ if (not isvalid(adw _content)) or isnull(as_columns) or len(as_columns)<1 or isnull(ab_ignoreblank) then return -1 n _cst_string lnv_string string ls_column[] , ls_width ,as_source,as_replaced ,ls_temp int li_upperb ound , li_width , li_column , li_fontwidth, li_counter long ll_rowcount , ll_row , ll_totalstep int li_y ield lnv_string.of_parsetoarray(as_columns,',',ls_column) li_upperbound = upperbound(ls_colum n) ll_rowcount = adw_content.rowcount() if li_upperbound<1 or ll_rowcount<1 then return -1 op enwithparm(w_waiting,this) ib_cancel = false iw_frame.enabled = false ll_totalstep = ll_rowcount * li_upperbound w_waiting.uf_register(ll_totalstep) for li_column = 1 to li_upperbound ls_width = adw_content.describe(ls_column[li_column]+".width") li_width = integer(ls_width) if ls_width=' !' or ls_width='?' or li_width=0 then continue end if //ls_temp = adw_content.describe(ls_column [li_column]+".font.property { = 'width' }") //messagebox(ls_column[li_column]+".font.property { = 'width' }",ls_temp) //return 1 li_fontwidth = 27 li_counter = li_width / li_fontwidth for ll_row=1 to ll_rowcount if ib_cancel then iw_frame.enabled = true return 0 //pressed cancel button end if as_source = adw_content.getitemstring(ll_row,ls_column[li_column]) as_replaced = uf_insertstri ng(as_source,li_counter,' ',false) if as_replaced<>as_source then adw_content.setitem(ll_row,ls_c olumn[li_column],as_replaced) end if w_waiting.uf_stepit() next next close(w_waiting) iw_frame. enabled = true return 139、如何动态外部创建数据窗口?答:首先制作一个自己想动态得到的数据窗口,然后将该数据窗口导出,看看语法,这样你就了解了这种数据窗口的生成语法了! --------------------------------------------------------------- dw_1.create() 可以参考帮助以及 srd文件(数据窗口导出文件) --------------------------------------------------------------- 动态数据窗创建原理及实现在实际应用中,经常需要根据用户需求来动态创建数据窗,一般方法是这样的。在一个window中加入一个数据窗控件,如dw_new,但是该数据窗没有data object,(空白的) 就可以用以下语法来创建: dw_new.create(ls_syntax,ls_error) // 创建语法,错误信息 ls_syntax可

以用以下三种方法来形成:一、动态由sql语法创建: // 连接到pb的example数据库string ls_sql,ls_syntax,ls_errorls_syntax = 'select * from department'ls_syntax = sqlca.syntaxfroms ql(ls_sql,'style(type=grid)',ls_error)if len(ls_error) >0 thenmessagebox('error','syntaxfromsql error :~r'+ls_error)elsedw_new.create(ls_syntax,ls_error)if len(ls_error) >0 thenmessagebox("error", "c reate have these errors: ~r" + ls_error)elsedw_new.settransobject(sqlca)dw_new.retrieve()end ife nd if二、由另一个数据窗的syntax来创建string ls_syntax,ls_errorls_syntax = dw_test.describe('datawindow.syntax')dw_new.create(ls_synt ax,ls_error)if ls_error <> '' thenmessagebox('create error',ls_error)elsedw_new.settransobject(sql ca)dw_new.retrieve()end if三、读取psr文件来创建样例string ls_syntax,ls_error,ls_retls_ret = char(13)+char(10) //回车键int li_filenumlong li_lengthli_filenum = fileopen("efef.psr",streammode!, read!, shared!, replace!) // 以下是pb5的代码if li_filenum >0 thenfileseek(li_filenum, 158, frombeginning!)li_length = fileread(li_filenum,ls_syn tax)end iffileclose(li_filenum)if li_length = 0 thenreturn ls_syntax = "release 5;"+ls_ret+ls_syntax / /截掉ls_syntax中的数据部分,5.0以"sparse(names="dept_name?) "作为参考位置 //6.0以html(作为参考位置 long pos1,pos2 pos1 = pos(ls_syntax,'sparse(names="',1) pos2 = pos(ls_syntax,'"',pos1 +16) ls_ syntax = left(ls_syntax,pos1) + mid(ls_syntax,pos1 +1,pos2 - pos1 +1) dw_new.create(ls_syntax,ls_ error) if ls_error <> '' then messagebox('create error',ls_error) else dw_new.settransobject(sqlca) dw_new.retrieve() end if //pb6,pb7的代码可以参照pb5自己写,只是文件头和数据窗结束标记不同而已。 --------------------------------------------------------------- global type f_createextenddw from functio n_object end type forward prototypes global function string f_createextenddw (ref datawindow dw, string cols[]) end prototypes global function string f_createextenddw (ref datawindow dw, str ing cols[]);string sql_dw_general, sql_dw_columns_type, sql_dw_headers_conf, sql_dw_columns _conf, ls_errors int i long ll_colcount string ls_colnametype string ls_colname,ls_coltype long ll_p os ll_colcount = upperbound(cols) //generals sql_dw_general = "release 8;" & + "datawindow(uni ts=0 timer_interval=0 color=16777215 processing=0 print.documentname=" + char(34) + "" + cha r(34) + " print.orientation = 0 print.margin.left = 110 print.margin.right = 110 print.margin.top = 9 6 print.margin.bottom = 96 print.paper.source = 0 print.paper.size = 0 print.prompt=no print.butt ons=no print.preview.buttons=no )" & + "header(height=72 color=" + char(34) + "536870912" + c har(34) + " )" & + "summary(height=0 color=" + char(34) + "536870912" + char(34) + " )" & + "foo ter(height=0 color=" + char(34) + "536870912" + char(34) + " )" & + "detail(height=84 color=" + ch ar(34) + "536870912" + char(34) + " )" //列及类型 sql_dw_columns_type = "table(" for i=1 to ll_colcount ls_colnametype = trim(cols[i]) ls_colna me = right(ls_colnametype,len(ls_colnametype) - 1) ls_coltype = left(ls_colnametype,1) choose ca se upper(ls_coltype) case 'c' ls_coltype = 'char(100)' case 'd' ls_coltype = 'date' case 'n' ls_coltype = 'decimal(6)' case else ls_coltype = 'char(100)' end choose //ls_coltype = 'char(100)' //列及类型 sql_dw_columns_type= sql_dw_columns_type + "column=(type=" +ls_coltype+" updatewhere clause=no name=" + ls_colname + " dbname=" + char(34) + ls_colname + char(34) + " ) " //列标题 sql_dw_headers_conf = sql_dw_headers_conf + "text(band=header alignment=" + char(34) + " 2" + char(34) + " text=" + char(34) + ls_colname + char(34) + " border=" + char(34) + "6" + char(34 ) + " color=" + char(34) + "16711680" + char(34) + " x=" + char(34) + string( ((i - 1) * 588) + 5) + ch ar(34) + " y=" + char(34) + "4" + char(34) + " height=" + char(34) + "64" + char(34) + " width=" + ch

ar(34) + "574" + char(34) + " name=" + ls_colname + "_t font.face=" + char(34) + "arial" + char(34) + " font.height=" + char(34) + "-10" + char(34) + " font.weight=" + char(34) + "400" + char(34) + " font.family=" + char(34) + "2" + char(34) + " font.pitch=" + char(34) + "2" + char(34) + " font.chars et=" + char(34) + "0" + char(34) + " background.mode=" + char(34) + "2" + char(34) + " backgroun d.color=" + char(34) + "12632256" + char(34) + " )" //列属性 sql_dw_columns_conf = sql_dw_columns_conf + "column(band=detail id=" + string(i) + " align ment=" + char(34) + "1" + char(34) + " tabsequence=" + string(i) + "0 border=" + char(34) + "2" + c har(34) + " color=" + char(34) + "0" + char(34) + " x=" + char(34) + string( ((i - 1) * 588) + 5) + char( 34) + " y=" + char(34) + "4" + char(34) + " height=" + char(34) + "76" + char(34) + " width=" + char( 34) + "579" + char(34) + " format=" + char(34) + "[general]" + char(34) + " name=" + ls_colname + " edit.limit=0 edit.case=any edit.autoselect=yes edit.autohscroll=yes font.face=" + char(34) + "aria l" + char(34) + " font.height=" + char(34) + "-10" + char(34) + " font.weight=" + char(34) + "400" + char(34) + " font.family=" + char(34) + "2" + char(34) + " font.pitch=" + char(34) + "2" + char(34) + " font.charset=" + char(34) + "0" + char(34) + " background.mode=" + char(34) + "1" + char(34) + " background.color=" + char(34) + "536870912" + char(34) + " )" next sql_dw_columns_type= sql_ dw_columns_type + " )" sql_dw_columns_conf = sql_dw_columns_conf + "htmltable(border=" + char(34) + "1" + char(34) + " cellpadding=" + char(34) + "0" + char(34) + " cellspacing=" + char(34) + "0" + char(34) + " generatecss=" + char(34) + "no" + char(34) + " nowrap=" + char(34) + "yes" + char(34) + ")" //messagebox('',sql_dw_general + sql_dw_columns_type + sql_dw_headers_conf + sql_dw_columns_conf) dw.create(sql_dw_general + sql_dw_columns_type + sql_dw_headers_c onf + sql_dw_columns_conf , ls_errors) return(ls_errors) end function40、如何让datawindow的heade带区r的内容只打印一次?答:1、制作两个数据窗口,第一个有表头,第二个没有。 2、用第一个有表头的数据读取数据库中的数据 3、打印有表头的数据窗口中的第一页,记住结束行号 4、将从结束行号开始的所有数据复制到第二个数据窗口中 5、打印第二个数据窗口41、交叉报表在retrieve后,其datawindow的宽度怎么获得啊?答://==================================================================== // [public] f unction wf_settitle_length 在 w_search_report inherited from window //-------------------------------------------------------------------- // 说明:设置表头长度 //-------------------------------------------------------------------- // 参数1:[reference] datawindow adw_1 // 说明:报表dw //-------------------------------------------------------------------- // 返回: (integer) 成功返回1,不成功返回0 //-------------------------------------------------------------------- // 作者: cwl 日期: 2001.12.15 //================================================================= === long row string list string token[] string tag_1 integer startpos = 1, endpos, top, i = 1 , index = 0 //取出dw中所有的对象存入token[]中 list = adw_1.describe("datawindow.objects") endpos = pos(list, '~t', startpos) do while ( endpo s > 0 ) token[i] = mid(list, startpos, endpos - startpos) i ++ startpos = endpos + 1 endpos = pos(list, '~t', startpos) loop token[i] = mid(list, startpos) top = upperbound(token[]) //找出最后一列 string ls_lastcol int li_lastpos=0,li_thispos fori = 1 to top choose case upper(adw_1.describe(to ken[i] + '.type')) case 'column', 'compute' li_thispos = integer(adw_1.describe(token[i] + '.x')) if li_ thispos>=li_lastpos then //这是目前最后一列 li_lastpos=li_thispos ls_lastcol=token[i] end if end choose next //设置表头长度 string ls_change ls_change="800~tlong(describe('"+ls_lastcol+".x')) + long(describe('"+ls_lastc ol +".width')) + 10" //messagebox('',ls_change) adw_1.modify('title.width="'+ls_change+'"') retur

n 142、如何在数据窗中得到自动高的列的高度?答:desceibe("evaluate('rowheight()',3)") //获得第三行的row的高度42、如何使dw的列不可移动,不可调整列宽?答:在datawindow 的cilcked事件写 if row=0 then return 1 end if43.光标跳转到数据窗口的某一行某一列dw_1.scrolltorow(ll_row) dw_1.setcolumn(ll_column)44 如何使光标指向每页第一行?long ll_firstrowonpage=long(dw_1.describe("datawindow.firstrowonpage"))dw_1.scrolltorow (ll_firstrowonpage)dw_1.setrow(ll_firstrowonpage)45. grid的窗口如何使第一列固定不动?

①选上data object的hsplitscroll属性②在constructor事件中: dw_1.object.datawindow.horizontalscrollsplit=integer(dw_1.describe("#1.width")) //第一列的宽度③在scrollhorizontal事件中:int iif pane = 1 theni = integer(this.object.datawindow.horizontalscrollposition2)if i < 1 or isnull(i) then returnif scrollpos > 0 thenthis.object.datawindow.horizontalscrollposition = 0end ifelsei = int eger(this.object.datawindow.horizontalscrollsplit)if i < 1 or isnull(i) then returnif i > scrollpos then this.object.datawindow.horizontalscrollposition2 = iend ifend if46. 怎样取子数据窗口的总列数ll_column_count=integer(dwc.describe("datawindow.column.count")) //dwc为子窗口47.在数据窗口过滤以后,计算列值如何才能一起改变?dw_1.setfilter(filter_condition)dw_1.filter()dw_1.groupcalc()48.怎么改变某一列的背景颜色?dw_1.modify("sno.background.mode=2" )dw_1.modify ( "sno.background.color='255'" )49.在数据窗口中如何delete选中的多行?long ll_rows , ll_rowll_rows=dw_1.rowcount()for ll_row = ll_rows to 1 step -1if dw_1.isselected(ll

_row) thendw_1.deleterow(ll_row)end ifnext50.如何改变列的字体颜色,提醒用户此列已做修改在列的color属性中,输入如下表达式 if (column_name < >column_name.original, rgb(255, 0, 0), rgb(0, 0, 0))51.数据窗口中限定某列不可编辑用datawindow的clicked事件中的方法也可以实现列的保护。若某列不可更改,则可置protect=0。即: dw_1.modify("columnname.protect=0") 或dw_1.modify("#"+string(number)+".protect=0") 若要将该列改为可更改,则置protect=1,即: dw_1.modify(:columnname.protect=1") 或dw_1.modify("#"+string(number)+".protect=1") 此方法不影响tab键的移动,用户可以随意拉动列,还可在应用过程中自己决定哪一列可编辑,哪一列不可编辑。52.怎样去掉上图中数据窗口中的黑影?this.modify ("datawindow.selected.mouse=no") this.modify ("datawindow.grid.columnmove = false")53 实现逐行增加求和使用计算列:cumulativesum(field for all),即可达到逐渐递增求和的功能54 快速删除多行方法是把要删除的行从主缓冲区中移到删除缓冲区中。例如,删除缓冲区中所有的行:dw_1.rowsmove(dw_1, 1, dw_1.rowcount, primary!, dw_1, 1, delete!)58、在分组的header上加序号答:建立计算域,expression: cumulativesum( if (jlxm = jlxm[-1],0,1) for all)59、为什么varchar字段类型的列只能保存255个字符?答:设置事务处理对象的dbparm属性即可示例:.........sqlca.dbparm = "dbtextlimit = '9999'".........60. 点击grid类型数据窗口的header,自动排序。(图片自己做)/* *args: i_str_oldcol *note:实例变量,纪录上次点击的列 */ string i_str_oldcolstring str_objectname, str_curcol, str_addpic integer int_pic_xstr_objectn ame =string (https://www.doczj.com/doc/eb9427357.html,) //对象名称 if row = 0 and this.describe(str_objectname+".band") = "header" and this.describe(str_objectn ame+".text") <> "!" then //是否点击列对象 str_curcol = left(str_objectname,len(str_objectname) - 2) //当前列对象名称 if str_curcol <> i_str_oldcol then //点击的是不同列对象 this.modify("destroy p_sort") //不管

有没有位图对象都删除 i_str_oldcol = str_curcol //保存上次点击的列对象 //画图 int_pic_x = integer(this.describe(str_objectname+".x")) + (integer(this.describe(str_objectnam e+".width")) - 70) str_addpic = 'create bitmap(band = foreground filename= "..\pic\up.bmp" x= "'

+string(int_pic_x)+'" y= "24" height= "48" width= "48" border= "0" name= p_sort visible= "1")' thi s.modify(str_addpic) //动态画个图 this.setsort(str_curcol + " a") //头一次点击当然是升序了 this.sort() else //当前列已经点过了 if this.describe("p_sort.filename") = "..\pic\up.bmp" then //上次是升序 this.modify("p_sort.filename = '..\pic\down.bmp'") this.setsort(str_curcol + " d") //这次是降序 else this.modify("p_sort.filename = '..\pic\up.bmp'") this.setsort(str_curcol + " a") end if this.s ort() end if end if28、如何控制打印横向: dw_control.object.datawindow.print.orientation= 1 29、如何进行预览: dw_control.object.datawindow.print.preview = "yes"55、如何用代码取得数据窗口汇总带计算列的值?string ls_valuels_value = dw_1.describe("evaluate("'compute_1',1)")56、得到所有列标题ll_colnum = long(dw_1.object.datawindow.column.count)for i = 1 to ll_colnumls_colname = dw_1 .describe('#' + string(i) + ".name") + "_t"ls_value = dw_1.describe(ls_colname + ".text")next57、数据窗读取group分组列的方法在数第10/14页据窗中建立一计算列last_row ,计算公式为last(getrow() for group 1)compute_1是group 1中的计算列int n_row,p_row,i,j j=0 p_row=dw_1.getitemnumber(1,"last_row") for i= 1 to dw_1.rowcount() n_ row=dw_1.getitemnumber(i,"last_row") if p_row<>n_row then dw_2.insertrow(0) dw_2.setitem( dw_2.rowcount(),"slhj",dw_1.getitemnumber(p_row,"compute_1")) end if p_row=n_row end for dw_2.insertrow(0) dw_2.setitem(dw_2.rowcount(),"slhj",dw_1.getitemnumber(p_row,"compute

_1"))70. 如何从*.txt 文件中导入数据到数据窗口?public function boolean wf_appendfromtxt (datawindow dw_acton, string str_filename, string str _filesegment, string str_columnsegment);integer int_filehandle,int_filenum,i,j string str_text,str_ row,str_row_1,str_data[],str_columndatatype long lng_row,lng_column_count,lng_column_coun

t1,lng_column_count2 int_filenum = fileopen(str_filename, streammode!, read!, lockread!) if int_ filenum > 0 then fileread (int_filenum, str_text) str_text=trim(str_text)+str_filesegment do while pos(str_text,str_filesegment) <> 0 str_row=left(str_text,pos(str_text,str_filesegment) - 1) str_text =right(str_text,len(str_text) - pos(str_text,str_filesegment) - 1) if trim(str_row)='' then fileclose(in

t_filenum) end if str_row_1=trim(str_row)+str_columnsegment i=1 do while pos(str_row_1,str_c olumnsegment)<>0 str_data[i]=left(str_row_1,pos(str_row_1,str_columnsegment) - 1) str_data[i] =trim(str_data[i]) str_row_1=right(str_row_1,len(str_row_1) - pos(str_row_1,str_columnsegment )) i++ loop lng_row=dw_acton.insertrow(0) lng_column_count1=long(dw_acton. o b j e c t.datawi ndow.column.count) lng_column_count2=upperbound(str_data[]) lng_column_count=min(lng_c olumn_count1, lng_column_count2) for j = 1 to lng_column_count str_columndatatype=dw_acto n.describe("#"+string(j)+".coltype") choose case left(str_columndatatype,5) case "date" dw_acto n.setitem(lng_row,j,date(str_data[j])) case "datet" dw_acton.setitem(lng_row,j,datetime(blob(str

_data[j]))) case "decim" dw_acton.setitem(lng_row,j,dec(str_data[j])) case "int" dw_acton.setite

m(lng_row,j,integer(str_data[j])) case "long" dw_acton.setitem(lng_row,j,long(str_data[j])) case " number" dw_acton.setitem(lng_row,j,dec(str_data[j])) case "time" dw_acton.setitem(lng_row,j,ti me(str_data[j])) case "char(" dw_acton.setitem(lng_row,j,str_data[j]) case "times" end choose ne

xt loop fileclose(int_filenum) return true else messagebox("提示", "打开文件失败") return false end if71.如何从*.xls 文件中导入数据到数据窗口?public function boolean wf_appendfromxls (datawindow dw_acton, string str_filename);oleobjec

t excelserver long excelok string str_savename excelserver = create oleobject excelok = excelserve r.connecttonewobject( "excel.application" ) if excelok < 0 then messagebox("连接excel失败,检查你的系统是否安装了office",string(excelok)) return false else excelserver.workbooks.open(str_filename) str_savename ="c:\temp.txt" excelserver.activeworkbook.saveas(str_savename第11/14页,3) excelserver.displayalerts=false excelserver.quit() excelserver.disconnectobject() destroy exce lserver dw_acton.importfile(str_savename) filedelete(str_savename) return true end if end functi on72.如何去掉pb中的灰线dw中.modify("datawindow.hidegrayline=")//可以让你去掉预览时讨厌的灰线条,以上只能在pb9.0以上版本中有效73.滚动水平条的设置第一段代码写在dw_1的scrollhorizontal事件的int i if pane=1 then i=integer(this.object.datawindow.horizontalscrollposition2) if i<1 or isnull(i) th en return else i=integer(this.object.datawindow.horizontalscrollsplit) if i<1 or isnull(i) then return if i>scrollpos then this.object.datawindow.horizontalscrollposition2=i end if end if第二段代码写在窗口的open事件里string ls_colx ls_colx=dw_1.object.factory.x dw_1.object.datawindow.horizontalscrollsplit=ls_colx 74.如何在dddw中敲入字母时dddw始终下拉状态?1、声明实例变量:boolean ib_show2、声明外部函数:subroutine keybd_event(int bvk,int bscan,ulong dwflags,ulong dwextrainfo) library "user32.dll"3、新建自定义事件:pbm_dwnkey代码如下:if getcolumn() = 2 then //这里假设你的dddw是第2列,如果是其他列,则自行修改if not ib_show thenkeybd_event(18,0,0,0)keybd_event(40,0,0,0)keybd_event(40,0,2,0)keybd_eve nt(18,0,2,0)ib_show = trueend ifelseib_show = falseend if4、在dw的clicked和doubleclicked事件中分别写入:ib_show = false5、测试一下吧,这样即可弹出下拉dddw,但是dddw自动滚动的代码我没有写,你自己完成吧!75.如何使鼠标单击item单元格(tab order为0)时黑色选中色变为其他颜色?1、首先将dw属性中的column moving 和mouse selection两项取消选中;2、在dw的clicked事件中写代码://此处声明所用到的相关变量;long ll_curcol,ll_pos,ll_colsstring ls_modstring,ls_colname,ls_color_1,ls_color_2,ls_curcolif row = 0 then return//此处给两个颜色变量赋值;ls_color_1 = string(rgb(255,255,255))ls_color_2 = string(15780518) //此处设置选中单元格为sky 天蓝色//此处获取当前列号和总列数;//ll_curcol=dw_1.getcolumn()ls_curcol = left(dw_1.getobjectatpointer(),pos(dw_1.getobjectatpoi nter(),"~t") - 1)ll_cols = long(dw_1.object.datawindow.column.count)//此处将所有列的background的mode属性设为不透明;(注:下面两句其实可以放到form的open事件或dw 的constructor里面执行,可以提高效率;)dw_1.setredraw(false)for ll_pos = 1 to ll_colsls_colname = dw_1.describe("#"+string(ll_pos)+".na me")dw_1.modify(ls_colname+".background.mode='0'")next//此处将所操作列的background.color属性设为带if判断的表达式,而除此之外的各列的背景表达式均设为恒值;for ll_po第12/14页s = 1 to ll_colsls_colname = dw_1.describe("#"+string(ll_pos)+".name")//if ll_pos<> ll_curcol then if ls_colname <> ls_curcol thenls_modstring = ls_colname+".background.color='"+ls_color_1+"'"e lsels_modstring = ls_colname+".background.color='"+ls_color_1+" ~t if (getrow()=currentrow(),"+ ls_color_2+","+ls_color_1+")'"end if//此处执行背景颜色修改;dw_1.modify(ls_modstring)next//刷新显示新的背景颜色;dw_1.setredraw(true)77.如何在使用

setitem后修改的各个单元格字体变成兰色,其他单元格仍保留黑色字体?string ls_modstring,ls_rows[]long ll_row,ll_col,ll_posfor ll_pos = 1 to long(dw_1.object.datawindo w.column.count)ls_rows[ll_pos] = ""nextdw_1.setredraw(false)//假设此处要修改第2行、第1列

ll_row = 2ll_col = 1dw_1.setitem(ll_row,ll_col,"testdata")if len(ls_rows[ll_col]) = 0 thenls_rows[ll_ col] = string(ll_row)elsels_rows[ll_col] = ls_rows[ll_col] + "," + string(ll_row)end ifls_modstring = " #"+string(ll_col)+".color='0~tcase(getrow() when "+ ls_rows[ll_col] +" then rgb(0,0,255) else rgb(0 ,0,0))'"dw_1.modify(ls_modstring)//假设此处要修改第4行、第2列ll_row = 4ll_col = 2dw_1.setitem(ll_row,ll_col,"testdata2")if len(ls_rows[ll_col]) = 0 thenls_rows[ll _col] = string(ll_row)elsels_rows[ll_col] = ls_rows[ll_col] + "," + string(ll_row)end ifls_modstring = "#"+string(ll_col)+".color='0~tcase(getrow() when "+ ls_rows[ll_col] +" then rgb(0,0,255) else rgb( 0,0,0))'"dw_1.modify(ls_modstring)dw_1.setredraw(true)一).describe 可以描述dw中某个对象的某个属性的取值,虽然函数describe可以获取对象的信息,但是表达式的取值就不能正常读取了,而这又是经常遇到的.(二).在describe 中添加上evaluate以后,具备了取值,判断以及计算的功能。如果想获取数据窗口对象中由属性、函数等构成的表达式的取值时,必须在函数describe中使用函数evaluate。语法:evalute('expression',rowno)其中,expression是属性表达式,rowno是要描述的行号。该函数放置在describe的属性列表中。判断:例如,判断第3行的salary工资是否大于1 000,如果大于则返回1,否则返回0,可以使用下面的语句:dw_1.describe("evaluate('if(salary > 1000, 1, 0) ', 3)")取值:dw_2.describe("evaluate('column_conn',1)") //取'column_conn'中第一行的值计算:dw_1.describe("evaluate('sum((salary)',0)") //可以避免从数据库中提取数据注意:表达式要有引号,evaluate()也要有引号。(三).lookupdisplay 在数据窗口控件上显示的值和字段实际得到的值并不相同,使用函数getitemx只能读取这样的字段的真实取值,而不是用户看到的值。如何才能读取用户看到的值?可以使用此函数,lo第13/14页okupdisplay函数不能直接从powerscript调用,可以在describe中和evaluate函数配合使用。因为函数lookupdisplay不能指定对哪行数据进行操作,它的参数只有一个字段名称,所以必须和evaluate函数配合使用。该函数的语法是:lookupdisplay(columnname)参数columnname是字段的名称,而不是一个字符串。函数执行错误则返回空字符串。注意:lookupdisplay()要有引号,evaluate()也要有引号。例一:ls_1 = dw_1.describe("dw_1.cb_4.text")ls_2 = this.describe(https://www.doczj.com/doc/eb9427357.html, + ".coltype")语法:value = datawindow.describe(string ls)例三:dw_1.describe("evaluate('lookupdisplay(column)'," + string (row number) + ")")在dw_1 里面有一个gxbm字段的edit属性页下面:datawindow:d_dmzd_gxbm,display column:dmmc,data column:gxbm.在显示时:不是显示gxbm的值,而是显示dmmc的值,但我们用getitemstring(row,"gxbm")时,得到的是gxbm的值,而不是显示的dmmc值,如果我们想得到显示的dmmc值,那就用lookupdisplay来用:ls_1 = dw_1.describe( "evaluate('lookupdisplay(gxbm)'," + string(1) + ")")dw_2.describe("evalu ate('lookupdisplay(column_compare)',1)")修改列名 1 getcolumnname 得到列名 col_name2 col_titlename = col_name+'_t"3 当然就是modify (col_titlename+".text='"+modify_str+"'")获取列名long ll_column_count,ll_istring ls_column,ls_column_name,is_name_array,is_dbname_arrayll_co lumn_count = long(dw_detail.describe("datawindow.column.count")) //总列数ll_column_count=long(dw_1.object.datawindow.column.count) //第二种写法for ll_i = 1 to ll_column_countif dw_detail.describe("#"+string(ll_i)+".visible") = '1' thenls_column

= dw_detail.describe("#"+string(ll_i)+".name") //列名modify(ls_column+".text"="newname")end ifnext//修改选中行的背景色string ll_colorll_color=rgb(0, 0, 255)dw_1.modify("currentdata.background.color = '" + string(ll_c olor) + "'")

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

数据结构实验指导书(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中数据窗口函数总结

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

数据结构课后习题

第一章 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数据窗口技巧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按钮, 保存所做的修改.

根式函数值域定稿版

根式函数值域 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 +--+=的值域

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.doczj.com/doc/eb9427357.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.doczj.com/doc/eb9427357.html,EROBJECT 用户对象,用户自定义的用于完成某项处理的.可重复使用的对象 13.FOREIGN KEY 外部键,是一种约束,要求构成外部键的一个或多个列的值必须对应主健表中的一个值 14.EVENT 事件,一个发生在对象或控制中的动作,可以触发一段脚本程序的执行. 15.FUNCTION 函数,执行特定处理的例程,在面对对象编程中,也称方法. 16.POLYMORPHISM 多态,同一个对象中的两个或多个名字相同,参数列表不同的

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

学生: 科目: 数 学 教师: 刘美玲 一、二次函数和特殊多边形形状 二、二次函数和特殊多边形面积 三、函数动点引起的最值问题 四、常考点汇总 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数据窗口绝对技巧 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常用函数

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源码大全

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 关于触发器的使用

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的数据窗口操作

★SetTransObject 语法:dwcontrol.SetTransObject ( transaction ) 功能:给数据窗口或者datastore控件dwcontrol设置事务对象transaction,缺省事务对象是SQLCA。返回值:成功设置事务对象则返回1,执行过程中发生了错误则返回-1,有任意参数为Null时返回Null。 ★Retrieve 语法:dwcontrol.Retrieve ( {, argument, argument . . . } ) 功能:使用数据窗口控件的当前事务对象检索数据库中的数据。如果数据窗口控件对应的数据窗口对象定义了检索参数,则应该在该函数中指定检索参数,参数的个数和数据窗口对象的检索变量个数相等,对应的数据类型相兼容。 返回值:返回数据窗口控件主缓存区(PrimaryBuffer)中的记录数,如果检索数据时发生错误则返回-1,如果任意参数为Null则返回Null *该函数的参数和数据窗口对象定义的参数的顺序要相同,类型要兼容。个数不能少于数据窗口对象定义的参数,即可以等于和多于数据窗口对象定义的参数,多的参数忽略。 ★DeleteRow 语法:dwcontrol.DeleteRow ( row ) 功能:删除数据窗口dwcontrol中的第row行数据,如果row为0则表示删除当前行的数据。 返回值:执行成功则返回1,执行错误则返回-1,如果任意参数为Null则返回Null。 *该函数执行后只是将被删除的数据从数据窗口的主缓存区移放到Deleted缓冲区,在数据库中并没有真正删除数据,当正确执行了Update函数并且使用commit语句提交了事务后,才真正从数据库中删除该数据 ★InsertRow 语法:dwcontrol.InsertRow ( row ) 功能:在数据窗口dwcontrol的第row行前插入一行空白数据。当指定row为0时,表示在当前行之前插入一行空白数据。 返回值:返回插入的数据的行号,如果执行过程中发生错误则返回-1,如果任意参数为Null则返回Null ★Update 语法:dwcontrol.Update ( { accept {, resetflag } } ) 功能:提交数据窗口或者datastore中的数据。如果accept为True,表示在提交数据之前自动执行AccpetText函数,否则不执行该函数,该参数缺省为True;如果resetflag为True,表示数据提交后自动清除修改标识,该参数缺省为True。 返回值:执行成功则返回1,发生错误则返回-1,如果dwcontrol为Null则返回Null ★AcceptText 语法:dwcontrol.AcceptText ( ) 功能:该函数执行时,首先对当前编辑框中的内容进行对应字段的校验规则,能够通过校验规则,则保存在对应字段中,否则显示校验信息提示错误。需要执行该函数的原因是,当在某字段上的编辑框中输入内容而没有移动光标到别的字段上时,其他控件获得焦点,此时编辑框中的内容不能被保存到字段中,所以就应该在数据窗口失去焦点时执行该函数。 返回值:执行成功则返回1,执行过程中发生错误则返回-1,如果dwcontrol为Null则返回Null。 *该函数在数据窗口的ItemChanged事件中不起作用,因为项目改变是发生在接受编辑框中内容之后

相关主题
文本预览
相关文档 最新文档