仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 891|回复: 7
打印 上一主题 下一主题

[学习教程] MSSQL网站制作之PFC的利用与探究(一)

[复制链接]
第二个灵魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:27:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
提供用于管理、检查、优化数据库操作的管理工具。
数据库疾速开辟工具PowerBuilder从5.0版本入手下手供应了一套基本类库PFC(PowerBuilderFoundationClass),使得使用程序的开辟速率又进步了一年夜步。因为PFC利用的不是很普遍,很多开辟者对此还不是很懂得。上面就我利用的过程当中所失掉的心得与碰到的成绩,收拾出来与人人共享与切磋。列位以为有分歧适的中央,但愿品评斧正。
PFC的匡助对各个自力服务、事务大概函数有一些实例代码,可是关于全体的利用几近没有很周全地先容。因而,我写这些器材,作为PFC匡助的一个帮助质料,年夜部分是在PFC匡助上没有的内容,是我利用PFC的过程当中的总结与归结。PFC进门
起首,先容一下怎样创立一个复杂的PFC使用程序。
机关一个复杂的PFC程序框架
利用PFC,我们得先学会利用PFC机关一个复杂的使用程序。我们能够依据PFC匡助供应的形式来机关我们的使用程序框架(拜见PFC匡助的Overview中的Foraquickstart项),也能够检察PFC例程(Peat、Example等)仿制机关我们的使用程序。上面复杂的报告一下我一般利用PFC机关使用程序的步骤:起首,创立一个空的使用程序,从工具n_cst_appmanager承继一个新的用户工具,定名为n_mdl_app;其次,依据PFC匡助疾速模子实例创立复杂的使用程序框架,有所分歧的是:使用程序服务,我利用方才创立的用户工具n_mdl_app取代了n_cst_appmanager,
设置n_mdl_app的相干事务的代码,可拜见PFC例程的程序代码;翻开使用(Application)工具,变动部分属性及代码:在AdditionalProperties中,变动VariableTypes页中的3个变量(SQLCA->n_tr;Error->n_err;Message->n_msg)(参考PFC例程Peat)依据必要变动默许字体的范例及巨细(因为我们开辟的都是中文界面的使用程序,一切字体变动为“宋体9pt”),依据必要变动使用程序的图标;依据必要变动其他的属性,好比:DisplayName,MicroHelpDefault,等等;别的,我还必要变动使用工具的SystemError事务的代码,我利用的是逄新利编写的一个毛病圈套模块。
 依据必要编写.Ini文件大概变动注册表项值。
好了,到此为止,一个PFC使用程序框架就完成了。试着运转一下,能够看到框架窗口的运转形态。
增加一个事情区窗口
使用程序框架窗话柄现出来了,为了可以事情,我们还得有事情区窗口(Sheet)。
宰衡,任意创立一个Grid型的数据窗口工具,保留为d_demo1。然后从w_sheet窗口承继出来一个窗口工具,然后在这个窗口中安排一个用户工具u_dw(数据窗口的基本先人工具)。该数据窗口控件的数据工具为方才创立的数据窗口工具d_demo1。
在窗口的Open事务中编写以下代码:
//开启Resize服务this.of_SetResize(True)//设置Resize服务的原始巨细this.inv_Resize.of_SetOrigsize(dw_Demo.Width+dw_Demo.X*2,dw_Demo.Height+dw_Demo.Y*2)//注册要实行Resize服务的控件及办法this.inv_Resize.of_Register(dw_Demo,this.inv_Resize.SCALERIGHTBOTTOM)//异步触发事务,使用动静路由发送动静。该动静是要检索数据this.EventPostpfc_MessageRouter(pfc_Retrieve)

在数据窗口控件的Constructor事务中编写以下代码:

this.of_SetTransObject(SQLCA)//设置事物工具this.of_SetBase(True)//开启数据窗口基础服务this.of_SetPrintPreView(True)//打印预览服务this.of_SetRowManager(True)//行办理服务this.of_SetRowSelect(True)//行选择服务this.of_SetFind(True)//查找服务this.of_SetSort(True)//排序服务this.of_SetFilter(True)//选择服务this.inv_RowSelect.of_SetStyle(this.inv_RowSelect.EXTENDED)//设置行选择服务为初级选择形式,撑持Ctrl&Shift键this.inv_Sort.of_SetStyle(this.inv_Sort.DROPDOWNLISTBOX)//设置排序服务的对话框款式this.inv_Filter.of_SetStyle(this.inv_Filter.SIMPLE)//设置选择服务的对话框款式this.inv_Sort.of_SetColumnDisplayNameStyle(this.inv_Sort.HEADER)//设置排序服务的显现内容this.inv_Filter.of_SetColumnDisplayNameStyle(this.inv_Filter.HEADER)//设置选择服务的显现内容

