PB笔记
PB学习记录

Abs功能计算绝对值。
语法Abs ( n )参数n:要得到绝对值的数值型变量或表达式返回值返回值的数据类型与n的数据类型相同,函数执行成功时返回n的绝对值。
如果参数n的值为NULL,Abs()函数返回NULL。
Ceiling功能返回大于n的最小整数。
语法Ceiling ( n )参数n:数值型变量或表达式返回值返回值的数据类型与n的数据类型相同。
函数执行成功时返回大于n的最小整数。
如果参数n的值为NULL,Ceiling()函数返回NULL。
Cos功能计算余弦,其中参数以弧度为单位。
语法Cos ( n )参数n:数值型变量或表达式返回值Double。
函数执行成功时返回n的余弦。
如果参数n 的值为NULL,Cos()函数返回NULL。
DeletedCountDELETEDCOUNT,未做数据库更新的行的数量。
功能:返回数据窗口控件中已经被删除但尚未做数据库更新的行的数量语法:DWCONTROL.DELETEDCOUNT()参数:DWCONTROL 数据窗口控件名返回值:LONG ;函数执行成功时返回数据窗口控件中已经被删除但尚未做数据库更新的行的数量,如果没有被删除的行或被删行已经完成了数据库修改,则函数返回 0。
出现错误时返回-1 。
如果DWCONTROL 的值为NULL ,则DELETEDCOUNT()函数返回NULL用法:数据窗口控件有四个缓冲区其中主缓冲区存储当前显示的所有行,删除缓冲区存储应用程序使用DELETEROW()函数或其他函数删除的数据行,在修改数据库之前,被删除行一直保存在删除缓冲区中,使用 DELETEDCOUNT()函数可以得到删除缓冲区中总行数,即当前被删除行的总数数据窗口控件的四个缓冲区为:主缓冲区删除缓冲区过滤缓冲区原始缓冲区示例:下面的代码测试数据窗口缓冲区中是否有被删除行,如果有被删除行,那么修改数据库,以反映数据被删情况LONG LL_DELLL_DEL = DW_EMPLOYEE.DELETEDCOUNT()IFLL_DEL <> 0 THEN DW_EMPLOYEE.UPDATE()Exp功能计算e的n次方。
PB笔记

关于PB的若干问题1.DataWindow中无法编辑数据:设置Datawindow中各控件的Taborder;2.Datawindow没有capacity of updateRows->DataWindow Properties 勾上Allow Update应用程序的open()事件通用代码:SQLCA.DBMS=”ODBC”SQLCA.AutoCommit=falseSQLCA.PBParm=”connnectString=‟DSN=数据库名‟”Connect using SQLCA判断连接是否成功If SQLCA.sqlcode<0 thenMessagebox(“提示信息”,”数据库连接失败”)Return -1ElseReturn 1End if使数据窗口具有显示数据的能力,需要在窗口的open()事件中加入如下代码:Dw_1.SetTransObject(SQLCA) //使数据窗口与事务对象相连Dw_1.Retrieve() //执行检索操作DataWindow基本函数1.dw_n.InsertRow(row) //row:long型,指定某行在datawindow中指定行的前面插入一行2.dw_n.RowCount()返回datawindow中当前可用总行数3.dw_n.ScrollToRow(row)滚动到指定行4.dw_n.deleteRow(row)删除鼠标选中行5.dw_n.update([accept,/refetflag])将修改传入数据库添加数据Long l_rowInt sS = dw_1.RowCount(); //得到总行数L_row=dw_1.InsertRow(s + 1) //插入一行Dw_1.setFocus() //滚动到s+1行保存数据Dw_1.update()Dw_1.retrieve()确认后删除Int sS = dw_1.getRow()If s > 0 thenIf MessageBox(“删除”,”确定删除学号为”+dw_1.getItemString(s , “ sno”)+”的数据?”,Question! , yesNo! ,2) = 1 thenDw_1.RowsMow(s , s, primary!, dw_2, dw_2.RowCount+1, primary!)恢复删除的数据Rowsmove()函数Rowsmove(starRow, endRow, moveBuffer, targetDW, beforeRow, targetBuffer)要移动的数据从moveBuffer缓冲区的starRow开始到endRow结束的数据。
PB学习

