pb常用操作技巧.docx
《pb常用操作技巧.docx》由会员分享,可在线阅读,更多相关《pb常用操作技巧.docx(47页珍藏版)》请在冰豆网上搜索。
![pb常用操作技巧.docx](https://file1.bdocx.com/fileroot1/2022-11/25/693854dc-0619-4232-8d62-91da6acee759/693854dc-0619-4232-8d62-91da6acee7591.gif)
pb常用操作技巧
这是刚毕业时在某一“大”公司使用PB6.5开发联通营帐系统时的笔记,虽然好久没有也许以后也不会再使用pb开发程序了,但这算是我使用过的唯一一个前端专业开发工具,把笔记记录下来,权当作纪念吧,^_^
//PB中标准调用sql语句
ls_sql="selectroad_namefrombb_data_wide_bus_temp_twhereregister_number='"+ls_register_number+"'"
declarecur_getdynamiccursorforsqlsa;
preparesqlsafrom:
ls_sql;
opendynamiccur_get;
fetchcur_getinto:
ls_value;
ifsqlca.sqlcode<>0then
messagebox('操作信息','提取失败!
',exclamation!
)
endif
closecur_get;
//PB中标准循环调用sql语句
DECLAREcur_sqlDYNAMICCURSORFORSQLSA;
PREPARESQLSAFROM:
ls_sql;
OPENDYNAMICcur_sql;
dowhilesqlca.sqlcode=0
FETCHcur_sqlINTO:
ls_register_number,:
ls_complete_note;
ll_sqlcode=sqlca.sqlcode
ifll_sqlcode<0then
CLOSEcur_sql;
af_disconnect()
messagebox('错误提示','检索受理编号错误!
',StopSign!
)
return
elseifll_sqlcode=100then
exit
endif
ddlb_register_number.additem(trim(ls_register_number+'|'+ls_complete_note))
loop
CLOSEcur_sql;
//窗口open事件通用脚本
//置窗口居中
af_center_window(this)
//连接数据库
af_connect()
//定义变量
dataWindowChilddwc
//获取城市代码下拉列表并取值
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_code'))
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(),'service_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()
//定义变量
dataWindowChilddwc
//dw_1检索数据
dw_1.setTransObject(sqlca)
dw_1.Retrieve(ii_service_kind)
//dw_2检索数据
intli_row,li_row_temp
dw_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)
//如果未检索到数据插入一空行,有数据就过滤
stringls_filter
intli_action
ifli_row_temp=0then
dw_2.insertRow(0)
else
forli_row=1todw_2.rowCount()
li_action=dw_2.getItemNumber(li_row,'action')
ls_filter='action<>'+string(li_action)
dw_1.setFilter(ls_filter)
dw_1.filter()
next
endif
//断开数据库
af_disconnect()
//增加按钮通用脚本
//变量定义
intli_step,li_action,li_auto_status,li_row
//确认选择要增加的记录
ifdw_1.getSelectedRow(0)=0then
MessageBox('提示信息','请选择要添加的记录!
',exclamation!
)
return
endif
//取出要增加的信息
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)
//删除按钮通用脚本
//删除前先确认
IFdw_2.GetRow()=0THEN
MessageBox('提示信息','请选择要删除的记录!
',exclamation!
)
Return
ELSE
IFMessageBox("提示信息","确实要删除指定的记录?
",Question!
YesNo!
2)=2THENReturn
dw_2.DeleteRow(dw_2.getRow())
ENDIF
//保存按钮通用脚本
//连接数据库
af_connect()
//定义变量
stringls_city_code,ls_error
intli_service_kind,li_apply_event,li_row,li_step
dataWindowChilddwc
//检测数据是否发生变化
dw_2.AcceptText()
IFdw_2.ModifiedCount()+dw_2.DeletedCount()=0THEN
MessageBox("操作提示","数据未发生变化,无需保存!
",exclamation!
)
return
ENDIF
//检测是否为空或零
dw_2.setSort('stepa')
dw_2.sort()
FORli_row=1TOdw_2.RowCount()
li_step=dw_2.GetItemNumber(li_row,'step')
IFIsNull(li_step)ORli_step=0THEN
MessageBox('操作提示','步骤不能为空或零,请重新输入!
',exclamation!
)
dw_2.setRow(li_row)
Return
ENDIF
NEXT
//保存
dw_2.SetTransObject(sqlca)
ifdw_2.update()=1then
commit;
messagebox("提示信息","保存成功!
")
dw_2.ScrollToRow(dw_2.RowCount())
else
ls_error=sqlca.sqlErrText
rollback;
messagebox("提示信息","保存失败!
"+char(13)+ls_error,stopSign!
)
return
endif
//断开数据库
af_disconnect()
//打印按钮通用脚本
ifdw_1.rowCount()>0then
ifPrintSetup()=-1then
messagebox('提示信息','打印机设置出错!
',Exclamation!
)
return
else
ifdw_1.print(true)=1then //显示可以取消打印的对话框
Messagebox('提示信息',"打印成功!
")
else
Messagebox('提示信息',"打印失败!
",stopSign!
)
endif
endif
else
Messagebox('提示信息',"没有数据可以打印,请先查询数据!
",exclamation!
)
return
endif
//导出按钮通用脚本
ifdw_1.rowcount()<=0then
messageBox('提示信息','没有数据可以导出,请先查询!
',exclamation!
)
return
endif
ifdw_1.SaveAS('',text!
true)=1then
messageBox('提示信息','导出成功!
')
endif
//导入按钮通用脚本
//变量定义
stringls_pathfile,ls_file,ls_title,ls_ext,ls_filter
int li_pos,li_fileid
long 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=0orls_file="")then
return
endif
sle_file_name.text=ls_pathfile
cb_ok.enabled=true
//退出按钮通用脚本
close(parent)或closeWithReturn(parent,returnvalue)
//调用过程通用脚本
ifdw_wp.rowcount()<=0thenreturn
//变量定义
string ls_sql,ls_err_info
string ls_register_number,ls_accept_city,ls_department,ls_oper_person
integer li_err_code,li_apply_event
//变量赋值
ls_register_number=dw_wp.getitemstring(1,'register_number')
ls_accept_city=gs_citycode
li_apply_event=dw_wp.getitemnumber(1,'apply_event')
ls_department=gl_dealerid
ls_oper_person=gs_workerid
//连接数据库
af_connect()
//调用配号撤单过程
ls_sql="executebb_pstn_assign_no_repeal_p(?
?
?
?
?
)"
declareproc_assign_no_repealdynamiccursorforsqlsa;
preparesqlsafrom:
ls_sql;
opendynamicproc_assign_no_repealusing:
ls_register_number,:
ls_accept_city,:
li_apply_event,:
ls_department,:
ls_oper_person;
ifsqlca.sqlcode=-1then
ls_err_info=sqlca.sqlErrText
closeproc_assign_no_repeal;
Rollback;
Messagebox("错误信息1","执行异常!
"+ls_err_info,stopSign!
)
af_disconnect()
return
Endif
fetchproc_assign_no_repealinto:
li_err_code,:
ls_err_info;
ifli_err_code<0then
closeproc_assign_no_repeal;
Rollback;
Messagebox("错误信息2","执行异常!
"+ls_err_info,stopSign!
)
af_disconnect()
return
endif
closeproc_assign_no_repeal;
commit;
//断开数据库
af_disconnect()
//撤单成功后打印工单
dw_wp.print()
//PB某些控件的中文显示问题
假如PB的ListView不能正常显示中文,则应该将ListView的FontCharSet属性设置成其他类型。
将
ListView所在的对象Export成源码。
在源码中找到ListView定义部分,将FontCharSet属性该成
DefaultCharSet!
如果PB的其他控件也发生相应的现象时,同样调整一下它的FontCharSet属性。
一般
来说对于简体中文字体,在中文WINDOWS环境中应该设置成DefaultCharSet!
。
对显示中文有问题的控件
将它的FontChatSet属性强制设置成DefaultCharSet!
应该没有问题。
或者改变字体!
!
!
//PB6.5运行时动态连接库(RuntimeLibrary)
PBVM60.DLL(PowerBuilder虚拟机)(必需)
PBDWE60.DLL(DataWindow引擎)(可选)
PBRTC60.DLL(RichTextControl)(可选)
PBTRA60.DLL(DLLusedfortracingdbcalls)(可选)
与所需连接的数据库的直连接口(NativeDriver)或ODBC接口(ODBCDriver)
PBSYC60.DLL(连接Sybase的直连接口)
PBO7360.DLL(连接Oracle7.3的直连接口)
所需连接的数据库的Client端(如Sybase的OpenClient,Oracle的SQLNet)
以上是Sybase公司的建议。
我的经验是,编译好的程序必须有pbdwe60.dll和pbvm60.dll才行。
另外,如果使用ODBC联结数据库则还需pbodb60.dll,如果使用的专用接口,则需对应数据库的DLL,
如Oracle7.3用PBO7360.DLL,Sybase用PBSYC60.DLL
//pb6.5升级到6.5.1后exe文件执行可能出现问题
重新拷贝\Sybase\Shared下的pbvm60.dll(3.24M)代替未升级时pbvm60.dll(3.25M)就ok了!
//几个常用颜色
红:
rgb(255,0,0) 醒目或改变作用
蓝:
rgb(0,0,255) 注意作用
深绿:
rgb(0,128,0) 提示作用
//SQLAnyWhere安装方法:
在安装PB65时的自定义安装中组件ODBCDatabasesDrives里的SybaseSQLanywhere5.5.04,这只是
安装了PB组件的ODBC驱动程序,并未安装SQLANYWHERE,如果你需要使用SQLAnywhere的管理工具,你
还得进行如下的操作:
在正版PB6.5的第六张盘里,有一目录名是SQLANY5504,这里面就是SQLANYWHERE
的安装盘了,运行SETUP即可。
如果是盗版,那只好靠你自已去找了。
在安装目录下有一个SETUP.BMP,
上面有SQLANHWERE字样。
//很多书上讲到FILE菜单中点CREATEDATABASE,怎么能让这个选项出来?
在pb第六张光碟(或使用D版第二张碟\6\sqlany5504),进入sqlany5504目录,安装sqlanywhere5.5,
默认安装路径为:
C:
\ProgramFiles\Sybase\SQLAnywhere5.0\win32,安装完成以后,修改
autoexec.bat,增加一行,用于将sqlanywhere的文件放到系统搜索路径中:
path%PATH%;C:
\Progra~1\Sybase\SQLAny~1.0\win32
这样重新启动后,你就可以看到File菜单下多出了CreateDatabase这一项。
特别说明:
在...\win32此目录下有一个很重要的文件,dbtl50t.dll,你可以做一个实验,进入
PBDataBase画板(不需要退出),然后切换到文件管理器中将dbtl50t.dll文件给改名,再切换回PB中,
点File菜单,你将会发现CreateDatabase这一项又消失了。
将dbtl50t.dll改名回来,回到PB中再点此
File菜单,一切又恢复正常。
不过没有CreateDataBase这一项都不是很重要,您还可以使用
SybaseCentral来管理数据库,它才是Sqlanywhere数据库的全面管理工具,可以建存贮过程,触发器。
(在"开始"->"程序"->"Sybase"->"Sqlanywhere5.0"下面,在硬盘中的执行文件名是scview.exe).
//不安装Oracle客户连接Oracle8的方法
请将以下文件拷贝到运行文件所在目录
一、ODBC动态库:
ctl3d32.dllmsvcrt40.dllodbc16gt.dllodbc32.dllodbc32gt.dllodbccp32.dllodbccr32.dllodbcint.dll
二、建立EXTRA子目录,将MSVCRT.DLL文件拷贝到该子目录下
EXTRA\MSVCRT.DLL
三、ORACLE动态库及配置文件
Tnsnames.oraCORE35O.DLLNASNSNT.DLLNAUNTSNT.DLLNCRNT.DLLNlnt.dllNLSRTL32.DLLNnfdnt.dll
NNFNNT.DLLNSNT.DLLNTNT.DLLNTTNT.