在数据窗口控件的pfc_Retrieve事务中编写以下代码:

Returnthis.Retrieve()

假如该窗口必要保留数据,在窗口的pfc_EndTrans事务中编写以下代码:

Integerli_TransRtn
Ifai_Update_Results=1Then//假如更新数据库乐成,则提交事件li_TransRtn=SQLCA.Of_Commit()Else//不然,回滚事件,并提醒信息li_TransRtn=SQLCA.Of_Rollback()of_Messagebox(UpdateDBFailed,提醒,数据保留失利。,Exclamation!,OK!,1)EndIf//前往该事务产生的情形SUCCESS&FAILURE是w_master的实例变量Ifli_TransRtn=0ThenReturnSUCCESSElseReturnFAILUREEndIf

假如该窗口的数据不必要保留,则要将数据窗口控件的ib_UpdateAble属性选择为False,如许在变动了数据今后,封闭窗口是不会提醒相似于“数据以变动,是不是保留”等的信息了。

将该窗口定名保留为w_Demo1。
在使用程序的主菜单上增加一个项目,编写该项目标Clicked事务代码为:

Message.StringParm=w_demoof_SendMessage(pfc_open)

好了,运转使用程序,看一下运转的效果吧。你能够检察以下的效果:
利用鼠标右键单击数据窗口,检察数据窗口的右键菜单;删除一条数据,然后右键单击数据窗口,选择“Restore”项,看一看恢复删除的功效;点击窗口菜单上的“Sort”、“Filter”、“PrintPreview”,“Find”,“Replace”等菜单项,检察数据窗口的“排序”、“选择”、“打印预览”,“查找”,“交换”等的功效;点击菜单[View]的[First/Prior/Next/Last]等菜单项,检察数据窗口的翻页功效;修正部分数据,封闭窗口,检察提醒保留的对话框
以上的这些功效,利用PFC的时分,复杂到只需设置某项属性大概编写一句开启某项服务的语句便可完成。假如你想对某项服务提出更高的请求,好比排序服务,你想变动服务的形式由默许的PB拖放排序体例改成下拉列表框体例,还必要一行命令来变动服务的体例。
完美并增添更多的功效
假如您想增添更多的更壮大的功效,好比闪屏,登录窗口等等。上面就复杂的先容一下增添这些功效的复杂的办法。特地先容一下我们可也在这些事务中增加的代码和开启的服务。触及到的有关的详细成绩会在今后渐渐的懂得到。

经由过程检察PFC例程Peat的代码,我们晓得能够在“使用程序办理器”工具(gnv_App的工具)的Contructor事务中初始化版本、公司、INI文件等的信息(实例变量值,这些值年夜多能够在属性窗口中设置),能够在“使用程序办理器”工具的pfc_Open事务中开启必要的使用程序服务,这些服务包含:使用程序选项服务、数据窗口缓存服务、毛病信息服务、调试服务、平安服务、事件注册服务、比来利用工具服务等等。

其次,我们能够在该工具的pfc_PreAbout,pfc_PreSplash,pfc_PreLogonDlg事务中增加代码来定制“关于”、“登录”和闪屏对话框的显现。在这三个事务中各有一个参考型的参数,这些参数是响应的属性工具实例,开辟职员能够改动这些工具的属性,来到达把持对话框显现信息目标。假如不变动,将依照默许的款式实际。

假如必要,“使用程序办理器”工具的pfc_Idle,pfc_ConnectionBegin、pfc_ConnectionEnd事务中编写代码,并在使用的响应事务中触发这些事务。

假如必要显现登录窗口,必要完成以下步骤:
在框架窗口的Open事务中挪用of_LogonDlg()函数:
Integerli_Rtn//挪用函数翻开登录对话框li_Rtn=gnv_App.of_LogonDlg()Ifli_Rtn=1Thenthis.SetMicroHelp(LogonSuccessful)ElseIfli_Rtn=-1ThenMessageBox(Logon,LogonFailure+String(li_Rtn))EndIf//Close(this)HaltCloseEndIf
在“使用程序办理器”工具的pfc_Logon事务中增加代码来处置用户的登录。比方能够是以下的代码:
Integerli_RtnStringls_IniFilels_IniFile=this.of_GetAppIniFile()IfSQLCA.of_Init(ls_IniFile,"DataBase")=-1Thenli_Rtn=FAILUREEndIf//as_UserID&as_Password为传送给事务的参数SQLCA.of_SetUser(as_UserID,as_Password)IfSQLCA.of_Connect()=-1Thenli_Rtn=FAILUREElsegnv_App.of_SetUserID(as_UserID)li_Rtn=SUCCESSEndIfReturnli_Rtn