Pb1.B/S模式2.对象包括三方面:属性,事件,函数属性——规定了对象的特征;事件——说明对象相应什么样的操作;函数(方法)——封装对象的功能;3.PB主要包括的对象:应用对象,窗口对象,数据窗口对象,菜单,函数,查询,结构,用户对象,工程对象4.系统分析和系统设计——充分了解系统需求5.系统开发——创建对象,描述对象,设置属性建立应用对象;生成用户对象,函数和结构;建立窗口和菜单;创建数据窗口对象,将数据窗口对象连接到窗口上;编写各对象的事件处理程序;调试应用;测试系统;生成EXE文件。
6.PB与数据库的连接通过数据库接口来实现:ODBC接口,专用接口ODBC:开放式数据库互连标准接口,以关系数据库标准查询语言SQL来存取连接到的数据源专用接口:针对具体的数据库管理系统而设计,将PB连接到相应的数据库上。
ODBC接口(1)ODBC应用软件,包括用PB开发的应用程序调用ODBC函数,PB通过动态链接库PBODB60.DLL完成这一功能,对于开发人员来说,该过程是隐含的,由PB自动完成(2)驱动管理程序用ODBC.INI文件把数据源名映射成特定驱动程序的动态链接库处理几个ODBC初始化调用为每个驱动程序提供ODBC的入口点检验ODBC的调用参数和次序(3)驱动程序——处理ODBC函数调用,提交SQL请求到特定的数据源并把结果返回给应用程序。
(4)数据源——要存取的数据以及相关的操作系统,数据库管理系统和网络系统ODBC,PB访问数据库模式:PB应用程序——ODBC接口——数据库到网络的接口——网络——数据库到网络的接口——数据库服务器连接数据库(1)建立或配置与要连接的数据库对应的数据源ODBC数据源:应用ODBC配置面板;(2)建立数据库描述文件或设置连接参数。
(3)连接到ODBC数据库创建应用程序对象1.PB——应用对象代表应用程序,程序从应用对象开始运行,面向对象,用它开发的应用程序以对象和事件为基本特征。
pb笔记

