powerbuilder编程简单入门个人总结.docx

上传人:b****3 文档编号:26479022 上传时间:2023-06-19 格式:DOCX 页数:15 大小:135.93KB
下载 相关 举报
powerbuilder编程简单入门个人总结.docx_第1页
第1页 / 共15页
powerbuilder编程简单入门个人总结.docx_第2页
第2页 / 共15页
powerbuilder编程简单入门个人总结.docx_第3页
第3页 / 共15页
powerbuilder编程简单入门个人总结.docx_第4页
第4页 / 共15页
powerbuilder编程简单入门个人总结.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

powerbuilder编程简单入门个人总结.docx

《powerbuilder编程简单入门个人总结.docx》由会员分享,可在线阅读,更多相关《powerbuilder编程简单入门个人总结.docx(15页珍藏版)》请在冰豆网上搜索。

powerbuilder编程简单入门个人总结.docx

powerbuilder编程简单入门个人总结

一种简单的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)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1