powerbuilder编程简单入门个人总结Word文档格式.docx
- 文档编号:17469127
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:12
- 大小:135.82KB
powerbuilder编程简单入门个人总结Word文档格式.docx
《powerbuilder编程简单入门个人总结Word文档格式.docx》由会员分享,可在线阅读,更多相关《powerbuilder编程简单入门个人总结Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
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"
GetCurrentDirectoryA;
FUNCTIONlongSetCurrentDirectoryA(stringszPathName)LIBRARY"
SetCurrentDirectoryA;
//endprototypes
在程序的总入口(进入“
”)Open事件中写入以下代码:
//Pro
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"
IFnot(gs_ini_path)THEN
MessageBox("
找不到配置文件"
+gs_ini_path,"
系统配置错误"
stopsign!
ok!
)
RETURN
ENDIF
//SetPro(gs_ini_path,'
DBMS'
'
ls_1=Pro(gs_ini_path,'
MyDB'
ODBC'
)
SQLCA.DBMS=ls_1
SQLCA.AutoCommit=False
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
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:
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)
4.6常用PowerScript语句
1)CHOOSECASE语句
CHOOSECASEWeight
CASEIS<
16
..
CASEIS16to18
CASEELSE
ENDCHOOSE
2)循环语句
DOUNTIL条件
语句块
LOOP
或
DOWHILE条件
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,"
)-1)
ifpos(ps_sql,"
groupby"
ls_end=right(ps_sql,len(ps_sql)-pos(ps_sql,"
)+1)
ls_where=mid(ps_sql,pos(ps_sql,"
)+6,len(ps_sql)-len(ls_front)-len(ls_end)-6)
elseifpos(ps_sql,"
orderby"
else
)+6,len(ps_sql)-len(ls_front)-6)
endif
ls_return=ls_front+"
where("
+ls_where+"
)and"
+ps_where+"
"
+ls_end
else
ls_front=left(ps_sql,pos(ps_sql,"
ls_front=ps_sql
ls_end="
where"
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="
is_original_sql=ls_old_select
//避免条件被循环添加
ls_old_select=is_original_sql
endif
ls_new_select=f_change_where(ls_old_select,is_conditions)
dw_窗口.SetSQLSelect(ls_new_select)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- powerbuilder 编程 简单 入门 个人 总结