pb9.0中,我单点击cb_1按钮,有什么语句可以让我不用点击cb_2同样可执行cb_2中的代码?在cb_1的点击事件中调用cb_2中的代码,cb_2.triggerevent(clicked!)//PB中标准调用sql语句ls_sql = "select road_name from bb_data_wide_bus_temp_t where register_number = '" + ls_register_number + "'"declare cur_get dynamic cursor for sqlsa ;prepare sqlsa from :ls_sql ;open dynamic cur_get;fetch cur_get into :ls_value;if sqlca.sqlcode <> 0 thenmessagebox('操作信息','提取失败!',exclamation!) end ifclose cur_get;//PB中标准循环调用sql语句DECLARE cur_sql DYNAMIC CURSOR FOR SQLSA;PREPARE SQLSA FROM :ls_sql;OPEN DYNAMIC cur_sql;do while sqlca.sqlcode = 0FETCH cur_sqlINTO :ls_register_number,:ls_complete_note;ll_sqlcode = sqlca.sqlcodeif ll_sqlcode < 0 thenCLOSE cur_sql;af_disconnect()messagebox('错误提示','检索受理编号错误!',StopSign!)returnelseif ll_sqlcode = 100 thenexitend ifddlb_register_number.additem(trim(ls_register_number + '|' + ls_complete_note))loopCLOSE cur_sql;//窗口open事件通用脚本//置窗口居中af_center_window(this)//连接数据库af_connect()//定义变量dataWindowChild dwc//获取城市代码下拉列表并取值dw_city_code.getChild('city_code',dwc)dwc.setTransObject(sqlca)dwc.Retrieve(gs_citycode,gi_citylevel)dw_city_code.setTransObject(sqlca)dw_city_code.Retrieve()dw_city_code.setItem(1,'city_code',dwc.getItemString(1,'city_c ode'))is_city_code =dw_city_code.getItemString(dw_city_code.getRow(),'city_code')//获取业务类型下拉列表并取值dw_service_kind.getChild('service_kind',dwc)dwc.setTransObject(sqlca)dwc.Retrieve()dw_service_kind.setTransObject(sqlca)dw_service_kind.Retrieve()dw_service_kind.setItem(1,'service_kind',10)ii_service_kind =dw_service_kind.getItemNumber(dw_service_kind.getRow(),'servi ce_kind')//获取申请事项下拉列表并取值dw_apply_event.getChild('apply_event',dwc)dwc.setTransObject(sqlca)dwc.Retrieve(ii_service_kind)dw_apply_event.setTransObject(sqlca)dw_apply_event.Retrieve()dw_apply_event.setItem(1,'apply_event',dwc.getItemNumber(1 ,'apply_event'))ii_apply_event =dw_apply_event.getItemNumber(dw_apply_event.getRow(),'apply _event')//激发查询事件cb_query.TriggerEvent(clicked!)//断开数据库af_disconnect()//查询按钮通用脚本//连接数据库af_connect()//定义变量dataWindowChild dwc//dw_1检索数据dw_1.setTransObject(sqlca)dw_1.Retrieve(ii_service_kind)//dw_2检索数据int li_row,li_row_tempdw_2.getChild('action',dwc)dwc.setTransObject(sqlca)dwc.Retrieve(ii_service_kind)dw_2.setRowFocusIndicator(hand!)dw_2.setTransObject(sqlca)li_row_temp =dw_2.Retrieve(ii_apply_event,ii_service_kind,is_city_code)dw_2.scrollToRow(li_row_temp)//如果未检索到数据插入一空行,有数据就过滤string ls_filterint li_actionif li_row_temp = 0 thendw_2.insertRow(0)elsefor li_row = 1 to dw_2.rowCount()li_action = dw_2.getItemNumber(li_row,'action')ls_filter = ' action <> ' + string(li_action)dw_1.setFilter(ls_filter)dw_1.filter()nextend if//断开数据库af_disconnect()//增加按钮通用脚本//变量定义int li_step,li_action,li_auto_status,li_row//确认选择要增加的记录if dw_1.getSelectedRow(0) = 0 thenMessageBox('提示信息','请选择要添加的记录!',exclamation!)returnend if//取出要增加的信息li_step = dw_2.getItemNumber(dw_2.getRow(),'step')li_action =dw_1.getItemNumber(dw_1.getSelectedRow(0),'action')li_auto_status =dw_1.getItemNumber(dw_1.getSelectedRow(0),'auto_status') //添加信息li_row = dw_2.insertRow(0)dw_2.setItem(li_row,'step',li_step)dw_2.setItem(li_row,'action',li_action)dw_2.setItem(li_row,'auto_status',li_auto_status)dw_2.scrollToRow(li_row)//删除按钮通用脚本//删除前先确认IF dw_2.GetRow() = 0 THENMessageBox('提示信息','请选择要删除的记录!',exclamation!)ReturnELSEIF MessageBox("提示信息","确实要删除指定的记录?",Question!,YesNo!,2) = 2 THEN Returndw_2.DeleteRow(dw_2.getRow())END IF//保存按钮通用脚本//连接数据库af_connect()//定义变量string ls_city_code,ls_errorint li_service_kind,li_apply_event,li_row,li_stepdataWindowChild dwc//检测数据是否发生变化dw_2.AcceptText()IF dw_2.ModifiedCount() + dw_2.DeletedCount() = 0 THENMessageBox("操作提示","数据未发生变化,无需保存!",exclamation!)returnEND IF//检测是否为空或零dw_2.setSort('step a')dw_2.sort()FOR li_row = 1 TO dw_2.RowCount()li_step = dw_2.GetItemNumber(li_row,'step')IF IsNull(li_step) OR li_step = 0 THENMessageBox('操作提示','步骤不能为空或零,请重新输入!',exclamation!)dw_2.setRow(li_row)ReturnEND IFNEXT//保存dw_2.SetTransObject(sqlca)if dw_2.update() = 1 thencommit;messagebox("提示信息","保存成功!")dw_2.ScrollToRow(dw_2.RowCount())elsels_error = sqlca.sqlErrTextrollback;messagebox("提示信息","保存失败!" + char(13) +ls_error,stopSign!)returnend if//断开数据库af_disconnect()//打印按钮通用脚本if dw_1.rowCount() > 0 thenif PrintSetup() = -1 thenmessagebox('提示信息','打印机设置出错!',Exclamation!)returnelseif dw_1.print(true) = 1 then //显示可以取消打印的对话框Messagebox('提示信息',"打印成功!")elseMessagebox('提示信息',"打印失败!",stopSign!)end ifend ifelseMessagebox('提示信息',"没有数据可以打印,请先查询数据!",exclamation!)returnend if//导出按钮通用脚本if dw_1.rowcount() <= 0 thenmessageBox('提示信息','没有数据可以导出,请先查询!',exclamation!)returnend ifif dw_1.SaveAS('',text!,true) = 1 thenmessageBox('提示信息','导出成功!')end if//导入按钮通用脚本//变量定义string ls_pathfile,ls_file,ls_title,ls_ext,ls_filterint li_pos,li_fileidlong ll_buffer//变量赋值ls_title = "请选择数据文件"ls_ext = "txt"ls_filter = "文本文件(*.txt),*.txt,全部文件(*.*),*.*"li_fileid =GetFileOpenName(ls_title,ls_pathfile,ls_file,ls_ext,ls_filter)if(li_fileid = 0 or ls_file = "") thenreturnend ifsle_file_name.text = ls_pathfilecb_ok.enabled = true//退出按钮通用脚本close(parent) 或closeWithReturn(parent,returnvalue)//调用过程通用脚本if dw_wp.rowcount() <= 0 then return//变量定义string ls_sql,ls_err_infostring ls_register_number,ls_accept_city,ls_department,l s_oper_personinteger li_err_code,li_apply_event//变量赋值ls_register_number = dw_wp.getitemstring(1,'register_number')ls_accept_city = gs_citycodeli_apply_event = dw_wp.getitemnumber(1,'apply_event')ls_department = gl_dealeridls_oper_person = gs_workerid//连接数据库af_connect()//调用配号撤单过程ls_sql = "execute bb_pstn_assign_no_repeal_p(?,?,?,?,?)"declare proc_assign_no_repeal dynamic cursor for sqlsa ;prepare sqlsa from :ls_sql ;open dynamic proc_assign_no_repealusing :ls_register_number,:ls_accept_city,:li_apply_event,:ls_depa rtment,:ls_oper_person;if sqlca.sqlcode = -1 thenls_err_info = sqlca.sqlErrTextclose proc_assign_no_repeal ;Rollback;Messagebox("错误信息1","执行异常!" +ls_err_info,stopSign!)af_disconnect()returnEnd iffetch proc_assign_no_repeal into :li_err_code,:ls_err_info;if li_err_code < 0 thenclose proc_assign_no_repeal ;Rollback;Messagebox("错误信息2","执行异常!" +ls_err_info,stopSign!)af_disconnect()returnend ifclose proc_assign_no_repeal ;commit ;//断开数据库af_disconnect()//撤单成功后打印工单dw_wp.print()//PB某些控件的中文显示问题假如PB 的ListView 不能正常显示中文,则应该将ListView 的FontCharSet 属性设置成其他类型。
pb学习心得

