powerbuilder编程简单⼊门(个⼈总结)
⼀种简单的powerbuilder10数据库编程介绍
1、需求分析与数据库建⽴
进⾏需求分析(需求分析⽂档),确定数据关系,建⽴各种数据表,建⽴数据库(Access),设置ODBC数据源(控制⾯板->管理⼯具->数据源ODBC->“⽤户DSN”菜单下点“添加” 选相应的数据源驱动程序,如果⽤Access2003建⽴的,则选第三项“Driver do Microsoft Access(*.mdb),然后点击“完成”->输⼊数据源名,如mydata,然后点击“选择”按钮选择建好的数据库,最后点“确定”,如下图所⽰)
2、界⾯设计(功能界⾯、重要数据表维护界⾯)
界⾯设计主要分为⼏个部分
(1)按照管理系统所需的功能设计界⾯。
⾸先画出所有可能的业务流程(数据的各种可能输⼊、修改、删除业务,数据的输出、显⽰业务)
(2)按照需要维护的表设计界⾯(往往给最⾼权限管理员直接修改数据⽤)
3、开始程序编写
(1) 新建⼀个workspace
(new->workspace->workspace)
(2) 在workspace下建⽴⼀个⽬标
(new->Target->application),可取名frame
(3) 在⽬标下建⼀个主窗⼝
可取名w_main,窗体名⼀般以w_开头(new->PB Object->Window),将其Window Type 设为“mdihelp!”
(4) 为主窗⼝建⼀个主菜单
可取名m_frame,菜单名⼀般以m_开头(new->PB Object->Menu)
(5) 程序中设置ODB ODBC
点击按钮,选中“ODB ODBC”项,然后单击右边“New”按钮,弹出如下对话框,设置Profile Name和Data Source,如图所⽰。
(6) 建⽴配置⽂件
配置⽂件取名“config.ini”,内容如下:
[MyDB]
DBMS=ODBC
AutoCommit=False
DBParm=ConnectString='DSN=mydata;UID=;PWD='
(7) ⾃动连接数据库与退出程序关闭数据库的编写
⾸先建⽴Global Variables如下:
string gs_userid,gs_username //登录⽤户标识、⽤户姓名
string gs_root_path,gs_ini_path //应⽤路径和主配置⽂件路径其次申明Global External Functions如下:
FUNCTION int GetComputerNameA(ref string computername,ref long size) LIBRARY "KERNEL32.DLL" alias for "GetComputerNameA;Ansi"
FUNCTION long GetCurrentDirectoryA( long nBufferLength, REF string szBuffer ) LIBRARY "KERNEL32.DLL" alias for "GetCurrentDirectoryA;Ansi"
FUNCTION long SetCurrentDirectoryA( string szPathName ) LIBRARY "KERNEL32.DLL" alias for "SetCurrentDirectoryA;Ansi"
//end prototypes
在程序的总⼊⼝(进⼊“”)Open事件中写⼊以下代码:
// Profile moneyandfriends
string ls_1
//设置应⽤根⽬录
gs_root_path = space(255)
数据库简单吗GetCurrentDirectoryA( 255, gs_root_path )
if right(gs_root_path,1) = '\' then
gs_root_path = left(gs_root_path,len(gs_root_path) - 1)
end if
//设置配置⽂件路径
gs_ini_path = gs_root_path + "\config.ini"
IF not FileExists ( gs_ini_path ) THEN
MessageBox( "不到配置⽂件"+gs_ini_path,"系统配置错误",stopsign!,ok! ) RETURN
END IF
//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
connect using sqlca;
open(w_main) //打开主界⾯
在Close事件中加⼊如下代码:
disCONNECT USING sqlca;
(8) 建⽴新的具体功能窗体(如w_zichuangti)
8.1 设置窗体BackColor为“Cream”,输⼊窗体Title;要在1024*768分辨率下基本满屏,窗体⼤⼩可设置为“4645*2748”
8.2在新窗体上⼀般⽤GroupBox来划分功能区域,设置该控件的字体为“宋体”,⼤⼩为
“10”,背景颜⾊为“Cream”
8.3⽤静态⽂本做功能说明或指⽰,⼀般加⿊,宋体9号字
⽰例程序界⾯如下:
(9) 响应菜单click事件弹出⼦窗⼝(相同⼦窗⼝只弹出⼀次待研究)
在菜单下编写代码打开窗体(双击菜单即可在Click事件下编写),简单代码如下://选择菜单时调出⼦窗体
window lw
opensheet(lw,'w_ zichuangti',parentwindow,0,Cascaded! )
lw.WindowState = Maximized!
(10) 相同的⼦窗⼝只让弹出⼀次(代研究)
(10) 建⽴数据窗⼝
(11) 添加新的pbl⽂件
⼀般要⽤不同的pbl⽂件分类存储不同窗体、数据窗⼝和菜单等资源;建⽴新的pbl⽂件的⽅法如下:点击⼯具栏上“Library”按钮,然后在弹出⼦窗⼝中进⼊程序所在⽂件夹,
在⼯具栏左下有“”创建pbl的按钮。创建好pbl 库⽂件后在⽬标(如果按前⾯建⽴名称为frame的⽬标,则在“”)上单击右键,选择属性在弹出窗⼝中可添加Library List,如下图,也可在这⾥建⽴新的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
if isnull(ps_date) then return ""
if len(ps_date) < 10 then return ps_date
return left(ps_date,4) + mid(ps_date, 6, 2) + mid(ps_date, 9,2)
(15) 退出界⾯及退出界⾯时检查数据是否保存
退出⼦界⾯(控江事件⾥⾯写代码):Close(Parent)
假设检测的数据窗⼝名为dw_zcrxx
if dw_zcrxx.ModifiedCount()+dw_zcrxx.deletedcount()>0 then
if MessageBox('提⽰','数据没有保存,是否不保存退出?',Question!,YesNo!) =2 then return 1
end if
end if
4、其他编程
4.1 将数据库中数据显⽰到dropdownlistbox的下拉菜单⾥
建⽴“f_ddlb_populate”函数,函数输⼊两个变量:
dropdownlistbox:ddlb_this 要显⽰到的空间名
string:as_sql 查询数据库的sql语句
函数代码如下:
set()
ddlb_this.additem("")
string ls_disp, ls_data
DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA ;
PREPARE SQLSA FROM :as_sql ;
OPEN DYNAMIC my_cursor ;
FETCH my_cursor INTO :ls_disp, :ls_data;
if isnull(ls_disp) then ls_disp = ""
if isnull(ls_data) then ls_data = ""
do while sqlca.sqlcode = 0
ddlb_this.additem(trim(left(ls_disp+space(200),200) + ls_data))
FETCH my_cursor INTO :ls_disp, :ls_data;
loop
CLOSE my_cursor ;
as_sql语句⾥⾯需要有两个输出
如果ddlb的数据项⽐较多,⼀般选中VScrollBar
如下调⽤这个函数:
string ls_sql
ls_sql="select zcr_bh,'' from zcr order by zcr_bh"; //举例
f_ddlb_populate(ddlb_bh,ls_sql) //将ddlb_bh列表框⾥写⼊列表项
4.2 数据窗⼝常⽤⼏个函数
dw_deal.settransobject(sqlca) //连接数据库
dw_deal.insertrow(number row):在指定⾏之前插⼊⼀⾏,如果要在最后⼀⾏新增⼀⾏,取row=0
dw_deal.deleterow(number row):删除指定⾏,row=0时删除当前⾏
wcount():返回数据窗⼝中总⾏数
dw_deal.setitem(li_n,'lxr_zpdz','pic\') //设置某⾏某列的数据
integer dwcontrol.AcceptText ( ):Applies the contents of the DataWindow control's edit control to the current item in the DataWindow buffer.
integer dwcontrol.Filter ( ):根据给定过滤条件来列出满⾜条件的记录,过滤条件由SetFilter函数指定
integer dwcontrol.SetFilter ( string format ):设定过滤条件
integer dwcontrol.GetColumn ( ):Returns the number of the current column in the
DataWindow control
string dwcontrol.GetColumnName ( ):Returns the name of the current column in the DataWindow control.
date dwcontrol.GetItemDate ( long row, string column {, DWBuffer dwbuffer , boolean originalvalue } )
date dwcontrol.GetItemDate( long row, integer column {, DWBuffer dwbuffer, boolean originalvalue } ) GetItemStringGetItemString(…):
long dwcontrol.GetNextModified (long row, DWBuffer dwbuffer ):
SetRow(long row):设定指定⾏为当前⾏
GetRow():获得数据窗⼝中当前⾏
GetSelectedRow ( long row ):获得指定⾏row后⾯第⼀个被选中的⾏,如没有则返回零
integer dwcontrol.SelectRow ( long row, boolean select ):选中指定⾏
IsSelected ( long row ):判断某⾏是否被选中
ScrollToRow ( number row ):窗⼝数据滚动在指定⾏,如果row=0则规东到第⼀⾏
i nteger dwcontrol.RowsMove ( long startrow, long endrow, DWBuffer , datawindow targetdw, long beforerow, DWBuffer targetbuffer ) 将⼀个数据窗⼝的⼏⾏数据移到另⼀个数据窗⼝。movebuffer和DWBuffer的范围为Primary!、Delete!和Filter! string dwcontrol.Describe ( string propertylist ):返回数据窗⼝中控件属性
string dwcontrol.Modify ( string modstring ) :修改数据窗⼝中控件属性
integer dwcontrol.SetItemStatus(long row, integer column, dwbuffer dwbuffer, dwitemstatus status):改变数据状
态,dwitemstatus有以下四种状态
NotModified! ,DataModified! ,New!,NewModified!
4.3 数据窗⼝常⽤⼏个事件
RetrieveRow event (DataWindows):在⼀⾏被检索后响应;返回0则继续,返回1则停⽌检索
4.4 常⽤SQL语句
SELECT *
FROM finances
WHERE description LIKE 'gs_' ESCAPE 'S'
这⾥ESCAPE ‘S’表⽰不将’s’后⾯的通配符’_’作为通配符,⽽只是作为⼀般的字符
4.5 给数据窗⼝增加条件
The following scripts dynamically add a WHERE clause to a DataWindow object that was created with a SELECT statement that did not include a WHERE clause. (Since this example appends a WHERE clause to the original SELECT statement, additional code would be needed to remove a where clause from the original SELECT statement if it had one.) This technique is useful when the arguments in the WHERE clause might change at execution time.
The original SELECT statement might be:
p_id, employee.l_name
FROM employee
Presumably, the application builds a WHERE clause based on the user's choices. The WHERE clause might be: WHERE emp_id > 40000
The script for the window's Open event stores the original SELECT statement in original_select, an instance variable:
dw_emp.SetTransObject(SQLCA)
original_select = &
dw_emp.Describe("DataWindow.Table.Select")
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论