powerbuilder编程简单入门个人总结优选.docx
- 文档编号:4487159
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:13
- 大小:136.01KB
powerbuilder编程简单入门个人总结优选.docx
《powerbuilder编程简单入门个人总结优选.docx》由会员分享,可在线阅读,更多相关《powerbuilder编程简单入门个人总结优选.docx(13页珍藏版)》请在冰豆网上搜索。
powerbuilder编程简单入门个人总结优选
最新文件----------------仅供参考--------------------已改成-----------word文本---------------------方便更改
一种简单的powerbuilder10数据库编程介绍
1、需求分析与数据库建立
进行需求分析(需求分析文档),确定数据关系,建立各种数据表,建立数据库(Access),设置ODBC数据源(控制面板->管理工具->数据源ODBC->“用户DSN”菜单下点“添加”→选相应的数据源驱动程序,如果用Access2003建立的,则选第三项“DriverdoMicrosoftAccess(*.mdb),然后点击“完成”->输入数据源名,如mydata,然后点击“选择”按钮选择建好的数据库,最后点“确定”,如下图所示)
2、界面设计(功能界面、重要数据表维护界面)
界面设计主要分为几个部分
(1)按照管理系统所需的功能设计界面。
首先画出所有可能的业务流程(数据的各种可能输入、修改、删除业务,数据的输出、显示业务)
(2)按照需要维护的表设计界面(往往给最高权限管理员直接修改数据用)
3、开始程序编写
(1)新建一个workspace
(new->workspace->workspace)
(2)在workspace下建立一个目标
(new->Target->application),可取名frame
(3)在目标下建一个主窗口
可取名w_main,窗体名一般以w_开头(new->PBObject->Window),将其WindowType设为“mdihelp!
”
(4)为主窗口建一个主菜单
可取名m_frame,菜单名一般以m_开头(new->PBObject->Menu)
(5)程序中设置ODBODBC
点击
按钮,选中“ODBODBC”项,然后单击右边“New”按钮,弹出如下对话框,设置ProfileName和DataSource,如图所示。
(6)建立配置文件
配置文件取名“config.ini”,内容如下:
[MyDB]
DBMS=ODBC
AutoCommit=False
DBParm=ConnectString='DSN=mydata;UID=;PWD='
(7)自动连接数据库与退出程序关闭数据库的编写
首先建立GlobalVariables如下:
stringgs_userid,gs_username//登录用户标识、用户姓名
stringgs_root_path,gs_ini_path//应用路径和主配置文件路径
其次申明GlobalExternalFunctions如下:
FUNCTIONintGetComputerNameA(refstringcomputername,reflongsize)LIBRARY"KERNEL32.DLL"aliasfor"GetComputerNameA;Ansi"
FUNCTIONlongGetCurrentDirectoryA(longnBufferLength,REFstringszBuffer)LIBRARY"KERNEL32.DLL"aliasfor"GetCurrentDirectoryA;Ansi"
FUNCTIONlongSetCurrentDirectoryA(stringszPathName)LIBRARY"KERNEL32.DLL"aliasfor"SetCurrentDirectoryA;Ansi"
//endprototypes
在程序的总入口(进入“
”)Open事件中写入以下代码:
//Profilemoneyandfriends
stringls_1
//设置应用根目录
gs_root_path=space(255)
GetCurrentDirectoryA(255,gs_root_path)
ifright(gs_root_path,1)='\'then
gs_root_path=left(gs_root_path,len(gs_root_path)-1)
endif
//设置配置文件路径
gs_ini_path=gs_root_path+"\config.ini"
IFnotFileExists(gs_ini_path)THEN
MessageBox("找不到配置文件"+gs_ini_path,"系统配置错误",stopsign!
ok!
)
RETURN
ENDIF
//SetProfileString(gs_ini_path,'DBMS','
ls_1=ProfileString(gs_ini_path,'MyDB','DBMS','ODBC')
SQLCA.DBMS=ls_1
SQLCA.AutoCommit=False
ls_1=ProfileString(gs_ini_path,'MyDB','DBParm','error')
SQLCA.DBParm=ls_1
connectusingsqlca;
open(w_main)//打开主界面
在Close事件中加入如下代码:
disCONNECTUSINGsqlca;
(8)建立新的具体功能窗体(如w_zichuangti)
8.1设置窗体BackColor为“Cream”,输入窗体Title;要在1024*768分辨率下基本满屏,窗体大小可设置为“4645*2748”
8.2在新窗体上一般用GroupBox来划分功能区域,设置该控件的字体为“宋体”,大小为“10”,背景颜色为“Cream”
8.3用静态文本做功能说明或指示,一般加黑,宋体9号字
示例程序界面如下:
(9)响应菜单click事件弹出子窗口(相同子窗口只弹出一次待研究)
在菜单下编写代码打开窗体(双击菜单即可在Click事件下编写),简单代码如下:
//选择菜单时调出子窗体
windowlw
opensheet(lw,'w_zichuangti',parentwindow,0,Cascaded!
)
lw.WindowState=Maximized!
(10)相同的子窗口只让弹出一次(代研究)
(10)建立数据窗口
(11)添加新的pbl文件
一般要用不同的pbl文件分类存储不同窗体、数据窗口和菜单等资源;建立新的pbl文件的方法如下:
点击工具栏上“Library”按钮,然后在弹出子窗口中进入程序所在文件夹,在工具栏左下有“
”创建pbl的按钮。
创建好pbl 库文件后在目标(如果按前面建立名称为frame的目标,则在“
”)上单击右键,选择属性在弹出窗口中可添加LibraryList,如下图,也可在这里建立新的pbl库文件
(12)如何编译出可运行程序
首先新建一个Project(File->new->Project->Application),如取名p_main
然后打开新建的Project,设置可执行文件生成目录。
(13)DataWindow窗口连通数据库
dw_1.settransobject(sqlca)
(14)格式化日期(2007-10-05变为20071005)
f_format_date函数,输入string变量ps_date,返回string
ifisnull(ps_date)thenreturn""
iflen(ps_date)<10thenreturnps_date
returnleft(ps_date,4)+mid(ps_date,6,2)+mid(ps_date,9,2)
(15)退出界面及退出界面时检查数据是否保存
退出子界面(控江事件里面写代码):
Close(Parent)
假设检测的数据窗口名为dw_zcrxx
ifdw_zcrxx.ModifiedCount()+dw_zcrxx.deletedcount()>0then
ifMessageBox('提示','数据没有保存,是否不保存退出?
',Question!
YesNo!
)=2then
return1
endif
endif
4、其他编程
4.1将数据库中数据显示到dropdownlistbox的下拉菜单里
建立“f_ddlb_populate”函数,函数输入两个变量:
dropdownlistbox:
ddlb_this要显示到的空间名
string:
as_sql查询数据库的sql语句
函数代码如下:
ddlb_this.reset()
ddlb_this.additem("")
stringls_disp,ls_data
DECLAREmy_cursorDYNAMICCURSORFORSQLSA;
PREPARESQLSAFROM:
as_sql;
OPENDYNAMICmy_cursor;
FETCHmy_cursorINTO:
ls_disp,:
ls_data;
ifisnull(ls_disp)thenls_disp=""
ifisnull(ls_data)thenls_data=""
dowhilesqlca.sqlcode=0
ddlb_this.additem(trim(left(ls_disp+space(200),200)+ls_data))
FETCHmy_cursorINTO:
ls_disp,:
ls_data;
loop
CLOSEmy_cursor;
as_sql语句里面需要有两个输出
如果ddlb的数据项比较多,一般选中VScrollBar
如下调用这个函数:
stringls_sql
ls_sql="selectzcr_bh,''fromzcrorderbyzcr_bh";//举例
f_ddlb_populate(ddlb_bh,ls_sql)//将ddlb_bh列表框里写入列表项
4.2数据窗口常用几个函数
dw_deal.settransobject(sqlca)//连接数据库
dw_deal.insertrow(numberrow):
在指定行之前插入一行,如果要在最后一行新增一行,取row=0
dw_deal.deleterow(numberrow):
删除指定行,row=0时删除当前行
dw_deal.rowcount():
返回数据窗口中总行数
dw_deal.setitem(li_n,'lxr_zpdz','pic\')//设置某行某列的数据
integerdwcontrol.AcceptText():
AppliesthecontentsoftheDataWindowcontrol'seditcontroltothecurrentitemintheDataWindowbuffer.
integerdwcontrol.Filter():
根据给定过滤条件来列出满足条件的记录,过滤条件由SetFilter函数指定
integerdwcontrol.SetFilter(stringformat):
设定过滤条件
integerdwcontrol.GetColumn():
ReturnsthenumberofthecurrentcolumnintheDataWindowcontrol
stringdwcontrol.GetColumnName():
ReturnsthenameofthecurrentcolumnintheDataWindowcontrol.
datedwcontrol.GetItemDate(longrow,stringcolumn{,DWBufferdwbuffer,booleanoriginalvalue})
datedwcontrol.GetItemDate(longrow,integercolumn{,DWBufferdwbuffer,booleanoriginalvalue})
GetItemStringGetItemString(…):
longdwcontrol.GetNextModified(longrow,DWBufferdwbuffer):
SetRow(longrow):
设定指定行为当前行
GetRow():
获得数据窗口中当前行
GetSelectedRow(longrow):
获得指定行row后面第一个被选中的行,如没有则返回零
integerdwcontrol.SelectRow(longrow,booleanselect):
选中指定行
IsSelected(longrow):
判断某行是否被选中
ScrollToRow(numberrow):
窗口数据滚动在指定行,如果row=0则规东到第一行
integerdwcontrol.RowsMove(longstartrow,longendrow,DWBuffer,datawindowtargetdw,longbeforerow,DWBuffertargetbuffer)将一个数据窗口的几行数据移到另一个数据窗口。
movebuffer和DWBuffer的范围为Primary!
、Delete!
和Filter!
stringdwcontrol.Describe(stringpropertylist):
返回数据窗口中控件属性
stringdwcontrol.Modify(stringmodstring):
修改数据窗口中控件属性
integerdwcontrol.SetItemStatus(longrow,integercolumn,dwbufferdwbuffer,dwitemstatusstatus):
改变数据状态,dwitemstatus有以下四种状态
NotModified!
,DataModified!
,New!
,NewModified!
4.3数据窗口常用几个事件
RetrieveRowevent(DataWindows):
在一行被检索后响应;返回0则继续,返回1则停止检索
4.4常用SQL语句
SELECT*
FROMfinances
WHEREdescriptionLIKE'gs_'ESCAPE'S'
这里ESCAPE‘S’表示不将’s’后面的通配符’_’作为通配符,而只是作为一般的字符
4.5给数据窗口增加条件
ThefollowingscriptsdynamicallyaddaWHEREclausetoaDataWindowobjectthatwascreatedwithaSELECTstatementthatdidnotincludeaWHEREclause.(SincethisexampleappendsaWHEREclausetotheoriginalSELECTstatement,additionalcodewouldbeneededtoremoveawhereclausefromtheoriginalSELECTstatementifithadone.)ThistechniqueisusefulwhentheargumentsintheWHEREclausemightchangeatexecutiontime.
TheoriginalSELECTstatementmightbe:
SELECTemployee.emp_id,employee.l_name
FROMemployee
Presumably,theapplicationbuildsaWHEREclausebasedontheuser'schoices.TheWHEREclausemightbe:
WHEREemp_id>40000
Thescriptforthewindow'sOpeneventstorestheoriginalSELECTstatementinoriginal_select,aninstancevariable:
dw_emp.SetTransObject(SQLCA)
original_select=&
dw_emp.Describe("DataWindow.Table.Select")
ThescriptforaCommandButton'sClickedeventattachesaWHEREclausestoredintheinstancevariablewhere_clausetooriginal_selectandassignsittotheDataWindow'sTable.Selectproperty:
stringrc,mod_string
mod_string="DataWindow.Table.Select='"&
+original_select+where_clause+"'"
rc=dw_emp.Modify(mod_string)
IFrc=""THEN
dw_emp.Retrieve()
ELSE
MessageBox("Status","ModifyFailed"+rc)
ENDIF
4.6常用PowerScript语句
1)CHOOSECASE语句
CHOOSECASEWeight
CASEIS<16
..
CASEIS16to18
..
CASEELSE
..
ENDCHOOSE
2)循环语句
DOUNTIL条件
语句块
LOOP
或
DOWHILE条件
语句块
LOOP
DO
语句块
LOOPUNTIL条件
FORvarname=startToend{STEPincrement}
statementblock
NEXT
4.7程序中修改数据窗口中的选择条件(不是利用过滤函数)
在数据窗口与数据库联接时的SQL语句中用过滤条件比检索后用过滤条件过滤效率更高,因此如果需要显示满足一定条件的数据时,一般时直接修改数据窗口的SQL搜索语句。
程序编写过程如下:
(1)编写全局函数f_change_where(string ps_sql,string ps_where)用某条件ps_where代替SQL选择语句ps_sql中的where条件,代码如下:
ifps_sql=""orps_where=""thenreturnps_sql
ps_sql=lower(ps_sql)
stringls_front,ls_end,ls_where,ls_return
ifpos(ps_sql,"where")>0then
ls_front=left(ps_sql,pos(ps_sql,"where")-1)
ifpos(ps_sql,"groupby")>0then
ls_end=right(ps_sql,len(ps_sql)-pos(ps_sql,"groupby")+1)
ls_where=mid(ps_sql,pos(ps_sql,"where")+6,len(ps_sql)-len(ls_front)-len(ls_end)-6)
elseifpos(ps_sql,"orderby")>0then
ls_end=right(ps_sql,len(ps_sql)-pos(ps_sql,"orderby")+1)
ls_where=mid(ps_sql,pos(ps_sql,"where")+6,len(ps_sql)-len(ls_front)-len(ls_end)-6)
else
ls_where=mid(ps_sql,pos(ps_sql,"where")+6,len(ps_sql)-len(ls_front)-6)
endif
ls_return=ls_front+"where("+ls_where+")and"+ps_where+""+ls_end
else
ifpos(ps_sql,"groupby")>0then
ls_front=left(ps_sql,pos(ps_sql,"groupby")-1)
ls_end=right(ps_sql,len(ps_sql)-pos(ps_sql,"groupby")+1)
elseifpos(ps_sql,"orderby")>0then
ls_front=left(ps_sql,pos(ps_sql,"orderby")-1)
ls_end=right(ps_sql,len(ps_sql)-pos(ps_sql,"orderby")+1)
else
ls_front=ps_sql
ls_end=""
endif
ls_return=ls_front+"where"+ps_where+""+ls_end
endif
returnls_return
(2) 在窗口中声明局部变量用来记录最初的没有where语句的窗口的SQL查询语句
stringis_original_sql
(3)声明局部变量ls_old_select,ls_new_select,如下使用
stringls_old_select,ls_new_select
ls_old_select=dw_ttxx.GetSQLSelect()
ifis_original_sql=""then
is_original_sql=ls_old_select
else
//避免条件被循环添加
ls_old_select=is_original_sql
endif
ls_new_select=f_change_where(ls_old_select,is_conditions)
dw_窗口.SetSQLSelect(ls_new_select)
最新文件----------------仅供参考--------------------已改成-----------word文本---------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- powerbuilder 编程 简单 入门 个人 总结 优选