PB编程实例点滴(4)- -| 回首页| 2005年索引| - -PB编程实例点滴(6) PB编程实例点滴(5)- -(41)把键盘中断送给控件[Function declaration]SUBROUTINE keybd_event( int bVk, int bScan, int dwFlags, int dwExtraInfo) & LIBRARY \"user32.dll\"[powerscript]li_vkey = 65 // the character \"A\"sle_1.setfocus() // the target controlkeybd_event( li_vkey, 1, 0, 0 )下面代码把BACKSPACE送给SingleLineEdit控件,并删除了上一个字符。
[powerscript]integer li_vkeyinteger ll_posll_pos = len(sle_1.Text) + 1sle_1.selectText(ll_pos,0) // set the cursor at the endli_vkey = asc(\"~b\") // backspacekeybd_event( li_vkey, 1, 0, 0 )(42)在一个控件使用“MOUSE-OVER”在本例中,使用一个静态文本控件。
当鼠标移在文本控件上时,控件的前景色为红色;当鼠标离开时,控件的前景色为黑色。
Suppose you have a static text on a Window. When the mouse is over it, the s tatic textforeground color change to red. When the mouse quit the static text, the for eground coloris black.[window mousemove event]// just to display somethingst_1.text = string(xpos) + \", \" + string(ypos)IF xpos >= st_1.X AND (xpos <= st_1.x + st_1.Width) AND &ypos >= st_1.y AND (ypos <= st_1.y + st_1.Height) THENst_1.textcolor = 255ELSEst_1.textcolor = 0END IF(43)查询临时目录变量如果在PB6以上,调用环境变量TEMP的值。
pb知识点