实在,在我们年夜多开辟的使用程序中,登录窗口查验的是我们寄存在数据库中的用户列表,而不是登录数据库的用户身份考证。开辟职员可依据必要自行变动。

别的,我们能够开启框架窗口的形态条服务和事情区窗口(Sheet)办理服务。要开启这两个服务,我们只需在框架窗口的Open事务中编写响应的代码。不外,PFC的形态条其实是差强者意。
动静路由器
CSDN上曾有网友发问要晓得PFC动静路由器的机制成绩,上面我从《PowerBuilder基本类库手艺详解》一书摘抄一节先容动静路由器的部分。


PFC利用动静路由器来处置菜单和窗口之间的通讯。这类定制的动静传送机制内至于一切PFC菜单和窗口中。
固然动静路由器能够用于任何工具与一个窗口的通讯,可是他一般用来将动静从菜单传送给窗口。动静路由器依据一种定制的搜刮算法来决意承受该动静的工具。
利用动静路由器有以下长处:菜单的剧本只必要晓得要挪用的用户事务,而不用晓得以后窗口或相干控件的称号;窗口不用保存那些只是复杂地挪用数据窗口的用户事务。如许,窗口所保存的用户事务的数量就削减了。
动静路由器函数传送的动静实践上就是一个字符串,该字符串包括窗口或窗口的控件要激活的用户事务的称号。动静路由器包含内置的调试信息,从而能够供应毛病信息。
当用户选中一个菜单项时,该菜单项的Clicked事务挪用该菜单的of_SendMessage函数,并传送要挪用的用户事务的称号。of_SendMessage函数挪用n_cst_menu的of_SendMessage函数,该函数挪用窗口的pfc_MessageRouter事务,该事务再挪用制订的用户事务。
依据使用程序是MDI程序仍是SDI程序,of_SendMessage挪用的pfc_MessageRouter用户事务的体例有所分歧,如图:




 
pfc_MessageRouter用户事务挪用窗口、以后控件和比来即取得数据窗口中传送的用户事务,如图:

 
动静路由器供应一种菜单和窗口之间的通讯机制。除数据窗口中的命令按钮以外,没有按钮可以挪用pfc_MwssageRouter事务。这是由于具体函数挪用GetFocus事务来的到以后的控件,而实践上点中一个命令按钮以后,以后的控件就是该命令按钮自己。
以上内容摘自《PowerBuilder基本类库手艺详解》,电子产业出书社出书,王梅君等编著。
该书是刘红岩主编的《PowerBuilder7.0与SybaseInternet手艺丛书》系列中的一员。 
mysql的原来开发者又开发了MariaDB,MariaDB适合用来替代mysql吗
透明 该用户已被删除
沙发
发表于 2015-1-19 13:29:00 | 只看该作者
其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?!
乐观 该用户已被删除
板凳
发表于 2015-1-25 18:44:41 | 只看该作者
记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。
不帅 该用户已被删除
地板
发表于 2015-2-3 13:21:59 | 只看该作者
记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。
再现理想 该用户已被删除
5#
发表于 2015-2-9 02:52:26 | 只看该作者
SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。
冷月葬花魂 该用户已被删除
6#
发表于 2015-2-26 19:32:02 | 只看该作者
SQL语言是学习所有数据库产品的基础,无论你是做数据库管理还是做数据库开发都是这样。不过具体学习的侧重点要看你将来做哪一块,如果是做数据库管理(DBA),侧重点应该放在SQLServer的系统管理上.
莫相离 该用户已被删除
7#
发表于 2015-3-8 17:05:35 | 只看该作者
光写几个SQL实在叫无知。
admin 该用户已被删除
8#
发表于 2015-3-16 07:40:28 | 只看该作者
是否碎片会引发效率问题?这都是需要进一步探讨的东西。varbinary(max)代替image也让SQLServer的字段类型更加简洁统一。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 23:20

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表