PB常用函数(1):Date l—dateString l—stringl—date = 1999-12-31l—string = string(l—date, "dd/mm/yy")l—date = date(l—string)(2):IsDate()功能检测指定的字符串是否包含有效的日期。
语法IsDate ( datevalue )参数datevalue:string类型,指定要检测的字符串返回值Boolean。
如果datevalue包含了有效的日期,则IsDate()函数返回TRUE,否则返回FALSE。
如果datevalue参数的值为NULL,则IsDate()函数返回NU LL。
(3):Run()功能运行指定的应用程序。
语法Run ( string {, windowstate } )参数string:string类型,指定要运行的应用程序的名称,其中可以包括路径以及相应的参数,就像在命令行中键入的那样windowstate:WindowState枚举类型,可选项,指定程序运行时的窗口状态。
有效取值为:Maximized! - 最大化窗口;Minimized! - 最小化窗口;Normal! - 缺省值,正常窗口返回值Intege r。
函数执行成功时返回1,发生错误时返回-1。
如果任何参数的值为NULL,Run()函数返回NULL。
用法使用Run()函数,应用程序能够启动操作系统中的任何程序。
当在Run()参数中指定了要启动应用程序的参数时,参数的意义、格式、个数等由具体的应用程序确定。
如果在Run()函数的string参数中指定了文件名但没有给出扩展名时,PowerBuilder认为该文件的扩展名为.EXE。
要运行扩展名不是.EXE的应用程序(比如.BAT, .COM, 或.PIF),必须在Run()函数的参数中指定文件的扩展名。
(4):Send()功能向窗口发送指定的消息并立即执行相应的事件处理程序。
PB7笔记

PB7.0学习笔记多心发表于2005-9-15 11:03:00PB默认的全局对象SQLCA Transaction对象,用于与数据库通信共含15个属性:SQLReturnData--返回的特定DBMS信息SQLCode--操作成功或失败的代码:0成功,100没找到,-1出错SQLNRows--最近执行的SQL语句有效的行数(不同的DBMS返回值不同)SQLDBCode--数据库出错代码SQLErrText--与出错代码相对应的数据库出错信息SQLDA DynamicDescriptionArea,用于动态SQLSQLSA DynamicStagingArea,用于动态SQL调用组向Error 在执行过程中报告错误Message 用于处理非PowerBuilder定义的时间的信息和在窗口间传递参数建立用户自定义事:若对应一个Windows消息时,需要了解Windows消息在PowerBuilder中的映射事件如:wm_keydown-----pbm_keydown, bm_getcheck(按钮消息类型)-----pbm_bmgetcheck,bn_clicked(通知)-----pbm_bnclicked.若不对应一个Windows消息时(也就是说,如果事件ID是一个PowerBuilder定制事件),则必须在脚本中使用Trigg erEvent函数或PostEvent函数来触发该事件。
例如:实现按Enter键,实现改变焦点需在相应的控件中建立一个定制事件,映射该事件到事件ID:pbm_keydown,写脚本IF KeyDown(KeyEnter!) THENsle_2.SetFocus()END IF例子:一数据窗口,其某一列(如第六列)使用单选钮(RadioButton)编辑风格,现想通过上,下键实现在RadioButto n之间的滚动解决,给数据窗口控件声明一个用户事件,映射事件ID:pdm_dwnkey(dwn是‚DataWindow notification‛的缩写词),写脚本:int colnum = 6 //列号long rownumrownum = dw_2.GetRow()IF KeyDown(KeyDownArrow!) AND &This.GetColumn() = colnum THENCHOOSE CASE dw_2.GetItemString(rownum,colnum)CASE "P" //单选钮中的第一个值This.SetItem(rownum,colnum,"L") //移到下一个值CASE "L" //单选钮中的第二个值This.SetItem(rownum,colnum,"A") //移到下一个值CASE "A"This.SetItem(rownum,colnum,"P") //移到下一个值END CHOOSEThis.SetActionCode(1) //忽略按键END IFIF KeyDown(KeyupArrow!) AND &This.GetColnum() = colnum THEN……END IF结构体:访问格式基本与C语言相同;对象外面引用对象级的结构体:在定义本结构体的对象中声明一个结构体变量,在对象外通过:对象名.结构体名.属性名来引用相关属性。
PB 基础总结

Blob - 大对象,例如图像Boolean– true / falseCharacter – a, bDate - mm-dd-yyyyDateTime– 2000-13-02 19:30:30Decimal – 123.45 ( 共18 位,不算小数点的位数)Double - 精度为15位的小数Integer– intLong - 大整数Real - 精度为6的小数String–“” 可以存在ASCII 中的Time – 12:12:12Unsigned integer - 无符号intUnsigned long - 无符号大整数Ang 数据类型Ang c = a + b ; // c 可以是任何数据类型,基本类型,结构,对象,数组等系统数据类型例如window 类型枚举类型常量constant int CI_abc = 20数组int a[10] // 从1 开始,integer li_stats[-3 to 5], 这样都可以,// 只能有1 维数组逻辑判断and or not控制if thenendifchoose case 表达式// choose 用法十分灵活,有点过分,可以不check 同一个表达式,如下例子:case 表达式语句case elseend choosechoose case numcase 6num = 7case IS > 36 // 太灵活了num = 36case elsenum = 56end case循环for 变量名= 初值to 终值[step 步长] 语句块nextfor i = 1 to 15 setp 2num++;nextdo while 条件语句块loop也有continue , exit ( 等于break )do语句块loop while 条件- 数组函数- blob函数- 数据类型转换函数- 日期,时间函数- 文件操作函数(重要)FileClose(fileno), FileDelete(filename), FileOpen, FileWrite, GetFileOpenName- 数值计算函数- 打印函数- 字符串操作函数创建自定义函数new function--注意, function 不是event其中有个Pass By 的选项,其中,如果是value 传值,reference 传地址, read only 也是传地址,只不过不准许修改如果是定义全局函数, 那么在new –> pb object –> function , 此时创建的函数为全局函数,并且有提示你保存位置,一般要保存在一起。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关于PB的若干问题1.DataWindow中无法编辑数据:设置Datawindow中各控件的Taborder;2.Datawindow没有capacity of updateRows->DataWindow Properties 勾上Allow Update应用程序的open()事件通用代码:SQLCA.DBMS=”ODBC”SQLCA.AutoCommit=falseSQLCA.PBParm=”connnectString=‟DSN=数据库名‟”Connect using SQLCA判断连接是否成功If SQLCA.sqlcode<0 thenMessagebox(“提示信息”,”数据库连接失败”)Return -1ElseReturn 1End if使数据窗口具有显示数据的能力,需要在窗口的open()事件中加入如下代码:Dw_1.SetTransObject(SQLCA) //使数据窗口与事务对象相连Dw_1.Retrieve() //执行检索操作DataWindow基本函数1.dw_n.InsertRow(row) //row:long型,指定某行在datawindow中指定行的前面插入一行2.dw_n.RowCount()返回datawindow中当前可用总行数3.dw_n.ScrollToRow(row)滚动到指定行4.dw_n.deleteRow(row)删除鼠标选中行5.dw_n.update([accept,/refetflag])将修改传入数据库添加数据Long l_rowInt sS = dw_1.RowCount(); //得到总行数L_row=dw_1.InsertRow(s + 1) //插入一行Dw_1.setFocus() //滚动到s+1行保存数据Dw_1.update()Dw_1.retrieve()确认后删除Int sS = dw_1.getRow()If s > 0 thenIf MessageBox(“删除”,”确定删除学号为”+dw_1.getItemString(s , “ sno”)+”的数据?”,Question! , yesNo! ,2) = 1 thenDw_1.RowsMow(s , s, primary!, dw_2, dw_2.RowCount+1, primary!)恢复删除的数据Rowsmove()函数Rowsmove(starRow, endRow, moveBuffer, targetDW, beforeRow, targetBuffer)要移动的数据从moveBuffer缓冲区的starRow开始到endRow结束的数据。
排序Dw_n. setSort(Format) //升,降序Dw_n.sort() //按指定方式排序,执行Dw_1.setSort(“sno A”) //升序排序Dw_1.sort() //执行排序操作Dw_1.setSort(“sno D”) //按“sno”降序排序Dw_1.sort() //执行排序操作PB中的SELECT查询Select “student”.”sno”, ”student”.snameInto :sle_text, :sle_2.textFrom “student”where “student”.”sno” = :sle_1.text;If sle_2.text = “”thenMessagebox(“无此记录”,”没有找到该学生!”)Sle_2.text=””End if注:将student数据库中,学号为”sle_1.text”的学生的学号添加到sle_1中;姓名添加到sle_2中。
Datawindow中记录的过滤检索语句String conditionCondition = “金额> 100 and 数量> 30”Dw_1.setFilter(condition) //设置过滤条件Dw_1.Filter() //执行过滤操作Dw_1.Retrieve()例:string id, nr, tj, fhId = trim(ddlb_1.text)Nr = ”” + trim(sle_1.text) + ““Fh = trim(ddlb_2.text)Tj = id + fh + “” + nr +”“Dw_1.setTransObject(SQLCA)Dw_1.setFilter(tj)Dw_1.Filter()Dw_1.retrieve()下拉数据窗口New -> datawindow -> 商品名称-> d_mcNew -> datawindow -> 全部字段->d_allOpen d_all,在Detail区域选择商品名称,属性-> Edit;styleType = DropDownDWdatawindow = d_mcdisplay Column = 商品名称.[其他属性自己看]此时,下拉数据窗口直接从数据库表中读入数据,而无需手工录入保存提示Int i_updateI_update = dw_1.update()If i_update = 1 thenMessagebox(“提示”,”保存成功”)ElseMessagebox(“提示”,”保存失败”)End if两个数据窗口的数据移动Dw_1.rowsMove(starRow, end Row,primary!, dw_2, currentRow, primary!)禁止默认对话框出现输入数据的ItemErrorr事件中写代码进行检查代码尾部加上”Return 1”Datawindow共享数据Dw_1 -> d_sp; dw_2-> 无代码:Dw_2.dataObject = “d_sp”Dw_1.shareData(dw_2)编辑框的Modified事件可以用于检查数据合法性模糊查询%-----任意字符_-----单一字符String nr, zd, sql;Nr = trim(sle_1.text);Zd = trim(ddlb_1.text)If zd = “名字”thenSql = “select * from 职工表where 名字like …”+ nr + “‟”Dw_1.SetTransObject(SQLCA)DW_1.SetSqlSelect(sql)Dw_1.Retrieve()End if删除数据If zd = “名字”thenDelete from 职工表where 名字= :trim(sle_1.text)End if范围内的数据统计String sqlDate qssj,zzsjQssj = date(sle_1.text)Zzsj = date(sle_2.text)Sql = “select * from 销售表where 销售日期>=‟” + string(qssj) + ”‟” + and 销售日期<= string(zzsj) + ”‟”Dw_1.setTransObject(SQLCA)DW_1.SetSqlSelect(sql)Dw_1.Retrieve()上一条记录: dw_1.scrollPriorRow()下一条记录: dw_1.scrollNextRow()主从数据窗口Dw_cx : 只显示代码和姓名的数据窗口,Grid风格Dw_zgxx: 职工信息数据窗口, Free风格双击dw_cx中一项后,在dw_zgxx中显示该职工全部信息声明全局变量:String zgdm, sqlDw_cx的DoubleClicked事件代码:Zgdm = trim(dw_cx.getItemString(dw_cx.getrow(),1)Sql = “select * from zgxx where 职工代码= …” + zgdm +”‟”;Dw_zgxx.setSqlSelect(sql)Dw_zgxx.Retrieve()窗体的open事件代码Dw_cx.setTransObject(SQLCA)Dw_cx.Retrieve()Insert语句String xm, xb, zwXm = trim(sle_1.text)Xb = trim(sle_2.text)Zw = trim(sle_3.text)If xm <> ””and zw <> “”thenInsert into 职工信息表姓名,性别,职务values(:xm, :xb, :zw); End ifSelect 语句String name, xm, xb, zwSelect * into :xm, :xb, :zwFrom 员工信息表where 员工姓名= :nameSle_1.text = xmSle_2.text = xbSle_3.text = zwUpdate语句String xm, xb, zw, nameXb = sle_1.text;Xm = sle_2.textZw = sle_3.textUpdate 员工信息表set 员工姓名= :xm, 性别= :xb, 职务= :zw Where 员工姓名= :nameMessagebox(“提示”,”修改成功”)Ddlb_1.reset()Delete语句Delete from 员工信息表where 员工姓名=:name;Select 员工姓名into :sle_1.text from 员工信息表Where 员工姓名= :ddlb_1.text;Dw_x.deletedCount() //已从dw_x中删除,但还没有保存的数据的总行数Dw_x.modifiedCount(0 //已修改,但还没有保存的总行数closeQuery事件integer returnValuedw_1.acceptText()if dw_1.deletedCount() + dw_1.modifiedCount() > 0 thenreturnValue = messagebox(“提示”,”数据已经修改,是否保存?”,Question! YesNoCancel!,1)choose case returnV aluecase 1if dw_1.update() = 1 thencommit;return 0elserollback;messagebox(“提示”,”数据保存失败”)end ifcase 2return 0case 3return 1end chooseend ifDTPicker 日期与时间控件Ole_1:日期时间控件显示日期按钮的Clicked事件String year, moth, dayYear = string(ole_1.object.year) + “年”Month = string(ole_1.object.month) + “月”Day = string(ole_1.object.day) + “日”Sle_1.text = year + month + day时间String hour, minute, secondHour = string(ole_2.object.hour)Minute = string(ole_2.object.minute)Second = stirng(ole_2.object.second)If long(minute) < 0 thenMinute = “:0” + minuteElseMinute = “:” + minuteEnd ifIf long(second) < 10 thenSecond =”:” + secondElseSecond = “:” + secondEnd ifSle_2.text=hour + minute +second使可编辑的数据窗口只读Dw_1.Object.DataWindow.ReadOnly = “yes”数据按标题排序Dw_1的Clicked事件代码:String s_oldsort, s_columChar s_csortIf right(,2) = “_t”thenS_columu = left(string(),(len(trim(string())) – 2)/2)S_oldSor = dw_1.describe(“datawindow.table.sort)If s_colum = left(s_oldSort,(len(s_oldSort)-2)/2) thenC_csort = right(s_oldSort, 1)If c_csort = …A‟ thenC_csort = …D‟ElseC_csort=‟A‟End ifDw_1.setSort(s_colum +”“ + c_csort)ElseDw_1.setsort(s_colum + …A‟)End ifDw_1.sort()End if游标String varvalueDeclare cur_1 cursor for select 期刊名称form 定单表;Open cur_1Fetch cur_1 into :varvalue;Do while sqlca.sqlcode = 0Ddlb_1.addItem(varvalue)Fetch cur_1 into :varvalue;LoopClose cur_1;//顺序将定单表中的期刊名称加入到ddlb_1的下拉列表中代码建表String sqlMysql = “create table student(aa char(3) not null,name char(8), parimary key(aa)”Execute immediate :mysql using SQLCA;If sqlca.sqlcode = -1 thenRooback using sqlca;Messagebox(“提示信息”,”建表错误”)ElseCommit using sqlca;End if数据窗口的自动计算区在数据窗口的summary区Insert -> Control -> text 设置显示文字加入计算列1.在数据窗口的detail区选择要加入计算列的列名2.insert -> control ->sum3.propertied -> general -> compute Expression = string(sum(列名forall),”###.000)”右键菜单New -> menu = m_menu文件菜单项.visible = false为文件菜单项添加子菜单W_window -> menuName属性= m_menuW_window 的rbuttonclown事件加入代码:M_menu.m_文件.popmenu(this.PointerX() , this.Pointery())删除数据表中所有行String sqlSql = “truncate table 表名”Execute immediate :sql using sqlca;Messagebox的换行MessageBox(“C”,”第一行” + “~r” + “第二行”);利用DataStore共享数据DataStore dw_studentDs_student = create datastoreDs_student = “dw_student”//dw_student为一数据窗口Ds_student .setTransObject(SQLCA);Ds_student.retrieve()Dw_2.dataObject = ds_student.dataObjectDs_student.shareData(dw_2)背景音乐声明全局外部函数Function Boolean andPlaySoundA(string SoundName, ulong Flags)Library “WINMM.DLLD”事件代码:Boolean snd;String strSound;StrSound = “py.wav”//指定要播放的音乐文件Snd = andSoundA(strSound,1)//sndSoundA()为API函数获取数据窗口列属性String s_xm //xm是数据窗口中的一列名S_xm = dw_1.object.xm[dw_1.getRow()]制作splash窗体Open(w_splash);Open(w_main_;W_main的open()事件Sleep(2) //延迟2秒Close(s_splash)限制程序运行次数App的open事件代码:Ulong l_handle, lu_classString ls_nameLs_name = ”应用程序名”L_handle = FindWindowA(lu_class,ls_name)If l_handle > 0 thenMessagebox(“提示信息”,”程序” + this.appname +”已启动”)Halt closeElseOpen(w_main)End if修改数据窗口内控件的值Dw_1.modify(“t_1.text = …” + string(…) +”‟”Dw_1.modify(“t_1.visible = false”)PB函数1.dw_x.GetItemString(long row, long colum)//获得指定数据窗口指定行列的字符串值//Row----行号, colum---列号2.dw_x.SetSQLSelect(string str)//为数据窗口设置检索的SQL Select语句//str---select语句字符串变量3.dw_x.selectRow(n, select)//选中或取消选中行//n---指定选定的行号//select = true:选中;select = false:取消选择4.dw_x.object.datawindow.readonly = “yes”//使数据窗口只读。