??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品一在线观看,久久精品国产亚洲a∨麻豆,日韩精品三级http://www.aygfsteel.com/keweibo/category/45104.html一专多? Java,Powerbuilder,Delphizh-cnTue, 28 Sep 2010 19:07:29 GMTTue, 28 Sep 2010 19:07:29 GMT60Kodigo里面u_sheets昄汉字昄问题http://www.aygfsteel.com/keweibo/articles/331194.htmlKEKEMon, 06 Sep 2010 06:27:00 GMThttp://www.aygfsteel.com/keweibo/articles/331194.htmlhttp://www.aygfsteel.com/keweibo/comments/331194.htmlhttp://www.aygfsteel.com/keweibo/articles/331194.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/331194.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/331194.html
u_sheets控g:

of_drawtabsҎ?
两处uo_paint.Drawtext(aul_hdc, istr_tabs[n].displaytext, lenA(istr_tabs[n].displaytext), istr_tabs[n].textrect, DT_END_ELLIPSIS)
修改?
uo_paint.Drawtext(aul_hdc, istr_tabs[n].displaytext, -1, istr_tabs[n].textrect, DT_END_ELLIPSIS)

of_updatepointsҎ?

lnv_win32.GetTextExtentPoint32(aul_hdc, istr_tabs[n].displaytext, LEN(istr_tabs[n].displaytext), lstr_size)
修改?
lnv_win32.GetTextExtentPoint32(aul_hdc, istr_tabs[n].displaytext, LENA(istr_tabs[n].displaytext), lstr_size)

w_tmp_resource中of_gettextwidthҎ

lnv_win32.GetTextExtentPoint32(ll_dc, as_text, LEN(as_text), lstr_size)

修改为:

lnv_win32.GetTextExtentPoint32(ll_dc, as_text, LENA(as_text), lstr_size)

轉自:http://blog.csdn.net/gogir/archive/2009/02/07/3867255.aspx

 



KE 2010-09-06 14:27 发表评论
]]>
PB 11使用JDBCq接Oracle数据库客Lq行相关异常及解x?/title><link>http://www.aygfsteel.com/keweibo/articles/329535.html</link><dc:creator>KE</dc:creator><author>KE</author><pubDate>Sat, 21 Aug 2010 06:32:00 GMT</pubDate><guid>http://www.aygfsteel.com/keweibo/articles/329535.html</guid><wfw:comment>http://www.aygfsteel.com/keweibo/comments/329535.html</wfw:comment><comments>http://www.aygfsteel.com/keweibo/articles/329535.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/keweibo/comments/commentRss/329535.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/keweibo/services/trackbacks/329535.html</trackback:ping><description><![CDATA[在开发环境下q行是没有问题的?br /> 不过攑֜客户端运行时Q由于缺DLL文g和Jar文g报出了不异常?br /> <br /> 相关异常Q只列出一部分Q?br /> Could not initialize javaVM <br /> Java Exception : java.lang.NoClassDefFoundError: com/sybase/powerbuilder/jdbc/PbjdbcSessionEx<br /> Non SQL Error: Could not load class oracle.jdbc.driver.OracleDriver<br /> <br /> 所需的DLL文gQ位?PB_HOME%\Shared\PowerBuilderQCOPY到项目文件下<br /> <strong>libjcc.dll<br /> libjutils.dll<br /> pbdpl115.DLL<br /> PBDWE115.DLL<br /> PBJDB115.DLL<br /> PBjvm115.DLL<br /> PBLIB115.DLL<br /> PBODB115.DLL<br /> PBSHR115.DLL<br /> PBVM115.DLL</strong><br /> <br /> 所需的JAR文g复制?JAVA_HOME%\jre\lib\ext?br /> 如:<br /> <strong>pbjdbc12115.jarQ位?PB_HOME%\Shared\PowerBuilderQ?br /> classes12.jar是(位于%ORACLE_HOME%\ora92\jdbc\libQ?/strong><br /> <br /> <img src ="http://www.aygfsteel.com/keweibo/aggbug/329535.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/keweibo/" target="_blank">KE</a> 2010-08-21 14:32 <a href="http://www.aygfsteel.com/keweibo/articles/329535.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pb通过jdbcq接oraclehttp://www.aygfsteel.com/keweibo/articles/328295.htmlKEKEMon, 09 Aug 2010 03:06:00 GMThttp://www.aygfsteel.com/keweibo/articles/328295.htmlhttp://www.aygfsteel.com/keweibo/comments/328295.htmlhttp://www.aygfsteel.com/keweibo/articles/328295.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/328295.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/328295.html pb通过jdbcq接oracle

工具Qpb11.5
数据库:oracle 9

1、拷贝oracle安装目录 \jdbc\lib 下的classes12.zip到本地目录,q里有oracle的jdbc驱动

2、运行pb11Q打开tools->system optionsQ选择java面Q在classpaths里添加刚才粘贴的classes12.zip文g的全路径以及名称Q如Qd:\mypro \classes12.zip 。检查jvm statusQpb11默认会安装jdk1.5的?br />
3、重新启动pb10Q注意:在进行了W?步设|后必须重启pb才能使设|生效?br />
4、打开tools->database profilesQ选择JDB JDBCQ新建jdbcq接?/p>

在connection面的driver name里填写oracle.jdbc.driver.OracleDriver    Q?/p>

url里填? jdbc:oracle:thin:@127.0.0.1:1521:DB1   

Q?27.0.0.1处应Z的数据库所在计机的ip地址QDB1处应Z的数据库实例名称Q?br />
5、填写login id和password后即可连接?br />
6、根据自己需要进行其他设|?/p>

下面是一个连接语?/p>

SQLCA.DBMS = "JDBC"SQLCA.LogPass = <***>SQLCA.LogId = "admin"SQLCA.AutoCommit = FalseSQLCA.DBParm = "Driver=‘oracle.jdbc.driver.oracledriver‘,URL=‘jdbc:oracle:thin:@localhost:1521:dev‘"



KE 2010-08-09 11:06 发表评论
]]>
解決退出时,报pfc_closequery_savechanges 错误http://www.aygfsteel.com/keweibo/articles/328147.htmlKEKEFri, 06 Aug 2010 08:52:00 GMThttp://www.aygfsteel.com/keweibo/articles/328147.htmlhttp://www.aygfsteel.com/keweibo/comments/328147.htmlhttp://www.aygfsteel.com/keweibo/articles/328147.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/328147.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/328147.html         在窗口中加上一个数据窗?
在运行的时候更改了内容Q退出时候不保存
跳了个框框Predefined   Message   "pfc_closequery_savechanges "   not   found

解決Ҏ

        无法q接PFC数据库的错误?Z个错误表
或者把该服务关?nbsp;   gnv_app.of_seterror( false )

KE 2010-08-06 16:52 发表评论
]]>
?鼠标单击TabSequence=0的单元格旉色选中色变为其他颜?http://www.aygfsteel.com/keweibo/articles/328136.htmlKEKEFri, 06 Aug 2010 07:53:00 GMThttp://www.aygfsteel.com/keweibo/articles/328136.htmlhttp://www.aygfsteel.com/keweibo/comments/328136.htmlhttp://www.aygfsteel.com/keweibo/articles/328136.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/328136.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/328136.html鼠标单击TabSequence=0的单元格旉色选中色变为其他颜?
原文:http://blog.csdn.net/zm1313/archive/2006/04/04/650402.aspx

 

1、首先将DW属性中的Column Moving 和Mouse Selection 两项取消选中Q?/strong>

2、在 DW 的Clicked 事g中写代码Q?/strong>

    //此处声明所用到的相兛_量; 

    long  ll_curcol,ll_pos,ll_cols

    string  ls_modstring,ls_colname,ls_color_1,ls_color_2,ls_curcol

    if row = 0 then return

    //此处l两个颜色变量赋| 

    ls_color_1 = string(rgb(255,255,255)) 

    ls_color_2 = string(15780518) //此处讄选中单元gؓSKY天蓝?/strong>

    //此处获取当前列号和d敎ͼ 

    //ll_curcol=dw_1.getcolumn()

    ls_curcol = left(dw_1.GetObjectAtPointer(),pos(dw_1.GetObjectAtPointer(),"~t") - 1)

    ll_cols = long(dw_1.Object.DataWindow.Column.Count) 

    //此处所有列的BACKGROUND? MODE属性设Z透明Q(注:下面两句其实可以攑ֈFORM的OPEN事g或DW的CONSTRUCTOR里面执行Q可以提高效率;Q?nbsp;

dw_1.setredraw(false)

for  ll_pos = 1  to  ll_cols 

    ls_colname = dw_1.Describe("#"+string(ll_pos)+".Name") 

    dw_1.Modify(ls_colname+".Background.Mode='0'") 

next 

   //此处所操作列的Background.Color属性设为带IF判断的表辑ּQ而除此之外的各列的背景表辑ּ均设为恒| 

 for  ll_pos = 1  to  ll_cols 

     ls_colname = dw_1.Describe("#"+string(ll_pos)+".Name") 

     //if  ll_pos<>  ll_curcol  then 

     if  ls_colname <> ls_curcol then

         ls_modstring = ls_colname+".Background.Color='"+ls_color_1+"'" 

     else 

         ls_modstring = ls_colname+".Background.Color='"+ls_color_1+"  ~t  if  (getrow()=currentrow(),"+ls_color_2+","+ls_color_1+")'" 

     end  if 

     //此处执行背景颜色修改Q?/font> 

     dw_1.Modify(ls_modstring)   

 next 

   //h昄新的背景颜色Q?

   dw_1.setredraw(true)



KE 2010-08-06 15:53 发表评论
]]>
<?gt;如何在PB数据H口中修Ҏ?--讄数据H口的更新属?http://www.aygfsteel.com/keweibo/articles/328134.htmlKEKEFri, 06 Aug 2010 07:36:00 GMThttp://www.aygfsteel.com/keweibo/articles/328134.htmlhttp://www.aygfsteel.com/keweibo/comments/328134.htmlhttp://www.aygfsteel.com/keweibo/articles/328134.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/328134.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/328134.html
        数据H口要修Ҏ据表Q首先清楚数据窗口只能修改一个数据表。当数据H口的数据来源于不止一个数据表Ӟ可以用脚本控制数据窗口的修改属性来Ҏ据表逐个 q行修改Q这U技术在后面有关章节介绍。下面介l一ơ修改一个数据表的设定方法?
        当数据窗口是用来接受用户的手工录入数据时Q应该设|两斚w的属性才能确保数据窗口能够用来修Ҏ据表。一个是修改数据H口的修改属性,另一个是用户可以 修改的字D늚相关属性倹{?
        首先介绍数据H口的修改属性的讄。在数据H口L中,使用菜单Rows->Update PropertiesQ弹出如图所C的H口?

        数据H口的所有修改属性都集中在该H口中。如果数据窗口对应的数据表中定义了主键或者惟一性烦引,则数据窗口创建时~省的就是允怿改,q且正确讄了所 有的修改属性。否则就需要手工进行设|。前面介l过Q当增加、删除或者重新选择了字D|QPowerBuilder数据窗口的修改属性置Z允许Q这? 也应该进行手工设|?
        首先应该选中Allow Updates选项Q只有选中该选项Q才允许l箋q行其他属性的讑֮。在Allow Updates右面的下拉列表框叫做Table to UpdateQ只能在该下拉列表框中选择一个,q且必须选择一个数据表名,选中的表是要被更新的表?
        选中了Allow Updates属性后Q接下来p指定在数据窗口中哪些列被更新。在Updateable Columns列表框中用鼠标单击被更新的字Dc当数据H口中的字段来自不止一个数据表Ӟq时一定要选择同一个表中的字段Q因Z个数据窗口一ơ只能更 C个数据表。当数据H口中增M字段Ӟ新增ȝ字段往往是不允许修改的,一定要在该列表框中选择该字Dc?
        选择了可以修改的字段后,应该在Unique Key Columns(s)列表框中选择惟一标识一行的列。如果在定义数据表时定义了主键,单击右面的Primary Key按钮可以在该列表框中选中主键?
        Where Clause for Update/Deletel框中包含了三个选项Q用来配|如何在Update和Delete SQL语句中构造where字句的。这三个选项为数据库加锁提供了三U不同的选择。当某行被选中Ӟ用户可以通过DataWindow对象来提供完整性保 护,可以防止其他用户索该行。这三个选项是:Key Columns、Key and Updateable Columns和Key and Modified Columns。下面分别详l介l?

1QKey Columns
        当开发单用户应用E序或者用户都以加锁方式访问数据库时可以选中该选项。该选项表示数据H口只用在Unique Key Column(s)列表框中指定的惟一列进行数据更新。用这U方式来修改数据库,q发性很高,不同的用户都可以q发地访问数据库Q但是数据的完整性却? 常差。因此要保证数据完整性,只有在单用户应用E序或者加锁访问方式下才用这U修Ҏ式?
        例如Q在add_bookQ通讯录)数据表中定义?个字D,idZ键,name、address、telephone、ICQ四个字段为可修改字段Q? 某数据窗口包含这5个字Dƈ且用Key Columns更新数据库。有如下一条数据:
idQ?30602710327574
nameQ朱?
addressQ胜利a?
telephoneQ?45-8557021
ICQQ?9661314
假设甲用户修改了q条数据Q将name改ؓ“郭宝?#8221;Q数据窗口生如下的UPDATE语句Q?
update add_book
set name = "郭宝?
where id = "230602710327574"Q?
其中的where字句中只包含在Unique Key Columns中指定的字段idQ用该字D|定要修Ҏ据库中哪行数据。该update语句成功执行。如果乙用户要将address字段修改?#8220;冀? 油田”Q甲、乙用户同时q发修改id?30602710327574的数据,都会修改成功Q但会生如下的数据Q?
idQ?30602710327574
nameQ郭宝利
addressQ冀东a?
telephoneQ?45-8557021
ICQQ?9661314
两个人同时修改了一条记录,本来地址是胜利a田的郭宝利却成了冀东a田的了?

2QKey and Updateable Columns
        q种修改方式是缺省的修改方式Q它用主键列和可以修改的列来创徏where子句Q具有很高的数据完整性,但是q发性却不是太好。推荐用这U修Ҏ式?
像上面例子一P如果甲用户做修改操作Q保存数据时生如下的SQL语句Q?
update add_book
set name = "郭宝?
where id = "230602710327574"
and name = "׃"
and address = "胜利油田"
and telephone = "945-8557021"
and ICQ = "39661314"Q?
该SQL语句中的where子句包含了主键id和所有的可修改字Dc如果乙用户是在甲保存修改了的数据之前检索的数据Q当乙用戯address修改? “冀东a?#8221;Ӟ产生如下的SQL语句Q?
update add_book
set address = "冀东a?
where id = "230602710327574"
and name = "׃"
and address = "胜利油田"
and telephone = "945-8557021"
and ICQ = "39661314"Q?
此时Q由于甲用户已经修改了数据,nameҎ?#8220;郭宝?#8221;Q所以乙用户的where子句中指定的数据在数据库中已l不存在了,乙的修改不成功,从而保 证了数据的完整性?br />
3QKey and Modified Columns
该方法是上面两种Ҏ的折P当不同的用户q发修改同一行数据的不同字段Ӟ都能成功修改Q所以它的ƈ发性有了一定的限制Q数据的完整性比W一U修Ҏ? 有所提高。这U修Ҏ式用主键和数据发生了变化的列来产生where子句。同P在上面的例子中,甲用戯?#8220;׃”修改?#8220;郭宝?#8221;会生如下的 SQL语句Q?
update add_book
set name = "郭宝?
where id = "230602710327574"
and name = "׃"Q?
q时的where子句中只包含主键id和要修改的字Dname。如果此时乙用户q发修改数据Q要id?#8220;230602710327574”的用L address修改?#8220;冀东a?#8221;Q乙用户也会成功修改?

4Q时间标?
如果数据库管理系l支持时间标讎ͼ则可以在DataWindow对象的结果集中包含时间标记来获得最大的数据完整性。PowerBuilder自动ؓ? 新和删除操作的where子句加上旉标记Q而不昄在可更新列的列表中。Oracle、SQL Server完全在服务器上处理时间标讎ͼ在DataWindow中不要求有额外的工作?

5QKey Modification
该组框用来指定当用户修改了主键时Q数据窗口如何来更新数据表中的主键字Dc有两种选择QUse Delete then Insert和Use Update?
W一个选项是先删除原有主键|然后再用新的主键值插入一个完整的行。用这U更C键的方式可以减少l织数据的工作量Q但在数据库中各个数据表之间? 在父子制U关p,q且依赖该主键的外部键被指定为联删除时Q操作就不会成功的。因为联删除方式要求当依赖主键的外部键有数据时׃能删除主键?
当DBMS允许更新主键列时Q可以用该选项Q该选项直接修改主键|所以防止了U联删除带来的操作不成功的问题?

6QIdentify Column
该下拉列表框用于Z拉列表框中所指定的列Q通常是主键列Q生成序P当且仅当DBMS支持序号生成时该作用才有效?
当正进行了上述所有操作后Q单击OK按钮卛_成了修改属性的讄。如果数据窗口允许手工录入数据,接下来就应该讄可修改字D늚相关属性了。主要包括如 下属性:
l字段的Tab Order倹{?
l字段的Protect属性?
l字段的DisplayOnly属性?
l字段的Visible属性?
上述属性前3个中L一个都可以让用h法修改字D中的数据;最后一个属性决定字D|否可见,不可见的字段不管其他属性如何设|,用户都无法修改字D中? 数据?
首先介绍如何讄字段的Tab Order倹{用菜单项Format->Tab Order可以在DesignH口昄各字D늚当前Tab Order|用鼠标单击要修改Tab Order值的字段Q然后手工将Tab Order值改为非0卛_。在讄Tab Order时要注意三点Q?
Q?Q用户可以手工修改的字段Q其Tab Orderg能ؓ0?
Q?Q在数据H口修改属性中Q不允许修改的字D其Tab Order值应该ؓ0Q或者其Display Only属性应该选中?
Q?QTab Order取值决定字D获得焦点的序。在数据H口中用Tab按钮在字D间切换ӞTab Order取值小的首先获得焦点,最大的最后获得焦炏V?
字段的Protect属性设|字D|否被保护。如果该属性设|ؓ1Q则不允许用户修改字D中的数据,即Tab Order讄为非零。字D늚DisplayOnly属性决定字D中的内Ҏ否只用来昄Q当属性设|ؓ1或者TrueӞ字段中的数据不允许用户修改, 不管其他几个属性是如何讄的。Protect属性只能用表辑ּQ选中字段后在属性视HGeneral属性中单击右侧的红色小按钮Q如果已l有表达式, 则按钮ؓl色Q,q入到表辑ּ输入对话框,输入该属性的表达式即可。比如,讄用户不能修改字段id原来的数据,可以输入如下的表辑ּQ?
if(isRowNew(),0,1)
字段的Display属性在属性视HEdit中,选中该选项表示该字D中的数据只用来昄Q不允许用户修改。该属性不能用表辑ּ。在PB中,~辑cd? 控g都有该属性,q且属性的作用也是相同的?
当字D늚Tab Ordergؓ0Ӟ肯定不能获得焦点Q但是非0时也不一定能获得焦点Q还得看字段的Protect属性是否设|ؓ1Q当字段的Tab Orderg?QProtect属性不?q且字段的Visible属性ؓTrueӞ肯定可以获得焦点。DisplayOnly属性和焦点是否能够 获得无关?/p>

来自: http://hi.baidu.com/vcvok/blog/item/9e83db1bbbf526dfad6e75cd.html


KE 2010-08-06 15:36 发表评论
]]>
PFC inv_resize of_Registerhttp://www.aygfsteel.com/keweibo/articles/325897.htmlKEKEMon, 12 Jul 2010 09:23:00 GMThttp://www.aygfsteel.com/keweibo/articles/325897.htmlhttp://www.aygfsteel.com/keweibo/comments/325897.htmlhttp://www.aygfsteel.com/keweibo/articles/325897.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/325897.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/325897.htmlthis.of_setresize(true)
inv_resize.of_Register(dw_2,inv_resize.SCALErightBOTTOM)   //SCALEbottom   SCALErightBOTTOM

//inv_resize.of_Register(dw_2,inv_resize.FIXEDRIGHTbottom)

在需要用的H口中定义一个实?
n_cst_resize inv_resize;
在open事g中注册窗口上的控?
inv_resize = create nvo_resize
inv_resize.of_SetOrigSize (this.WorkSpaceWidth(), this.WorkSpaceHeight())
inv_resize.of_Register(dw_list, 0, 0, 0, 100)
inv_resize.of_Register(st_hsplitbar, 0, 0, 0, 0)
inv_resize.of_Register(dw_main, 0, 0, 100,0)
inv_resize.of_Register(st_vsplitbar, 0, 0, 0, 0)
inv_resize.of_Register(dw_preview, 0, 0, 100, 100)
//参数:
1.控g对象
2.Ud时的X坐标位移癑ֈ?
3.Ud时的Y坐标位移癑ֈ?
4.Ud时的WIDTH坐标位移癑ֈ?
5.Ud时的HEIGHT坐标位移癑ֈ?

在resize事g中写?
inv_resize.Event wfc_Resize (sizetype, This.WorkSpaceWidth(), This.WorkSpaceHeight())
在需要用的H口中定义一个实?
n_cst_resize inv_resize;
在open事g中注册窗口上的控?
inv_resize = create nvo_resize
inv_resize.of_SetOrigSize (this.WorkSpaceWidth(), this.WorkSpaceHeight())
inv_resize.of_Register(dw_list, 0, 0, 0, 100)
inv_resize.of_Register(st_hsplitbar, 0, 0, 0, 0)
inv_resize.of_Register(dw_main, 0, 0, 100,0)
inv_resize.of_Register(st_vsplitbar, 0, 0, 0, 0)
inv_resize.of_Register(dw_preview, 0, 0, 100, 100)
//参数:
1.控g对象
2.Ud时的X坐标位移癑ֈ?
3.Ud时的Y坐标位移癑ֈ?
4.Ud时的WIDTH坐标位移癑ֈ?
5.Ud时的HEIGHT坐标位移癑ֈ?

在resize事g中写?
inv_resize.Event pfc_Resize (sizetype, This.WorkSpaceWidth(), This.WorkSpaceHeight())

// Register the controls with the SplitBar
st_v1.of_Register(dw_1, st_v1.left)
st_v1.of_Register(lv_1, st_v1.right)



KE 2010-07-12 17:23 发表评论
]]>
PFC autoinstantiate objecthttp://www.aygfsteel.com/keweibo/articles/325405.htmlKEKETue, 06 Jul 2010 14:24:00 GMThttp://www.aygfsteel.com/keweibo/articles/325405.htmlhttp://www.aygfsteel.com/keweibo/comments/325405.htmlhttp://www.aygfsteel.com/keweibo/articles/325405.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/325405.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/325405.html1 Declare an instance variable of type n_cst_tree:
n_cst_tree inv_tree
Because PFC defines this object with the autoinstantiate option, you don’t
need to code CREATE or DESTROY statements.



KE 2010-07-06 22:24 发表评论
]]>
PFC中关于TreeView的用法讲??http://www.aygfsteel.com/keweibo/articles/325182.htmlKEKESun, 04 Jul 2010 02:40:00 GMThttp://www.aygfsteel.com/keweibo/articles/325182.htmlhttp://www.aygfsteel.com/keweibo/comments/325182.htmlhttp://www.aygfsteel.com/keweibo/articles/325182.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/325182.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/325182.htmlPFC中关于TreeView的用法讲?/h2>

转自Q?a style="color: red" >http://www.pb9.com.cn/showtopic-190.html

PFC中关于TreeView的用法讲?br />
Qlily_bananaQ?br />
u_tvs

描述Q?br /> Z TreeView 可视用户对象先。该对象采用 数据存储QDataStoresQ显CTreeView 的数据?br /> U_tvs 是一个自更新的对象?br /> 对应的库Q?br /> PFCMAIN.PBL
PFEMAIN.PBL
对象关系Q?br /> Object relationships
    PFC 可视用户对象被设计用于从w_masterl承来的H口。U_tvs 也用于:
    m_tv
    n_cst_infoattrib
    n_ds
    n_cst_luw
    n_cst_tvsrv
    n_cst_tvsrv_levelsource
    n_cst_print
用法Q?br /> 在窗口中用该可视用户对象代替PowerBuilder?TreeView 控g?U_tvs 事g的脚本可以和PFC的菜单进行集成?br /> 要?u_tvs:
1    在窗口中d一个u_tvs用户对象控g?br /> 2    Ҏ需要TreeView 的服务可用:
this.of_SetPrint(TRUE)
this.of_SetLevelSource(TRUE)
this.of_SetBase(TRUE)
3    为树的每一层指定数据源Q?br /> String  ls_sql
Integer  li_return
   
ls_keys[1] = "dept_id"
    this.inv_levelsource.of_Register(1, "dept_name", "", "d_deptlist", SQLCA, "")
      ls_keys[1] = "emp_id"
this.inv_levelsource.of_Register(2, "emp_lname", ":parent.1.dept_id",  &
      "d_empbydept", SQLCA, "")
4    Ҏ需要ؓ树脂定其余的昄信息Q?br /> this.inv_levelsource.of_SetPictureColumn(1, "1")
this.inv_levelsource.of_SetSelectedPictureColumn(1,"2")
this.inv_levelsource.of_SetPictureColumn(2, "4")
this.inv_levelsource.of_SetSelectedPictureColumn(2, "5")

5    ?TreeView的第一行:
this.event pfc_populate(0)
6    扩展pfc_Retrieve 事g使检索参数生效:
Any  la_args[20]
Integer  li_level

IF IsValid(inv_levelsource) THEN
            li_level = this.of_GetNextLevel(al_parent)
            this.inv_levelsource.of_GetArgs(al_parent, li_level, la_args)
END IF
Return this.of_Retrieve(al_parent, la_args, ads_data)

7    Ҏ需要调用u_tvs 的其他函数?br /> 要获取关于TreeView 的更多信息,参见《PowerBuilder User's Guide?br />
n_cst_tvsrv_print

描述Q?br /> TreeView 打印服务

对应的库
PFCAPSRV.PBL
PFEAPSRV.PBL

用法Q?br />
要用该pȝQ?br />
1    调用u_tvs of_SetPrint 函数Ȁz该服务Q?br /> tv_1.of_SetPrint(TRUE)
2    调用of_PrintTree 函数来打?TreeView 数据Q?br />
String  ls_levelpicts[10]
String  ls_levelselpicts[10]

ls_levelpicts[1] = "dept.bmp"
ls_levelpicts[2] = "emp.bmp"
ls_levelselpicts[1] = "deptsel.bmp"
ls_levelselpicts[2] = "empsel.bmp"
tv_1.inv_print.of_PrintTree(0, TRUE, ls_levelpicts, ls_levelselpicts)

of_Register 函数Q?br />   语法1 通过一个DataWindow 对象来显C数据?br /> 描述Q?br />     通过索DataWindow对象的行来徏立TreeView的各U数据层
范围Q?br /> Public
语法Q?br /> tvcontrol.instancename.of_Register ( level, labelcolumn, retrievespec,    dwobject, trans, filterspec )

参数描述Q?br /> tvcontrol        u_tvs-based TreeView 控g的实?br /> instancename    n_cst_tvsrv_levelsource的实?( u_tvs 的确省gؓ inv_levelsource)
level            Integer 指定TreeView 数据的层ơ及数据
labelcolumn    String 指定u_tvs 用于TreeViewҎ{dwobject 的列名?br /> retrievespec    String  包含用于dwobject 索条?br /> dwobject        String 指定用于数据索的 DataWindow 对象
trans            N_tr 用于索dwobject的事务对象。如果该参数未指定,则dwobject必须已含有数据?br /> filterspec          String 包含需要的qo条g

q回?br /> Integer. 具体如下Q?br /> ?1  成功
?-1  参数有效性错?br /> ?-2  Dwobject 没有指定键列Qkey columnsQ?br /> ?-3  上一层被标记为@环?br /> ?-4  Column level datatype was not in the data source
?-5  为数据源讄事务对象出错
?-7  Cache 注册错误

用法Q?br />     TreeViwe的每一层调用该函数一ơ?br /> 索参数的格式如下Q?br /> :scope.level.column

where:

?Scope 指定层(LevelQ或者父层(ParentQ:
?Level  l对层数
?Parent  和当前层相关的数

?ҎScope指定的数的性质不同QLevel 来制定一个绝Ҏ相对层数?br /> Scope 指定    Level 指定
Level
    你指定的l对数。例如::level.1.emp_name 表示索参数来自于先?1层的emp_name ?br />
Parent    你指定的相对于当前层的倹{例如, :parent.2.emp_name 表示索参数来源于上两层祖先的emp_name ?br />
?Column 指定含有用于索参数值的DataWindow 对象的列?br />


of_SetPictureColumn 函数Q?br />
描述Q?br /> 指定未选中时的图标
范围Q?br /> Public
语法Q?br /> tvcontrol.instancename.of_SetPictureColumn ( level, column )

参数描述Q?br /> tvcontrol        u_tvs-based TreeView 控g的实?br /> instancename    n_cst_tvsrv_levelsource的实?( u_tvs 的确省gؓ inv_levelsource)
level            Integer 指定被设|图标的层号
column        String 指定下述之一Q?br /> ?u_tvs 用于扑ֈ囄的DataWindow 对象的列名,该列可以包括一个文件名或者一个|指示 u_tvs 来找?TreeView的图片序列号
?| 指示 u_tvs 来找?TreeView的图片序列号

q回|
Integer. 1Q成功;-1Q失败?br />
用法Q?br /> 调用该函数前需要调用of_Register函数


KE 2010-07-04 10:40 发表评论
]]>
PFC的Services Q{Q?/title><link>http://www.aygfsteel.com/keweibo/articles/325015.html</link><dc:creator>KE</dc:creator><author>KE</author><pubDate>Thu, 01 Jul 2010 13:35:00 GMT</pubDate><guid>http://www.aygfsteel.com/keweibo/articles/325015.html</guid><wfw:comment>http://www.aygfsteel.com/keweibo/comments/325015.html</wfw:comment><comments>http://www.aygfsteel.com/keweibo/articles/325015.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/keweibo/comments/commentRss/325015.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/keweibo/services/trackbacks/325015.html</trackback:ping><description><![CDATA[文章来源Q?font color="#ff0000">http://www.itfensi.com/exploit/FoxPro/11702662832718_8.html</font><br /> q一章主要介l了什么是PFC的Services Q以及如何用它们?<br /> <br />   <strong>一、应用程序服?</strong><br /> <br />    PFC提供了以下各U应用程序Services Q?<br /> <br /> <table border="0" cellspacing="0" cellpadding="0" width="600" bgcolor="#ffffff"> <tbody> <tr> <td>DataWindow caching <br /> <br /> Debugging <br /> <br /> Error <br /> <br /> Application preference <br /> <br /> Most recently uesed object <br /> <br /> Security <br /> <br /> Transaction registration </td> </tr> </tbody> </table> <br />   你必通过n_cst_appmanagerQ应用程序管理器Q来控制q些 Services Q这些Services实际上是应用E序理器的是数据成员)。应用程序管理器Qapplication managerQ通过调用成员函数来开启与关闭Services 。由于它们在应用E序理器的范围内有效。而应用管理器是全局变量Q因此你可以在你的应用程序的M地方是用应用程序Services ?<br /> <br />   1. DataWindow caching service <br /> <br />   <strong>概要Q?</strong><br /> <br /> Datawindow caching service为Datawindow提供了数据缓册Ӏ它数据保存在内存中,从而减了E序讉K数据库的频率Q加快了E序的执行速度?Datawindowcaching service支持如下的数据源Q?<br /> <br />   l_ Datawindow对象Q它的数据可以来自于数据库表也可以来自存储过E?<br /> <br />   l_ SQL语句 <br /> <br />   l_ Datawindow控g <br /> <br />   l_ DataStore对象 <br /> <br />   l_ 数组中的数据 <br /> <br />   l_ 文g <br /> <br />   PFC使用Powerbuilder的Datastore来实现Datawindow caching service 。它对的对象是n_cst_dwcache ?<br /> <br />   PFC的代码实际只在父cd象中q本书讲q的都是扩展cȝ对象Q就?n_cst_dwcache 。而实际上PFC的代码全在父cȝ对象中(pfc_n_cst_dwcacheQ?<br /> <br />   使用Ҏ <br /> <br />   使用DataWindow caching 可以数据库讉K频率降到最低,可以加快E序q行速度?<br /> <br />   2 开启DataWindow caching <br /> <br />   l_ 调用n_cst_appmanager的of_SetDWCache函数 <br /> <br />   gnv_app.of_SetDWCacheQTRUEQ?<br /> <br />   (1) 使用Datawindow caching Q?<br /> <br /> (1). 调用of_Register函数q行数据~存Q同时依据不同的数据提供相应的参数?<br /> <br />   l_ ~存Datawindow对象从数据库中检索出的数据时Q你需要传递标识符QidentifierQ、事务对象、Datawindow对象名、其他参敎ͼ如果存在的话Q?<br /> <br />   l_ ~存SQL语句从数据库中检索出的数据时Q你需要传递标识符QindentifierQ、事务对象、SQL语句?<br /> <br />   l_ 数据缓存到数组中:传递标识符QidentifierQ、Datawindow对象名、数据?<br /> <br />   l_ ~存DataWindow控g中的数据Q传递标识符QidentifierQ、Datawindow控g?<br /> <br />   l_ ~存DataStore中的数据Q传递标识符QidentifierQ、DataStore对象?<br /> <br />   l_ ~存文g中的数据Q传递标识符QidentifierQ、文件名?<br /> <br />   (2) 你可以用函数of_IsRegisteredQ参数是对象本nQ,定DataWindow对象是否已经在caching service中注册了?<br /> <br />   (3) 调用函数of_GetRegistered函数讉K已经~存的数据?<br /> <br />    Gnv_app.inv_dwcache.of_GetRegisteredQ攄_emplist敚琲ds_datastoreQ?<br /> <br />    Ids_datastore.ShareDataQdw_emplistQ?<br /> <br />   (4) 调用函数of_Refresh索已l缓存数据的DataWindow ?<br /> <br />   (5). 调用函数of_UnRegister函数停止数据~存服务?<br /> <br />   (6) Q可选)调用n_cst_appmanager的of_SetDWCache函数关闭DataWindow cachi ng service ?<br /> <br />   gnv_app.of_SetDWCacheQFALSEQ?<br /> <br />   通常你没必要昄的关闭DataWindow caching service 。PFC在删除对象n_cst_dwcache时会自动的关闭它?<br /> <br />   <strong>2. Debugging service </strong><br /> <br />   <strong>概要Q?</strong><br /> <br />   Debugging service 在应用程序遇到错误时会自动显C错误信息。PFC的消息\由当发现需要调用的事g不存在时便会使用Debugging service昄出错信息?<br /> <br />   <strong>重要说明Q?/strong>PFC debugging service 只是一个开发工兗在用户的应用程序中不要开启它?<br /> <br />   <strong>使用Ҏ </strong><br /> <br />   使用debugging service 可以帮助你在PFC的开发过E中解决问题?<br /> <br />   (1) 调用n_cst_appmanager的of_SetDebug函数开启Debugging service ?<br /> <br />    gnv_app.of_SetDebugQTRUEQ?<br /> <br />   (2) PFC的对象首先检应用程序的debugging状态,然后在适当的情况下昄错误信息?<br /> <br />   (3) Q可选)调用n_cst_appmanager?of_SetDebug函数关闭Debugging service?<br /> <br />    gnv_app.of_SetDebugQFALSEQ?<br /> <br />   多数情况下,你不需要显C的关闭Debugging service ?<br /> <br />  <strong>3. Application preference service</strong> <br /> <br />   <strong>概要Q?/strong> <br /> <br />   你可以利用Application preference service保存、恢复应用程序、用L信息到INI文g或WINDOWS?a class="infotextkey" target="_blank">注册?/a>中。保存和恢复应用E序讄有如下两个好处: <br /> <br />   l_ 延箋性:保存应用E序的设|可以得用户在下次使用软g时可以看C上次关闭软g的样子。也是说用户不必每ơ用Y件时都重新设|他的Y?a class="infotextkey" target="_blank">环境</a>?<br /> <br />   l_ Ҏl护Q你可以无须更改n_cst_appmanager的代码的情况下更新应用程序的讄?<br /> <br />   PFC通过用户自定义对象n_cst_apppreference提供Application preference ser vice ?<br /> <br />   q个Service保存应用E序的如下信息: <br /> <br />   用户键(User keyQ?<br /> <br /> <table border="0" cellspacing="0" cellpadding="0" width="600" bgcolor="#ffffff"> <tbody> <tr> <td>MicroHelp <br /> <br /> Help File <br /> <br /> Version <br /> <br /> Logo bitmap <br /> <br /> Copyright notice <br /> <br /> DDETimeOut property <br /> <br /> DisplayName property <br /> <br /> DWMessage Title property <br /> <br /> MicrohelpDefault property <br /> <br /> RightToLeft property <br /> <br /> ToolbarFrameTitle property <br /> <br /> ToolbarPopMenuText property <br /> <br /> ToolbarSheetTitle property <br /> <br /> ToolbarUserControl property <br /> <br /> Application preference service 同时保存如下的用户信?<br /> <br /> ToolbarText property <br /> <br /> ToolbarTips property <br /> <br /> User ID </td> </tr> </tbody> </table> <br />   保存、恢复设|?<br /> <br />   Application perference service 在应用程序开启的时候会自动恢复应用E序在关闭时保存的设|。这些信息可以保存到<a class="infotextkey" target="_blank">注册?/a>中(只限于Windows95和Windows NTQ或者INI文g中。你可以按照如下说明Q?<br /> <br />   l_ 保存?a class="infotextkey" target="_blank">注册?/a>中:调用函数of_SetUserKey Q指定你需要保存的键?<br /> <br />   l_ 保存到INI文g中:调用函数of_SetUserINIFile Q指定用于保存信息的INI文g名?<br /> <br />   使用步骤Q?<br /> <br />   (1) 调用n_cst_appmanager的of_SetAppPref函数开启Application preference s ervice ?<br /> <br />   gnv_app.of_SetAppPrefQTUREQ?<br /> <br />   (2) 依据不同的执行^台采用不同的方式保存应用E序信息。下面的例子是在应用程序的构造事件中保存应用E序的信息。同时假设你已经?n_cst_appmanager中徏立好了应用程序信息键、用户信息键、应用程序INI文g、用户INI文g?<br /> <br /> <table border="0" cellspacing="0" cellpadding="0" width="600" bgcolor="#ffffff"> <tbody> <tr> <td>IF this.of_IsRegistryAvailable() THEN <br /> <br /> this.inv_apppref.of_SetAppKey(this.of_GetAppKey()) this.inv_ <br /> <br /> apppref.of_SetUserKey(this.of_GetUserKey()) <br /> <br /> ELSE <br /> <br /> this.inv_apppref.of_SetAppINIFile(this.of_GetAppINIFile()) this.inv_ap <br /> <br /> ppref.of_SetUserINIFile(this.of_GetUserINIFile()) <br /> <br /> END IF </td> </tr> </tbody> </table> <br />   (3) 调用函数of_SetRestoreApp和of_SetRestoreUser函数讄需要保存信息的cdQ?<br /> <br /> <table border="0" cellspacing="0" cellpadding="0" width="600" bgcolor="#ffffff"> <tbody> <tr> <td>this.inv_apppref.of_SetRestoreApp(TRUE) <br /> <br /> this.inv_apppref.of_SetRestoreUser(TURE) </td> </tr> </tbody> </table> <br />   <strong>4. Most recentily used object service </strong><br /> <br />   <strong>概要 </strong><br /> <br />   你可以用Most recentily used object serviceQ最q用对象ServiceQ将最l用的对象、表单列在文件菜单下。默认情况下只允许显C?个最l用对象?<br /> <br />   但是Q你可以改变q个数量?<br /> <br />   PFC 通过n_cst_mru用户自定义对象提供MRU ServiceQMost recentily uesd ob ject serviceQ?<br /> <br />   MRU Service在应用程序启动时会自动的应用程序关闭时保存的最l用过的对象信息加载到应用E序中。这些信息可以保存到<a class="infotextkey" target="_blank">注册?/a>或者INI文g中。你可以通过如下的方式: <br /> <br />   l_ 保存?a class="infotextkey" target="_blank">注册?/a>中:调用函数of_SetUserKey函数定要保存到<a class="infotextkey" target="_blank">注册?/a>中的MRU信息?<br /> <br />   l_ 保存到INI文g中:调用函数of_SetUserINIFile函数指定用于保存MRU信息的INI文g?<br /> <br />   l_ 你必还要额外编写代码: <br /> <br />   Z使用MRU Service Q你必须在你惛_用MRU Service的窗口的两个事g中编写代码?<br /> <br />   l_ pfc_MRUProcess Q在H口开启时加蝲MRU信息?<br /> <br />   l_ pfc_PreMRUSave Q在H口关闭时保存MRU信息?<br /> <br />   与PFC菜单的结?<br /> <br />   PFC?m_master菜单的FILE菜单包括了五个MRU菜单,你还可以自己d?<br /> <br />   如果你的应用E序没有使用PFC的菜单,那么请以 m_master为模板徏立你自己的M RU菜单V?<br /> <br />   <strong>使用MRU Service步骤</strong> <br /> <br />   (1) 调用n_cst_appmanager中的of_SetMRU函数开启MRU Service ?<br /> <br />    gnv_app.of_SetMRUQTRUEQ?<br /> <br />   (2) 调用n_cst_appmanager的函数of_SetUserKeyQ尽适用于WIN95与WINNTQ或of <br /> <br />    _SetUserINIFile函数Q用于所有的q_Q确定需要保留的信息。下面的例子假设你已lؓn_cst_appmanager建立好了的用户键Q保存到<a class="infotextkey" target="_blank">注册?/a>Q或者INI文gQ保存到INI文gQ。下面的代码位于应用E序理器(n_cst_appmanagerQ的构造事件?<br /> <br /> <table border="0" cellspacing="0" cellpadding="0" width="600" bgcolor="#ffffff"> <tbody> <tr> <td>IF this.of_IsRegistryAvailable() THEN <br /> <br /> this.inv_mru.of_SetUserKey(this.of_GetUserKey()) <br /> <br /> ELSE <br /> <br /> this.inv_mru.of_SetUserINIFile(this.of_GetUserINIFile()) <br /> <br /> END IF <br /> <br /> (3) Register IDs with the MRU service by calling the n_cst_mru of_Regis <br /> <br /> ter function. An ID is the identifier that the window will use to retr <br /> <br /> ieve information out of the MRU service. This is an example of code yo <br /> <br /> u can add to the pfc_PreOpen event of the MDI frame window: <br /> <br /> IF IsValid(gnv_app.inv_mru) THEN gnv_app.inv_mru.of_Register("myapp") <br /> <br /> END IF <br /> <br /> (4) Extend the pfc_MRUProcess event in each window that uses exclusive <br /> <br /> processing, adding code to open the sheet passing the necessary argume <br /> <br /> nts (be sure to add similar code to the frame window if you want to sp <br /> <br /> ecify exclusive items on the frame menu): <br /> <br /> Window lw_frame, lw_window n_cst_menu lnv_menu n_cst_mruattrib lnv_mru <br /> <br /> attrib // Check parameters. IF IsNull(ai_row) THEN Return -1 END IF <br /> <br /> IF NOT IsValid(gnv_app.inv_mru) THEN Return -1 END IF // Retrieve row <br /> <br /> from DataStore. gnv_app.inv_mru.of_GetItem & (ai_row, lnv_mruattri <br /> <br /> b) // Get the MDI frame, if necessary. lnv_menu.of_GetMDIFrame(this.me <br /> <br /> nuid, lw_frame) OpenSheet(lw_window, & lnv_mruattrib.is_classname, <br /> <br /> lw_frame) Return 1 <br /> <br /> Performing other actions in the pfc_MRUProcess eventTo see other types <br /> <br /> of processing you can perform in the pfc_MRUProcess event, see the co <br /> <br /> mments in the pfc_w_master pfc_MRUProcess event.5Extend the pfc_PreMRU <br /> <br /> Save event in each window that uses the MRU service. In this event, po <br /> <br /> pulate the n_cst_mruattrib object with the id, classname, key, item, a <br /> <br /> nd MicroHelp to be saved: <br /> <br /> anv_mruattrib.is_id = "myapp" anv_mruattrib.is_classname = this.ClassN <br /> <br /> ame() anv_mruattrib.is_menuitemname = this.Title anv_mruattrib.is_menu <br /> <br /> itemkey = this.ClassName() anv_mruattrib.is_menuitemmhelp = & "O <br /> <br /> pens " + this.Title Return 1 6Extend the pfc_MRURestore event in eac <br /> <br /> h window that uses the MRU service. In this event, set the ID of the i <br /> <br /> nformation you want to display on the menu: <br /> <br /> If IsValid(gnv_app.inv_mru) Then Return gnv_app.inv_mru.of_Restore <br /> <br /> ("myapp", This) End If </td> </tr> </tbody> </table> <br /> <strong>5. Error message service </strong><br /> <br />   <strong>概要 </strong><br /> <br />   Error Message service提供了许多用于显C、纪录应用程序的错误信息。你既可以显CPowerBuilder提供的标准的Message对话框,也可以显CPFC 的W_Message对话框。两U显C效果都h如下的功能: <br /> <br />   l_ 消息日志Q将消息U录到文件中Q支持多U^台。PFC会自动的严重别大于某个值的消息U录到文件中?<br /> <br />   l_ 支持MAPIQ通过Email发出错误警告。PFC会自动将严重U别大于某个值的消息作ؓ<a class="infotextkey" target="_blank">邮g</a>发出?<br /> <br />   l_ 消息数据库:通过已经定义好的形式Q可以是数据库或文gQ来存取消息。定义好了消息格式,使得消息有一U标准的形式、消息的重复减到最、容易查询?<br /> <br />   l_ 参数替代Q消息可以具有参敎ͼq样它会依据E序q行而变化?<br /> <br />   l_ 不显C,直接U录Q消息可以不昄直接U录到日志中?<br /> <br />   l_ 注释与打华ͼ用户可以打印消息Q甚臛_以增加注释。对消息日志用于<a class="infotextkey" target="_blank">邮g</a>旉常有用的?<br /> <br />   l_ 自动关闭Qw_messageq了数秒后会自动关闭?<br /> <br />   W_message 位图 <br /> <br />   如果你用w_message Q位囑֜q行时必L效?<br /> <br />   用法 <br /> <br />   Error service可以处理应用E序所有的错误信息。如果你打算错误信息保存到数据库中Q你可以使用PFC.DB中关于消息的几个表,或用消息管道将它传C的数据库中?<br /> <br />   使用Messages?<br /> <br />   大多数情况下Q你应该Messages表复制到你的数据库中。这个表已经包含了PFC的错误信息格式?<br /> <br />   使用步骤Q?<br /> <br />   (1) 调用n_cst_appmanager的of_SetError函数开启error message serviceQ创建n_cst_error实例Q,下面的代码位于n_cst_appmanager的pfc_Open事gQ?<br /> <br />    this.of_SetErrorQTRUEQ?<br /> <br />   (2) 定义错误消息的源Q?<br /> <br />   l_ 如果消息源是文gQ调用如下函敎ͼ <br /> <br />    this.inv_error.of_SetPredefinedSource(?/eisapp/eiserr.txt? <br /> <br />   l_ 如果消息源是数据库,调用如下函数Q?<br /> <br />   this.inv_error.of_SetPredefinedSource Qitr_errorQ?<br /> <br />   消息源:当你使用文g作ؓ消息源时Q文件中必须包括PFC.DB中Messages表中的所有数据。同时列必须由TAB键隔开?<br /> <br /> <table border="0" cellspacing="0" cellpadding="0" width="600" bgcolor="#ffffff"> <tbody> <tr> <td>PFC uses predefined messages in certain situations. If you enable the <br /> <br /> error message service and receive message display errors, make sure th <br /> <br /> e error message source has been established correctly. Additional user <br /> <br /> -defined messages must conform to the format of the messages table (al <br /> <br /> so used by the d_definedmessages DataWindow object). </td> </tr> </tbody> </table> <br />   l_ Q可选)讄日志文g名(调用函数of_SetLogFile参数为空字符串可以不q行日志U录Q: <br /> <br />    this.inv_error.of_SetLogFileQ擟:/pb6/errlog.txt? <br /> <br />   l_ Q可选)讄用户IDQ用于日志文ӞQ?<br /> <br /> this.inv_error.of_SetUserQthis.of_GetUserIDQ)Q?<br /> <br />   l_ Q可选)讄什么类型的消息需要自动纪录: <br /> <br /> <table border="0" cellspacing="0" cellpadding="0" width="600" bgcolor="#ffffff"> <tbody> <tr> <td>this.inv_error.of_SetNotifySeverityQ?Q?<br /> <br /> this.inv_error.of_SetLogSeverityQ?Q?</td> </tr> </tbody> </table> <br />   l_ Q可选)如果你的应用E序使用了错误自动通告功能。你需要设|当前用LEmail、密码。还可以讄其他的Email用户与密码。下面的例子展示了如何设|Email ID与Password ?<br /> <br /> <table border="0" cellspacing="0" cellpadding="0" width="600" bgcolor="#ffffff"> <tbody> <tr> <td>this.inv_error.of_SetNotifyConnection(ims_mailsess) this.inv_error.of <br /> <br /> _SetNotifyWho(is_autonotify) </td> </tr> </tbody> </table> <br />   说明Q以上的代码都可以在n_cst_appmanager的pfc_Open事g中?<br /> <br />   l_ 在应用程序的错误中Q用函数of_Message昄对话框。同时你q可以将它纪录到日志中。函数of_Message可以使用数据库中的消息,也可以动态的指定消息。下面的例子是使用数据库中的消息: <br /> <br />   gnv_app.inv_error.of_Message <br /> <br />   <strong>使用参数表(只限于已定义的消息) </strong><br /> <br />   (1) 在消息表中定义如下的数据?q行时将被替换: <br /> <br />    EIS1030 Unable to find the file % in % <br /> <br />   (2) 定义一个参数数l: <br /> <br />   String ls_parms[] <br /> <br />   ls_parms[1] = 揕ogfile.txt? <br /> <br />    ls_parm[2] = ?/windows/system? <br /> <br />   (3) 调用of_Message Q传递参敎ͼ <br /> <br />   gnv_app.inv_error.of_MessageQ擡IS1030敚琹s_parmsQ?<br /> <br />   PFC在显C消息时使用数组中的W一个元素替换第一? Q第二元素替换第二个%?br /> <br />  <strong>6. Security service </strong><br /> <br />   <strong>概要 </strong><br /> <br />   PFC的安全机制可以处理许多你的应用程序安全性问题。它包括应用E序理员组件、安全对象(security objectQn_cst_security ?<br /> <br />   用法Q在使用Security serviceӞ你必要定义用户l与用户Q然后分别与H口、菜单、用户对象、控件相兌Q然后再~写代码?<br /> <br />   使用步骤Q?<br /> <br />   (1) 定义用户、用L。参考第七章擯FC Utilities? <br /> <br />   Z的窗口控件、菜单、用户对象、其他控件定义安全属性?<br /> <br />   (2) 调用n_cst_appmanager的of_SetSecurity函数创徏安全对象this.of_SetSecurityQTRUEQ?<br /> <br />   (3) 为安全对象徏立一个事务对象?<br /> <br />   Itr_sec = Create n_tr <br /> <br />   Connect using itr_secQ?<br /> <br />   (4) 调用函数of_InitSecurity初始化安全对象?<br /> <br />    This.inv_security.of_InitSecurityQitr_sec.擡ISAPP敚琯nv_app.of_GetUserIDQ) <br /> <br />   (5) 以上的代码全部在n_cst_appmanager的pfc_Open事g中编写?<br /> <br />   (6) 应用E序关闭Ӟ断开事务对象的连接、删除事务对象。以下的例子在n_cst _appmanager的pfc_Close事g中?<br /> <br />   Disconnect using itr_sec; <br /> <br />   Destroy itr_sec <br /> <br />   7. 在你需要用安全对象的H口的Open事g或pfc_PreOpen事g中调用函数of_SetSecurityQ) <br /> <br /> <table border="0" cellspacing="0" cellpadding="0" width="600" bgcolor="#ffffff"> <tbody> <tr> <td>IF NOT gnv_app.inv_security.of_SetSecurity(this) THEN <br /> <br /> MessageBox("Security","Unable to set security") <br /> <br /> Close(this) <br /> <br /> End if</td> </tr> </tbody> </table> <br />   说明Q你可以在其他对象(Datawindow、可视用户对象、菜单,所有你惛_现安全机制的对象Q?<br /> <br />   <strong>7. Transaction registration service </strong><br /> <br />   <strong>概要 </strong><br /> <br />    Transaction registration service可以q踪你的应用E序中的事务对象的用过E。这个服务只对基于n_tr的对象有效。PFC使用n_cst_trregistration 对象实现Transaction registration service ?<br /> <br />   用法 <br /> <br />   当应用程序中使用多个事务对象Ӟ你应该用Transaction registration service跟踪所有的事务对象。当你的应用E序关闭Ӟ该对象将会自动删除所有已注册的事务对象。用n_tr的函?of_SetAutoRollback讄ib_autorollback的倹{如果ib_SetAutoRollback的gؓFalse Q则事务对象关闭时将会自动提交。如果ib_SetAutoRollback的gؓTrue Q则事务对象关闭时会自动回滚?<br /> <br />   启动 Transaction registration service <br /> <br />   l_ 调用n_cst_appmanager的of_SetTrRegistration函数 gnv_app.of_SetTrRegistrationQTrueQ当应用E序关闭Ӟ应用E序会自动删?Trasaction registration service ?<br /> <br />   <strong>注册事务对象Q?</strong><br /> <br />   l_ 调用n_cst_trregistration的of_Register函数 gnv_app.inv_trregistration.of_RegisterQSQLCAQ?控制当事务对象正处于q接时被删除时的行ؓl_ 调用n_tr的of_SetAutoRollback函数SQLCA.of_SetAutoRollbackQTrueQ如果你讄为True Q同时该对象正处于连接状态,当它被删除时Service会回滚该事务。如果你讄为False QService回提交该事务。尽如此,你应该显C的提交或回滚、断开q接?<br /> <br />   <strong>2 Datawindow服务 </strong><br /> <br />   <strong>概要 </strong><br /> <br />   大部分的PowerBuilder的应用程序都大量的用了Datawindow控g。PFC因此提供了功能强大的Datawindow Services 。大部分的Service使用时只需一点代码或者根本不需要编码。PFC的Datawindow Servies实际上都是由一个公q父类对象Q不可视用户自定义对象)l承而来。这个父cd象包括了许多Service的函数、事件、实例变量。同时么每个Datawindow Serviceq有自己的函数、事件、实例变量?<br /> <br />   讉KDatawindow Services <br /> <br />   Z使用DataWindow ServicesQ你应该建立Zu_dw的Datawindow对象。U_dw对象包括Q?<br /> <br />   l_ 用于开启、关闭Datawindow Services的函数?<br /> <br />   l_ 用于调用各种Services的函数、事件、实例变量的引用变量?<br /> <br />   l_ 调用Datawindow Service的函数、事件的Precoded事g、用户事?<br /> <br />   l_ 可供你编写代码的IZ件在你的应用E序中所有的DataWindow控g都必Lu_dw的子cR?<br /> <br />   <strong>开启DataWindow Services</strong> <br /> <br />   只开启Datawindow控g需要的Servie Q这h能将应用E序的负荷将到最。以下表格列Z所有的Datawindow Service Q以及对应的对象?<br /> <br />    DataWindow Service 对应的对?br /> <br /> <table border="0" cellspacing="0" cellpadding="0" width="600" bgcolor="#ffffff"> <tbody> <tr> <td>Datawindow service的基c?n_cst_dwsrv <br /> <br /> Dropdown search service n_cst_dwsrv_dropdownsearch <br /> <br /> Filters service n_cst_dwsrv_filter <br /> <br /> Find andreplace service n_cst_dwsrv_find <br /> <br /> Linkage service n_cst_dwsrv_linkage <br /> <br /> Multitable update service n_cst_dwsrv_multitable <br /> <br /> Print preview service n_cst_dwsrv_printpreview <br /> <br /> DataWindow property service n_cst_dwsrv_property <br /> <br /> Querymode service n_cst_dwsrv_querymode <br /> <br /> Reporting service n_cst_dwsrv_report <br /> <br /> Required column service n_cst_dwsrv_reqcolumn <br /> <br /> DataWindow resize service n_cst_dwsrv_resize <br /> <br /> Row management service n_cst_dwsrv_rowmanager <br /> <br /> Row selection service n_cst_dwsrv_rowselection <br /> <br /> Sort service n_cst_dwsrv_sort </td> </tr> </tbody> </table> <br />  <strong>8. DataWindow Services 的父c?</strong><br /> <br />   <strong>概要 </strong><br /> <br />    DataWindow Services的父cd括了所有DataWindow Services需要的Instance变量、事件、函数。PFC使用n_cst_dwsrv实现DataWindow Services的父cR?<br /> <br />   DataStore ServiceQDataStore Service的对象是n_cst_dssrv <br /> <br />   用法 <br /> <br />   你可以用这些Service实现如下功能 <br /> <br />   l_ 获取、设|DataWindow信息 <br /> <br />   l_ 修改、获取DataWindow脚本函数 <br /> <br />   l_ 默认DataWindow service <br /> <br />   父类函数在子cM有效 <br /> <br />   因ؓn_cst_dwsrv是所有DataWindow services的父c,因此所有在n_cst_dwsrv的函数在它的子类中都有效?<br /> <br />   开启Basic DataWindow service <br /> <br />   l_ 调用u_dw的of_SetBase函数 <br /> <br />    dw_emplist.of_SetBaseQTRUEQ?<br /> <br />   当Datawindow被删除时u_dw会自动删除该Service ?<br /> <br />   讉KDataWindow <br /> <br />   l_ 调用n_cst_dwsrv中的函数 <br /> <br />   l_ 定义cd为n_cst_conversion的变?<br /> <br />   n_cst_conversion inv_conversion <br /> <br />   因ؓn_cst_conversion是自动实例化Q因此不需要用Create或者Destroy语句?<br /> <br />   调用转换服务的函敎ͼ <br /> <br />   l_ 调用函数 <br /> <br />   下面的例子假设inv_conversion是实例变量: <br /> <br />    String ls_checked <br /> <br />   Ls_checked = inv_conversion.of_StringQcbx_confirmed.EnabledQ?<br /> <br />   MessageBox <br /> <br />   <strong>7 日期/旉服务 </strong><br /> <br />   概要 <br /> <br />   PFC的日?旉提供了许多用于计日期、时间的函数。例如,你可以用of_SecondsAfter函数计算两个旉之间的秒数。它对应的对象是n_cst_datatime ?<br /> <br />   对象 n_cst_datatime对象是自动实例化Q因此你无须使用Create或Destroy语句?<br /> <br />   使用说明Q?<br /> <br />   你可以用日?旉服务q行有关日期/旉的计。该服务提供了以下函敎ͼ <br /> <br />   l_ Julian日期转换成Gregorian日期 <br /> <br />   l_ 秒数{换成时 <br /> <br />   l_ 秒数{换成天数 <br /> <br />   l_ Gregorian日期转换成Julian日期 <br /> <br />   l_ 计算两日期之间的q数 <br /> <br />   l_ 计算两日期之间的月䆾 <br /> <br />   l_ 计算两日期之间的周数 <br /> <br />   l_ 计算两日期之间的U数 <br /> <br />   l_ 计算两日期之间的毫秒 <br /> <br />   l_ 判断日期是否有效 <br /> <br />   l_ 判断某日是否是^日(非周日)。原文:Determine if a date falls on a weekday <br /> <br />   l_ 判断某日是否是周?<br /> <br />   l_ Halt processing until a specified date/time <br /> <br />   你可以将n_cst_datetime定义成全局变量、实例变量、局部变量?<br /> <br />   日期/旉函数使用说明 变量cd <br /> <br />   贯穿整个应用E序 全局变量或者n_cst_appmanager的实例变?<br /> <br />   针对一个对?该对象的实例变量 <br /> <br />   针对一D代?局部变?<br /> <br />   开启日?旉服务Q?<br /> <br />   l_ 定义cd为n_cst_datetime的变?<br /> <br />   n_cst_datetime inv_datetime <br /> <br />   cdn_cst_datetime是自动实例化的,因此无须使用 Create或Destroy语句调用日期/旉服务的函敎ͼ <br /> <br />   l_ 直接调用函数 <br /> <br />   下面的例子假?inv_datetime是实例变?<br /> <br />   Long ll_seconds,ll_days <br /> <br />   Ll_seconds = LongQsle_seconds.TextQ?<br /> <br />   Ll_days = inv_datetime.of_DaysQll_secondsQ?<br /> <br />   MessageBoxQ擠ate/Time敚琒 tringQll_secondsQ? ?seconds is equal t <br /> <br />   o ?+ StringQll_daysQ?+ ?days。摚? <br /> <br />  <strong>8 文g服务 </strong><br /> <br />   <strong>概要</strong> <br /> <br />   PFC的文件服务得你的应用程序可以具?a class="infotextkey" target="_blank">文g理</a>器功能。例如,你可以用f_FileRename函数改变文g名称。文件服务支持多U?a class="infotextkey" target="_blank">操作pȝ</a>Q针对各U?a class="infotextkey" target="_blank">操作pȝ</a>该服务会自动的调用相应的外部函数。它对应的对象是n_cst_filesrv ?<br /> <br />   使用说明Q?<br /> <br />   通过文g服务你可以用如下操作: <br /> <br />   l_ Assembling a concatenated filename ?<br /> <br />   l_ 建立、删除目录?<br /> <br />   l_ 诅R写、重命名、复制文件。适用于大?2765字节的文件?<br /> <br />   l_ 讉K文g信息Q包括日期、时间?<br /> <br />   l_ 在一个目录下创徏、排序文件?<br /> <br />   你可以将n_cst_filesrv定义成全局、实例、局部变量?<br /> <br />   使用情况 变量cd <br /> <br />   贯穿整个应用E序 全局变量或者n_cst_appmanager的实例变量针对一个对?对象的实例变量针对一D代?局部变量由于PFC会根据特定的q_创徏n_cst_filesrv的子cR因此它没有使用PB的自动实例化功能。你必须昄的调用Destroy语句删除该对象?<br /> <br />   开启文件服务: <br /> <br />   1. 定义cd为n_cst_filesve的变?<br /> <br />    n_cst_filesrv inv_filesrv <br /> <br />   2. 调用全局函数f_set_filesrvQ?<br /> <br />    f_SetFilesrvQinv_filesrv,TRUEQ?<br /> <br />   该函C自动的徏立对象inv_filesrv ?<br /> <br />   3. 使用完毕后删除对?<br /> <br />   Destroy inv_filesrv <br /> <br />   调用文g服务的函敎ͼ <br /> <br />   l_ 直接调用函数 <br /> <br />   该例子调用函数of_FileRead讉K文g信息。该例子假设inv_filesrv是实例变量: <br /> <br /> <table border="0" cellspacing="0" cellpadding="0" width="600" bgcolor="#ffffff"> <tbody> <tr> <td>Integer li_return <br /> <br /> String ls_file[] <br /> <br /> li_return = inv_filesrv.of_FileRead(sle_filename.text, ls_file) <br /> <br /> CHOOSE CASE li_return <br /> <br /> CASE ? <br /> <br /> MessageBox("Error", "Error accessing file") <br /> <br /> CASE ELSE <br /> <br /> // File processing goes here <br /> <br /> END CHOOSE </td> </tr> </tbody> </table> <br />   删除该服务: <br /> <br /> l_ 使用DESTROY语句 <br /> <br /> DESTROY inv_filesrv <br /> <br />   <strong>9 INI文g服务</strong> <br /> <br />   <strong>概要 </strong><br /> <br />   PFC的INI文g服务提供了许多读、写INI文g的函数。它对应的对象是n_cst_ini file?<br /> <br />   使用说明Q?<br /> <br />   你可以用INI文g做到如下Q?<br /> <br />   l_ 索INI文g中的所有键 <br /> <br />   l_ 索INI文g中的所有段 <br /> <br />   l_ 删除INI文g中的所有行 <br /> <br />   l_ 删除INI文g中一?<br /> <br />   l_ 删除INI文g中一D?<br /> <br />   你可以同时用ProfileInt、ProfileString?SetProfileString讉KINI文g?<br /> <br />   INI文g服务对大写不敏感?<br /> <br />   开启INI文g服务Q?<br /> <br />   l_ 定义cd为n_cst_inifile的变量: <br /> <br />   n_cst_inifile inv_ini_handler <br /> <br />   该类型属于自动实例化Q因此你无须调用Create与Destroy ?<br /> <br />   使用INI文g服务Q?<br /> <br />   l_ 调用n_cst_inifile的对象函敎ͼ <br /> <br /> <table border="0" cellspacing="0" cellpadding="0" width="600" bgcolor="#ffffff"> <tbody> <tr> <td>String ls_keys[] <br /> <br /> Integer li_count, li_size <br /> <br /> Li_size = inv_ini_handler.of_GetKeysQgnv_app.of_GetAppINIFileQ)Q? <br /> <br /> CustApp s_keysQ?<br /> <br /> Lb_keys.ResetQ) <br /> <br /> For li_count = 1 to li_size <br /> <br /> Lb_keys.AddItemQls_keys[li_count]Q?<br /> <br /> Next </td> </tr> </tbody> </table> <br /> <strong>10 数字服务 </strong><br /> <br />   <strong>概要 </strong><br /> <br />   PFC的数字服务提供的函数使得你可以处理二q制数。例如,你可以用of_GetB it函数判断一位是开q是兟?<br /> <br />   使用说明Q?<br /> <br />   你可以用数字服务中的函数做刎ͼ <br /> <br />   l_ 判断一位是开q是?<br /> <br />   l_ 十q制转换成二q制 <br /> <br />   l_ 二q制转换成十q制 <br /> <br />   与Window SDK共同使用该对象:Windows SDK中许多函数都使用位返回倹{因此你需要用函数f_GetBit?<br /> <br />   你可以将n_cst_numerical定义成全局、实例、局部变量用说?变量cd贯穿整个应用E序 全局变量或者n_cst_appmanager的实例变量针对一个对?对象的实例的变量针对一D脚?局部变量开启数字服务: <br /> <br />    l_ 定义cd为n_cst_numerical的变?<br /> <br />   n_cst_numerical inv_numerical <br /> <br />   cdn_cst_numerical自动实例化,你无M用Create或者Destroy语句?<br /> <br />   调用数字服务Qnumerical serviceQ函敎ͼ <br /> <br />   l_ 直接调用函数 <br /> <br />   下面的例子假?inv_numerical是实例变量: <br /> <br /> <table border="0" cellspacing="0" cellpadding="0" width="600" bgcolor="#ffffff"> <tbody> <tr> <td>Long ll_base10 <br /> <br /> String ls_binary <br /> <br /> Ll_base10 = LongQsle_base10.textQ?<br /> <br /> Ls_binary = inv_numerical.of_BinaryQll_base10Q?<br /> <br /> MessageBox("Numerical", String(ll_base10) + " base 10 is equal to " + <br /> <br /> String(ll_base10) + " base 10 is equal to " + ls_binary + " in binary. <br /> <br /> ") </td> </tr> </tbody> </table> <br />   <strong>11 q_服务 </strong><br /> <br />   <strong>概要 </strong><br /> <br />   PFC的^台服务提供的函数使到你的应用E序可以使用特定q_的函数。你可以使用该服务实现支持多q_的应用程序,而无d你的应用E序中加入有兛_^台检的代码。例如,你可以调用函?of_GetFreeMemory定现在所剩的内存大小。^台服务此时便会依据不同的q_调用相应的外部函数而完成工作。该服务对应的对象是 n_cst_platform以及不同q_的相应的子类?<br /> <br />   打印与页面设|对话框QPFC的^台服务会Ҏ不同的^C相应的调整?<br /> <br />   使用说明Q?<br /> <br />   q_服务提供的函数有Q?<br /> <br />   l_ 定可用内存I间 <br /> <br />    l_ 定可用资源I间 <br /> <br />   l_ 定某一字符串的高度、宽度,单位是PBUs <br /> <br />   你可以将 n_cst_platform定义成全局变量、实例变量、局部变量用说?变量说明贯穿整个应用E序 全局变量、n_cst_appmanager的实例变量针对一个变?对象的实例变量针对一D代?局部变量^台服务没有用自动实例化功能Q因此你必须昄的删除n_cst_platform ?<br /> <br />   在Macintosh上:?Macintosh上函数of_GetTextSize无法使用?<br /> <br />   开启^台服务: <br /> <br />   (1) 定义cdn_cst_platform的变量: <br /> <br />   n_cst_platform inv_platform <br /> <br />    (2) 调用f_SetPlatform全局函数 <br /> <br />   f_SetPlatformQinv_platformQTRUEQ?<br /> <br />   函数f_SetPlatform会自动徏立该对象?<br /> <br />   调用q_服务函数Q?<br /> <br />   l_ 直接调用函数 <br /> <br />   下面的例子调用函数of_GetFreememory在状态栏处显C可用内存的大小?<br /> <br /> <table border="0" cellspacing="0" cellpadding="0" width="600" bgcolor="#ffffff"> <tbody> <tr> <td>Long ll_free_monery <br /> <br /> ll_free_memory = inv_platform.of_GetFreeMemoryQ) <br /> <br /> gnv_app.of_GetFrameQ). SetMicroHelpQ擣ree memoryQ?+ StringQll_ <br /> <br /> free_memoryQ)</td> </tr> </tbody> </table> <br />   删除服务 <br /> <br />   l 调用 Destroy 语句 <br /> <br />   Destroy inv_platform <br /> <span style="color: red"><br /> 未完。。?/span> <img src ="http://www.aygfsteel.com/keweibo/aggbug/325015.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/keweibo/" target="_blank">KE</a> 2010-07-01 21:35 <a href="http://www.aygfsteel.com/keweibo/articles/325015.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PB 学习W记http://www.aygfsteel.com/keweibo/articles/324787.htmlKEKETue, 29 Jun 2010 08:09:00 GMThttp://www.aygfsteel.com/keweibo/articles/324787.htmlhttp://www.aygfsteel.com/keweibo/comments/324787.htmlhttp://www.aygfsteel.com/keweibo/articles/324787.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/324787.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/324787.html//取得关键字的字段cd
ls_type1 = dw_base.Describe(""+scolumnname+".ColType")
ls_type2 = dw_base.Describe(""+sDispColumn+".ColType")
sdbColumnName=dw_base.Describe(""+scolumnname+".dbName")//关键字的字段?Modify By GangL 04/12/06 PM 2:17
sdbDispColumn=dw_base.Describe(""+sDispColumn+".dbName")


long ll_found
IF not(isnull(ls_keyword) or ls_keyword = '')  then
 IF ls_type1 = 'long' THEN
  ll_found = dw_base.Find(""+sColumnName+" = "+ls_keyword+"",1,dw_base.RowCount())
 ELSE
  ll_found = dw_base.Find(""+sColumnName+" = '"+ls_keyword+"'",1,dw_base.RowCount())
 END IF
 dw_base.ScrollToRow(ll_found)
 dw_base.SetRow(ll_found)
 sle_1.setfocus()

PB数据H口使用SetSqlSelectQ)函数应注意的问题

Limitations to using SetSQLSelectUse SetSQLSelect only if the data source for the DataWindow object is a SQL SELECT statement without retrieval arguments and you want PowerBuilder to modify the update information for the DataWindow object:

dw_1.Modify("DataWindow.Table.Select='select...'")

Modify will not verify the SELECT statement or change the update information, making it faster but more susceptible to user error. Although you can use Modify when arguments are involved, it is not recommended because of the lack of checking.

在脚本中修改数据H口语法Ӟ如果數據H口沒有檢烦條gQ可以?font face="Times New Roman">Getsqlselectdsql语句Q修改ؓ自己需要的sql语句后可?font face="Times New Roman">Setsqlselect重新讄查询条gQ也可以?font face="Times New Roman">MODIFYQ)函数修改Q如讄不同?font face="Times New Roman">where条gQ另外设|过后要恢复原来数据H口?font face="Times New Roman">sql语句?/p>

如果有检索条件就不能?font face="Times New Roman">setsqlselectQ?/p>

只可以用dw_1.Modify("DataWindow.Table.Select='select...'")

EgQ?/p>

ls_original=dw_1.getsqlselect()

if rb_3.checked=true then //base salary

       ls_newsql=ls_original +" and (staff_master.monthly_pay=0 )"

else               // fixed salary

       ls_newsql=ls_original +" and (staff_master.monthly_pay in ('1','2','3') )"

end if

//int i

//i=dw_1.setsqlselect(ls_newsql) //// 数据H口没有讄索参数可以用setsqlselect

string ls_tmp

//ls_tmp="DataWindow.Table.Select='"+ls_newsql+"'"http://// 加入?font face="Times New Roman">where条g中用到单引号‘’q时dw_1.Modify("DataWindow.Table.Select='select...'")中的单双引号应互?/p>

ls_tmp='DataWindow.Table.Select="'+ls_newsql+'"'

ls_tmp=dw_1.Modify(ls_tmp) ////有检索参数就只能?font face="Times New Roman">dw_1.modify()

dw_1.setsqlselect(ls_original)



KE 2010-06-29 16:09 发表评论
]]>PB 动态打开H体Q通过字符串指定窗口名U?/title><link>http://www.aygfsteel.com/keweibo/articles/323665.html</link><dc:creator>KE</dc:creator><author>KE</author><pubDate>Wed, 16 Jun 2010 12:08:00 GMT</pubDate><guid>http://www.aygfsteel.com/keweibo/articles/323665.html</guid><wfw:comment>http://www.aygfsteel.com/keweibo/comments/323665.html</wfw:comment><comments>http://www.aygfsteel.com/keweibo/articles/323665.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/keweibo/comments/commentRss/323665.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/keweibo/services/trackbacks/323665.html</trackback:ping><description><![CDATA[下面的代码打开四个H口Q其中被打开的窗口名U存攑֜字符变量中; <br /> 你要打开不同的窗口只需要改变字W变量的值就可以了; <br /> <br /> window   w_stock_win[   ] <br /> string   ls_stock_type[4] <br /> ls_stock_type[1]   =   "w_stock_wine " <br /> ls_stock_type[2]   =   "w_stock_scotch " <br /> ls_stock_type[3]   =   "w_stock_beer " <br /> ls_stock_type[4]   =   "w_stock_soda " <br /> FOR   n   =   1   to   4 <br />     //该语句执行后Qw_stock_win[n]的窗口从ls_stock_type[n]变量中指定的H体创徏 <br />     Open(w_stock_win[n],   ls_stock_type[n]) <br /> NEXT <img src ="http://www.aygfsteel.com/keweibo/aggbug/323665.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/keweibo/" target="_blank">KE</a> 2010-06-16 20:08 <a href="http://www.aygfsteel.com/keweibo/articles/323665.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PBpȝ函数 ?日期旉函数http://www.aygfsteel.com/keweibo/articles/323155.htmlKEKEWed, 09 Jun 2010 06:52:00 GMThttp://www.aygfsteel.com/keweibo/articles/323155.htmlhttp://www.aygfsteel.com/keweibo/comments/323155.htmlhttp://www.aygfsteel.com/keweibo/articles/323155.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/323155.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/323155.html

PBpȝ函数 ? 日期旉函数Day()
—————————————————————————?
功能得到日期型数据中的号?1?1之间的整数??br /> 语法Day ( date )
参数dateQ要得到h的日期D回? Integer。函数执行成功时q回h(1?1之间的整数?。如果date参数的gؓNULLQ则Day()函数q回NULL?br /> —————————————————————————?#8211;

DayName()
功能得到指定日期是一周中的星期几(例如QSunday, Monday…)?br /> 语法DayName ( date )
参数dateQdatecd值或变量q回值String。函数执行成功时q回指定日期的星期表C?例如QSunday, Monday…)。如果date参数的gؓNULLQ则DayName()函数q回NULL?br /> —————————————————————————?#8211;

DayNumber()
功能得到日期型数据是一星期中的W几???之间的整数表C,星期天ؓ1Q星期一?Q?#8230;)?br /> 语法DayNumber ( date )
参数dateQdatecd值或变量q回值Integer。函数执行成功时q回指定日期是一星期中的W几??~7表示Q星期天?Q星期一? 2Q?#8230;)。如果date参数的gؓNULLQ则DayNumber()函数q回NULL?br /> —————————————————————————?#8211;

DaysAfter()
功能得到两个日期间的天数?br /> 语法DaysAfter ( date1, date2 )
参数date1QdatecdQ指定v始日期date2QdatecdQ指定终止日期返回值Long。函数执行成功时得到两个日期之间的天数。如? date2的日期在date1的前面,那么DaysAfter()函数q回负倹{如果Q何参数的gؓNULLQ则DaysAfter()函数q回 NULL?br /> —————————————————————————?#8211;

Hour()
功能得到旉g的小Ӟ采用24时制?br /> 语法Hour ( time )
参数timeQtimecd的D回值Integer。函数执行成功时得到time参数中的时Q?0?3之间Q。如果time参数的gؓNULLQ则 Hour()函数q回NULL?br /> —————————————————————————?#8211;

Minute()
功能得到旉g的分钟,有效值在00?9之间?br /> 语法Minute ( time )
参数timeQtimecd的D回值Integer。函数执行成功时得到time参数中的分钟Q?0?9之间Q。如果time参数的gؓNULLQ则 Minute()函数q回NULL?br /> —————————————————————————?#8211;

Month()
功能得到日期g的月份,有效值在1?2之间?br /> 语法Month ( date )
参数dateQdatecd的D回值Integer。函数执行成功时得到date参数中的月䆾Q??2之间Q。如果date参数的gؓNULLQ则 Month()函数q回NULL?br /> —————————————————————————?#8211;

Now()
功能得到客户机的当前pȝ旉Q返回gؓTimecd?br /> 语法Now()q回值Time。该函数q回客户机的当前pȝ旉?br /> —————————————————————————?#8211;

RelativeDate()
功能得到指定日期前多天或后多少天的日期?br /> 语法RelativeDate(date,n)
参数dateQDatecdQ指定基准日期nQintegercdQ指定天数返回值Date。当n的值大?时返回参数date指定日期后第n天的日期Q? 当n的值小?时返回参数date指定日期前第n天的日期。如果Q何参数的gؓNULLQ则RelativeDate()函数q回NULL?br /> —————————————————————————?#8211;

RelativeTime()
功能得到指定旉前多秒或后多少U的旉Q采?4时制?br /> 语法RelativeTime ( time, n )参数timeQtimecdQ指定基准时间nQlongcdQ指定秒数返回值Time。当n的值大?时返回参数time指定旉后第nU的旉Q当n 的值小?时返回参数time指定旉前第nU的旉。如果Q何参数的gؓNULLQ则RelativeTime()函数q回NULL?br /> —————————————————————————?#8211;

Second()
功能得到旉g的秒Q有效值在00?9之间?br /> 语法Second ( time )
参数timeQtimecd的D回值Integer。函数执行成功时得到time参数中的U(00?9之间Q。如果time参数的gؓNULLQ则 Second()函数q回NULL?br /> —————————————————————————?#8211;

Today()
功能得到当前pȝ日期Q在某些情况下,同时得到当前pȝ旉?br /> 语法Today()q回值Date。该函数q回当前pȝ日期。用法单独调用Today()函数Ӟ该函数Lq回当前pȝ日期Q但是,虽然Today() 函数的返回值类型ؓDateQ在该函数用做某些函数的参数、而该参数要求DateTimecd的值时QToday()函数也能够在q回当前pȝ日期的同? q回当前pȝ旉。再如,Today()函数作ؓ数据H口控gSetItem()函数的参敎ͼ该函数参C指定的数据窗口列的数据类型ؓ DateTimeQ那么当前系l日期和旉同时设|到数据H口指定中?br /> —————————————————————————?#8211;

Year()
功能得到日期g的年?有效取?000?000)?br /> 语法Year(date)
参数dateQdatecd的D回值Integer。函数执行成功时得到date参数中的q䆾Q采用四位数字)Q发生错误时q回1900Q如果date 参数的gؓNULLQ则Year()函数q回NULL。用法当应用E序把有两位数字表示q䆾的字W串转换成日期时QPowerBuilderҎ下述规则 选择世纪Q如果年份值在00?9之间QPowerBuilder年份中的世U(前两位数字)当作20Q如果年份值在50?9? _PowerBuilder年份中的世U(前两位数字)当作19。比如,字符?#8221;20-10-25″被PowerBuilder转换? 2020-10-25Q字W串”98-10-25″被PowerBuilder转换?998-10-25。因此,如果应用E序中需要指?950q之? 的日期,应该使用四位数字表示q䆾Q以避免引v歧义。PowerBuilder能够处理的年份从1000?000之间?/span>



KE 2010-06-09 14:52 发表评论
]]>
PB String ( data, { format } ) http://www.aygfsteel.com/keweibo/articles/323152.htmlKEKEWed, 09 Jun 2010 06:24:00 GMThttp://www.aygfsteel.com/keweibo/articles/323152.htmlhttp://www.aygfsteel.com/keweibo/comments/323152.htmlhttp://www.aygfsteel.com/keweibo/articles/323152.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/323152.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/323152.html函数作用Q? 该函数有两种用法Q一U是q行cd转换Q见语法格式二;另一U是q行cd转换的同时还q行数据格式的{换,见语法格式一。重Ҏ格式一的学习和理解?

函数语法Q?格式一QString ( data, { format } )

   格式二:String ( Blob )

dataQ要q行cd和格式{换的数据Q可以是date、DateTime、数字类型、time? 者stringcd?

formatQ格式串Q用来指定参数data的显C格式? Ҏ参数data的数据类型的不同而不同。当参数data为StringcdӞ该参数是必需的,否则没有必要用该函数了?

q??| String。函数执行成功时q回以字W串方式表示的指定数据,如果data参数的数据类型与format参数指定的格式不匚w、format参数指定? 格式无效、或data参数不是前面提到的适宜数据cdӞString()函数q回I字W串Q?"Q?

使用说明Qformat是个用掩码表C的字符Ԍ参数data的类型不同有不同的用法:

对data参数为数值类型的情况来说Q格式ؓQ?

正数格式Q负数格式;零的昄格式Q?

I的昄格式除第一部分必须提供外,其它部分可以省略。数值型昄格式中用两个掩码字W:#?Q其中,使用#代表0"9之间的Q意数 字,0代表每个雉要显C。另外,货币W号Q?或EQ、百分号Q?Q、小数点Q?Q、逗号Q,Q等字符也可以出现在格式字符串中Q但是,除小数点Q?Q? 逗号Q,Q能够出现在格式字符#?之间外,其它字符只能攄在格式串的前面或后面Q例如,###,###$###是个错误的格式串Q? K?##,###,###是个正确的格式串。省略format参数ӞString()函数使用PowerBuilder~省格式。注意,如果昄格式? 多个部分Q各部分之间的分PQ)不能省略。其它字W也可以出现在显C格式字W串中(只能攑֜格式串的开头和末尾Q,但它们没有特D意义,pȝ只是照原? 昄。例如,用显C格式字W串“收入##”格式化数?2Ӟ昄l果?#8220;收入12”?

对data参数为字W串QStringQ类型的情况来说Qformat参数的语法格式ؓQ?

正常字符串格式;I值时格式

?#8220;正常字符串格?#8221;中,@代表字符串中的Q意字W,除此之外的Q何字W照原样昄Q例如,如果定义了下面的格式Q?

    Q@@Q@@@@-@@@@  

则字W串0166767593昄为:  

    Q?1Q?676-7593  

对data参数为日期(DateQ类型的情况? _format参数的语法格式ؓQ?

正常日期格式Q日期ؓI值时的格?

日期格式中格式字W意义如下:

d -- 开头不?的日敎ͼ?Q?

dd -- 开头带0的日敎ͼ?8Q?

ddd -- 星期的英文羃写(如Mon、TueQ?

dddd -- 星期的英文全Uͼ如Monday、TuesdayQ?

m -- 开头不?的月份(?Q?

mm -- 开头带0的月份(?8Q?

mmm -- 月䆾的英文羃写(如Jan、FebQ?

mmmm -- 月䆾的英文全Uͼ如January、FebruaryQ?

yy -- 两位数字表示的年份(?7Q?

yyyy -- 四位数字表示的年份(?997Q?

另外Q还可以使用下面的关键字作ؓ日期的显C? 格式Q?

[General] Windowspȝ中定义的短日期格?

[LongDate] Windowspȝ中定义的长日期格?

[ShortDate] Windowspȝ中定义的短日期格?

对data参数为时_TimeQ类型的情况来说Q语法格式ؓQ?

正常旉格式Q时间ؓI值时的格?

旉格式中格式字W意义如下:

h -- 开头不?的小Ӟ比如6Q?

hh -- 开头带0的小Ӟ比如06Q?

m -- 开头不?的分钟(比如6Q?

mm -- 开头带0的分钟(比如06Q?

s -- 开头不?的秒Q比?Q?

ss -- 开头带0的秒Q比?6Q?

f -- 开头不?的微U,可以指定1"6个fQ每个f代表一部分微秒

AM/PM -- 用AM/PM昄上、下午时_12时?

am/pm -- 用am/pm昄上、下午时_12时?

A/P -- 用A/P昄上、下午时_12时?

a/p -- 用a/p昄上、下午时_12时?

另外Q显C格式中q可以用关键字 [Time]Q它表示按当前Windowspȝ定义的格式显C时间?nbsp; 

? data参数为日期时_DateTimeQ类型的情况来说Q语法格式ؓQ?

正常 日期旉格式Q日期时间ؓI值时的格?

日期旉cd使用的掩码就是把日期掩码? 旉掩码l合h卛_?

代码实例Q?

?、下面的语句指定日期{换ؓQ?Jan 1,1998的格式:

string(1998-01-31,”mmmm dd,yyyy”)

?、下面的语句把DateTimecd的D{换ؓQJan 1,1998 6 hrs and 8 min的字W串Q?

string(DateTime(1998-01-31,06:08:00),’mmmm dd,yyyy h “hrs and” m ”min”’)  

?、下面的 语句把string1讄?123Q?

integer li_num = 123  

string ls_temp

ls_temp = string(li_num,”0000;(000);****;I?#8221;)  

?、下面的语句把string1讄?23Q?

integer li_num = -123

string ls_temp

ls_temp = string(li_num,”000;(000);****;I?#8221;)

?、下面的语句把string1讄?***Q?

integer li_num = 0  

string ls_temp

ls_temp = string(li_num,”0000;(000);****;I?#8221;)

?、下面的语句把string1讄为空Q?

integer li_num

string ls_temp

SetNull(li_num)

ls_temp = string(li_num,”0000;(000);****;I?#8221;)



KE 2010-06-09 14:24 发表评论
]]>
PB报错: 不能?DB-LibraryQ如 ISQLQ或 ODBC 3.7 或更早版本将 ntext 数据或仅使用 Unicode 排序规则?Unicode 数据发送到客户?/title><link>http://www.aygfsteel.com/keweibo/articles/322928.html</link><dc:creator>KE</dc:creator><author>KE</author><pubDate>Sun, 06 Jun 2010 15:19:00 GMT</pubDate><guid>http://www.aygfsteel.com/keweibo/articles/322928.html</guid><wfw:comment>http://www.aygfsteel.com/keweibo/comments/322928.html</wfw:comment><comments>http://www.aygfsteel.com/keweibo/articles/322928.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/keweibo/comments/commentRss/322928.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/keweibo/services/trackbacks/322928.html</trackback:ping><description><![CDATA[<p>不能?DB-LibraryQ如 ISQLQ或 ODBC 3.7 或更早版本将 ntext 数据或仅使用 Unicode 排序规则?Unicode 数据发送到客户端?br /> <br /> 在PB开发过E中Q由于数据库中用了 ntext字段Q出C下提C错误, <br /> PB报错: 不能?DB-LibraryQ如 ISQLQ或 ODBC 3.7 或更早版本将 ntext 数据或仅使用 Unicode 排序规则?Unicode 数据发送到客户端?/p> <p> </p> <p>׃sql server中,ntext和nvarchar字段是用unicode~码存储内容的,因此php通过mssql扩展d带ntext和nvarcharcd字段的时候会抱错?/p> <p>如果 title 字段cd?nvarcharQcontent 字段cd?ntext Q那么下面的sql语句会报错:</p> <p>select title,content from article where 1</p> <p>正确的写法是Q?/p> <p>select convert(varchar(255),title) as title, convert(text,content) as content from article where 1</p> <p>或者不使用ntext字段</p> <img src ="http://www.aygfsteel.com/keweibo/aggbug/322928.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/keweibo/" target="_blank">KE</a> 2010-06-06 23:19 <a href="http://www.aygfsteel.com/keweibo/articles/322928.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PB ImportFile导入数据http://www.aygfsteel.com/keweibo/articles/322498.htmlKEKETue, 01 Jun 2010 14:47:00 GMThttp://www.aygfsteel.com/keweibo/articles/322498.htmlhttp://www.aygfsteel.com/keweibo/comments/322498.htmlhttp://www.aygfsteel.com/keweibo/articles/322498.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/322498.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/322498.html转自Qhttp://hi.baidu.com/zydpc/blog/item/3268273eb8e80ce055e72338.html
描述

Inserts data into a DataWindow control, DataStore object, or graph control from data in a file.一个文件插入数据到一个数据窗口控Ӟ数据存储对象Q图形或数据控制?/span> The data can be tab-separated text, comma-separated text, XML, or dBase format 2 or 3.q些数据可以制表W分隔的文本Q以逗号分隔的文本,XML或dBASE格式2??/span> The format of the file depends on whether the target is a DataWindow (or DataStore) or a graph and on the type of graph.该文件的格式取决于该目标是一个数据窗口(或数据存储)或图和图型?/span>

For DataWindow and DataStore syntax, see the ImportFile method for DataWindows in the DataWindow Reference or the online Help .对于数据H口和DataStore的语法,请参?em>联机帮助 ImportFile 的方法,在数据窗口DataWindows参考或 ?/span>

Applies to适用?/span>

Graph controls in windows and user objects.图控制在H口和用户对象?/span> Does not apply to graphs within DataWindow objects, because their data comes directly from the DataWindow.不适用于在数据H口对象的图形,因ؓ它们的数据直接来自数据窗口?/span>

Syntax句法

graphname . ImportFile (  { importtype}, filename {, startrow {, endrow {, startcolumn } } } ) graphname。ImportFileQ(importtypeQ,Q?/strong>文g名,startrowQ,endrowQ,startcolumnQ)Q)

Argument论据

Description描述

graphname graphname

The name of the graph control to which you want to copy data from the specified file.该控件的名称图,您要复制文g数据从指定的?/span>

importtype (optional) importtypeQ?/em>可选)

An enumerated value of the SaveAsType DataWindow constant.一个数据窗口不断枚丑ր的SaveAsType?/span> If this argument is specified, the importtype argument can be specified without an extension.如果该参数指?em>Qimporttype参数可以指定不带扩展名?/span> Valid type arguments for ImportFile are:论点ImportFile有效的类型有Q?/span>

  • Text!文字Q?/span>

  • CSV! CSV格式Q?/span>

  • XML! XML的!

  • DBase2! DBase2Q?/span>

  • DBase3! DBase3Q?/span>

 

filename 文g?/em>

A string whose value is the name of the file from which you want to copy data.一个字W串Q其值是文g名从你要复制的数据?/span> The file must be an ASCII, tab-separated file (TXT), comma-separated file (CSV), Extensible ), or dBase format 2 or 3 file (DBF).该文件必L一个ASCIIQ制表符分隔的文ӞTXTQ,逗号分隔文gQCSVQ,可扩展)Q或2?的dBase格式文gQDBF的)?/span> Specify the file's full name.指定文g的全名?/span> If the optional importtype is not specified, the name must end in the appropriate extension.如果没有指定可选的importtypeQ?/em>名称必须l束在适当廉?/span>

If you do not specify filename or if it is null , ImportFile prompts the user for a file name.如果你不指定文g?/em> Q或者如果它为nullQImportFile提示文g的名UCؓ一个用戗?/span> The remaining arguments are ignored.剩余的参数将被忽略?/span>

startrow (optional) startrowQ?/em>可选)

The number of the first detail row in the file that you want to copy.该文件要拯数的W一行中的细节?/span> The default is 1.默认??/span>

For default XML import, if startrow is supplied, the first N ( startrow -1) elements are skipped, where N is the DataWindow row size.对于默认XML导入Q如?em>startrow提供Q?W?/em>一?em>NQstartrow -1Q的元素都被跌Q?其中 N是数据窗口行的大?/span>

For template XML import, if startrow is supplied, the first对于XML导入模板Q如?em>startrow提供Q首 ( startrow -1) occurrences of the repetitive row mapping defined in the template are skipped. Qstartrow -1Q发生了重复的行映射模板中定义蟩q?/span>

endrow (optional) endrowQ?/em>可选)

The number of the last detail row in the file that you want to copy.该文件要拯数的最后细节行中?/span> The default is the rest of the rows.默认的是该行的其余部分?/span>

For default XML import, if endrow is supplied, import stops when N * endrow elements have been imported, where N is the DataWindow row size.对于默认XML导入Q如?em>endrow提供Q进口停?em>?/em> N * endrow内容已经q口的, 其中 N是数据窗口行的大?/span>

For template XML import, if endrow is supplied, import stops after endrow occurrences of the repetitive row mapping defined in the template have been imported.对于XML导入模板Q如?em>endrow提供Q该模板中定义导入后停止endrow行中出现的重复测l已导入?/span>

startcolumn (optional) startcolumnQ?/em>可选)

The number of the first column in the file that you want to copy.匮乏的拷贝数列的W一个文件中的你?/span> The default is 1.默认??/span>

For default XML import, if startcolumn is supplied, import skips the first ( startcolumn - 1) elements in each row.对于默认XML导入Q如?em>startcolumn提供Q进口蟩q第一Qstartcolumn - 1Q在每个行元素?/span>

This argument has no effect on template XML import.q一论点q没有对模板的效果XML导入?/span>

Returnsq回

Long.ѝ?/span> Returns the number of rows that were imported if it succeeds and one of the following negative integers if an error occurs:q回发生错误的行的数目进口,如果成功Q它下面的一个负整数Q如果一Q?/span>

  • -1 No rows or startrow value supplied is greater than the number of rows in the file -1没有行或startrow值是文g大于供给的数量的?/span>

  • -2 Empty file or input data does not match number of columns or required column type -2文g为空或输入的数据cd不匹配的列数或要求列

  • -3 Invalid argument -3无效参数

  • -4 Invalid input -4输入无效

  • -5 Could not open the file -5无法打开文g

  • -6 Could not close the file -6无法关闭文g

  • -7 Error reading the text -7错误阅读文本

  • -8 Unsupported file name suffix (must be *.txt, *.csv, *.dbf or *.xml) -8不支持的文g名后~Q必L*. txt文gQ?. CSV格式Q?. dbf?. xml的)

  • -10 Unsupported dBase file format (not version 2 or 3) -10不受支持的dBASE文g格式Q而不是版??Q?/span>

  • -11 XML Parsing Error; XML parser libraries not found or XML not well formed -11 XML解析错误; XML解析器库不存在或没有很好形成的XML

  • -12 XML Template does not exist or does not match the DataWindow -12 XML模板不存在或不匹配的数据H口

 

If any argument's value is null , ImportFile returns null . If the optional importtype argument is specified and is not a valid type, ImportFile returns -3.如果M参数的?strong>?/strong> nullQ?q回 null ImportFile?/strong>如果可?em>importtype参数指定Q而不是一个有效的cdQImportFileq回-3?/span>

Usage用法

The format of the file can be indicated by specifying the optional importtype parameter, or by including the appropriate file extension.该文件的格式Q可通过指定可选的昄importtype参数Q或通过包括适当的文件扩展名?/span>

For graph controls, ImportFile only uses three columns and ignores other columns.对于囑Ş控制QImportFile只?列,而忽略其他列?/span> Each row of data must contain three pieces of information.每个数据行中必须包含三个信息件?/span> The information depends on the type of graph:该信息取决于图表cdQ?/span>

  • For all graph types except scatter, the first column to be imported is the series name, the second column contains the category, and the third column contains the data.对于所有类型,除了散布图,W一列从外地输入的是该系列的名称Q第二列包含c,W三列包含的数据?/span>

  • For scatter graphs, the first column to be imported is the series name, the second column is the data's x value, and the third column is the y value.对于散布图,W一列从外地输入的是该系列的名称Q第二列是数据的x|W三列是y倹{?/span>

 

You can add data to more than one series by specifying different series names in the first column.您可以添加数据到多个pd的第一列指定不同的pd名称研究?/span> To let users select the file to import, specify a null string for filename . PowerBuilder displays the Select Import File dialog box.Z让用户选择要导入的文gQ?文g?/em>指定一?strong>I?/strong>字符丌ӀPowerBuilder中显C选择导入文g对话框?/span>

Double quotes The location and number of double quote marks in a field in a tab delimited file affect how they are handled when the file is imported. 双引?/strong>双数场引号中的位|和一个制表符分隔的文件媄响到他们如何处理Ӟ该文件是q口的?/span> If a string is enclosed in one pair of double quotes, the quotes are discarded.如果字符串被双引h在一对的报h被丢弃?/span> If it is enclosed in three pairs of double quotes, one pair is retained when the string is imported.如果是双引号括在三对Q一Ҏ保留字符串时是进口的?/span> If the string is enclosed in two pairs of double quotes, the first pair is considered to enclose a null string, and the rest of the string is discarded.如果字符串引h在双两对Q第一对被认ؓ是一个空字符串括hQ而其余的字符串将被丢弃?/span>

When there is a double quote at the beginning of a string, any characters after the second double quote are discarded.当有一个双引号的字W串开始时Q双引号的所有字W后Q第二次被丢弃?/span> If there is no second double quote, the tab character delimiting the fields is not recognized as a field separator and all characters up to the next occurrence of a double quote, including a carriage return, are considered to be part of the string.如果没有W二个引P制表W分隔的q回字段是不承认所有作为字D分隔符和字l成的一个运输的下一个出现的一个双引号Q包括被认ؓ是字W串的一部分?/span> A validation error is generated if the combined strings exceed the length of the first string.验证错误Q如果合q生成字W串的字W串长度过了第一?/span>

Double quotes after the first character in the string are rendered literally.双引号字W的字符串字面呈现后的第一ơ?/span> Here are some examples of how tab-delimited strings are imported into a two-column DataWindow:q里有一些例子,说明制表W分隔的字符串被导入C个两列的数据H口Q?/span>

Text in file文本文g

Resultl果

"Joe" TAB "Donaldson" “?#8221;l计?#8220;唐纳?#8221;

Joe Donaldson乔唐Ux

Bernice TAB """Ramakrishnan"""伯尼斯统计表“”“q克里斯南”“”

Bernice "Ramakrishnan"伯尼?#8220;q克里斯南”

""Mary"" TAB ""Li"" “”玛丽“”标签“Q?#8221;C?#8220;”

Empty cellsI细?/span>

"Mich"ael TAB """Lopes""" “q克”机场快线l计?#8220;”“z佩?#8221;“”

Mich "Lopes"q克“z佩?#8221;

"Amy TAB Doherty" “艄l计表多蒂”

Amy<TAB>Doherty in first cell, second cell empty艄<Tab>键多蒂在第一个单元格Q第二个单元gؓI?/span>

3""" TAB 4" 3“”“标签4”

3""" 4" 3“”“4”

注意 Specifying a null string for file name If you specify a null string for filename , the remaining arguments are ignored. 指定一个文件名UCؓI?/strong>字符?/font> Q如果你指定一?strong>I?/strong>字符串ؓ文g?/em> Q其余的参数被忽略?/span> All the rows and columns in the file are imported.文g的所有行和列的都是进口的?/span>

Examples范例

Example 1 CZ1

This statement copies all the data in the file D:\EMPLOYEE.TXT to gr_employee starting at the first row:本声明中的所有数据复制的文gDQ\ EMPLOYEE.TXT?em>gr_employee行开始在W一Q?/span>

gr_employee. ImportFile ("D:\EMPLOYEE.TXT") gr_employee。ImportFileQ?/em>?#8220;DQ\ EMPLOYEE.TXT”Q?/span>

 

Example 2 ?

This statement copies the data from the file D:\EMPLOYEE.TXT starting with row 2 column 3 and ending with row 30 column 5 to the graph gr_employee :本声明的副本文g D中的数据来自Q\ EMPLOYEE.TXT开始,W?行第3列和行结5?0列图gr_employeeQ?/em>

gr_employee. ImportFile ("D:\EMPLOYEE.TXT", 2, 30, 3) gr_employee。ImportFileQ?/em>?#8220;DQ\ EMPLOYEE.TXT”Q?Q?0Q?Q?/span>

 

Example 3 ?

The following statements are equivalent.下面的语句是{h的?/span> Both import the contents of the XML file named myxmldata :q两U导入XML文g的内容命?em>myxmldataQ?/em>

gr_control.ImportFile(myxmldata.xml) gr_control.ImportFileQmyxmldata.xmlQ?/span>
            gr_control.ImportFile(XML!, myxmldata) gr_control.ImportFileQXML的!QmyxmldataQ?/span>

 

Example 4 范例4

This example causes PowerBuilder to display the Specify Import File dialog box:q个例子使PowerBuilder中显C指定文件导入对话框Q?/span>

string null_str字符串null_str

 

SetNull(null_str) SetNullQnull_strQ?/span>

 

dw_main. ImportFile (null_str) dw_main。ImportFileQnull_strQ?/em>


KE 2010-06-01 22:47 发表评论
]]>
DataWindow.Processing 判断 DataWindow 对象的类?/title><link>http://www.aygfsteel.com/keweibo/articles/322457.html</link><dc:creator>KE</dc:creator><author>KE</author><pubDate>Tue, 01 Jun 2010 08:08:00 GMT</pubDate><guid>http://www.aygfsteel.com/keweibo/articles/322457.html</guid><wfw:comment>http://www.aygfsteel.com/keweibo/comments/322457.html</wfw:comment><comments>http://www.aygfsteel.com/keweibo/articles/322457.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/keweibo/comments/commentRss/322457.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/keweibo/services/trackbacks/322457.html</trackback:ping><description><![CDATA[<div class="wmqeeuq" id="blog_text" class="cnt"> <p>可用 DataWindow.Processing 判断 DataWindow 对象的类型,dw的类型如下:<br />     0 (Default) Form, group, query, or tabular <br />     1 Grid <br />     2 Label <br />     3 Graph <br />     4 Crosstab <br />     5 Composite <br />     7 RichText</p> <p>CZ一Q?br /> This.Object.Datawindow.Processing = '0'</p> <p>CZ二:<br /> String    ls_processing</p> <p>ls_processing = idw_requestor.Describe("datawindow.Processing")<br /> If ls_processing = "4" Then<br />     idw_requestor.Modify("DataWindow.Crosstab.StaticMode=Yes")<br /> End If</p> </div> <img src ="http://www.aygfsteel.com/keweibo/aggbug/322457.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/keweibo/" target="_blank">KE</a> 2010-06-01 16:08 <a href="http://www.aygfsteel.com/keweibo/articles/322457.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PB变量的作用域http://www.aygfsteel.com/keweibo/articles/321706.htmlKEKEMon, 24 May 2010 02:25:00 GMThttp://www.aygfsteel.com/keweibo/articles/321706.htmlhttp://www.aygfsteel.com/keweibo/comments/321706.htmlhttp://www.aygfsteel.com/keweibo/articles/321706.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/321706.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/321706.html变量的作用域

  作用域定义变量在什么范围内有效。PowerBuilder的变量作用域共有四种Q全局变量、实例变量、共享变量和局部变量。不同作用域的变量需要在不同 的位|说明,下面分别予以介绍。在~程H口、窗口画W、用户对象画W或菜单ȝ中,选择“Declare”菜单中的“Global Variables”?/span>“Instance Variables?/font>“Shared Variables”可以分别声明全局、实例和׃nq三cd量?/span>

全局变量

  全局变量在整个应用程序中都可讉KQ它的作用域是整个应用程? ?/span>

实例变量

  实例变量与对象相兌Q只有在该对象的事g处理E序或函C才能使用对象定义的实例变量。实例变量在它所兌的对象被打开时创建,被关闭时消失?/font>

׃n变量

  ׃n变量是一U静态变量,q不仅意味着它所在的对象关闭后再ơ打开Ӟ׃n变量依然保持对象关闭时的|而且q意味着同一个类多个实例中的同名׃n变量? 持相同的倹{?/font>

局部变?/font>

  局部变量在使用它的事g处理E序或函C说明Q其作用域仅限于说明它的E序D,在该E序D늚M地方均可讉K局部变量,但其它程序段都不能访问本E序D中 的局部变量。运行程序后Q进入某个程序段Ӟpȝ自动为局部变量分配内存,退出程序段Ӟ局部变量占用的内存被释放?/font>



KE 2010-05-24 10:25 发表评论
]]>
PB Ҏ字符http://www.aygfsteel.com/keweibo/articles/321700.htmlKEKEMon, 24 May 2010 01:40:00 GMThttp://www.aygfsteel.com/keweibo/articles/321700.htmlhttp://www.aygfsteel.com/keweibo/comments/321700.htmlhttp://www.aygfsteel.com/keweibo/articles/321700.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/321700.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/321700.htmlҎ字符

  在字W串当中可以包括Ҏ字符。它们的写法如下Q?/font>

新行QNEWLINEQ:~n

制表W(TABQ:~t

垂直制表QVERTICAL TABQ:~v

回RQCARRIGE RETURNQ:~r

换页QFORMFEEDQ:~f

退|BACKSPACEQ:~b

双引P~"

单引P~'

弯曲W:~~



KE 2010-05-24 09:40 发表评论
]]>
数据H口控g函数(?http://www.aygfsteel.com/keweibo/articles/321698.htmlKEKEMon, 24 May 2010 01:19:00 GMThttp://www.aygfsteel.com/keweibo/articles/321698.htmlhttp://www.aygfsteel.com/keweibo/comments/321698.htmlhttp://www.aygfsteel.com/keweibo/articles/321698.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/321698.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/321698.html数据H口控g函数

本节介l:
· 与数据库有关的函?
· 行操?
· 列操?
· 数据操作

本节重点Q?br /> · 数据H口控g的作?

本节隄Q?
·  

本节要求Q?br /> · 掌握数据H口控g的作?

PowerBuilder为数据窗口控件提供了丰富的函敎ͼq些函数使用戯够在使用数据H口控g时得心应手?br />
与数据库有关的函?/font>

q类函数完成与数据库有关的功能?/p>

一、连接数据库


q接数据库也是指定事务对象。PowerBuilder提供了两个函敎ͼSetTrans()和SetTransObject()?br /> 语法格式Q?br /> dw_control.SetTrans(TransactionObject)
dw_control.SetTransObject(TransactionObject)
其中Qdw_control是所使用的数据窗口控ӞtransactionObject是所要指定的事务对象?br /> q两个函数有一个重要的区别是在用SetTrans()函数Ӟ用户不需做Q何数据初始化或事务对象初始化工作。用户只需要在q里填充一个事务对 象,PB׃自动完成对该事物对象的初始化以及和数据库q接的工作。而用SetTransObject()函数Ӟ用户必须首先把所用的事务对象q接? 数据库上?br /> 但是Q这q不意味着SetTrans()函数比SetTransObject()函数更好Q用SetTrans()函数Ӟ每调用一ơ函数必连接一? 数据库,因ؓq个函数在每个事务处理的末端都会执行Disconnect语句。与此相反,使用SetTransObject()函数可以为数据库l持一? 开放性的q接。因此在一般情况下Qؓ了提高效率,L采用SetTransObject()函数?br /> q两个函数都是成功时q回1Q发生错误时q回-1?/p>

二、检索数?/h3>


用于索数据的函数只有一个,是Retrieve()函数?br /> 语法格式Q?br /> dw_control.Retrieve()
如果数据H口控g上的数据H口对象是有索参数的Q就要在q个函数调用时加上检索参数。而且索参数必d数据H口对象中定义顺序一致?br /> 此函数返回一个长整型的数据,代表索出来的数据行数。如果发生错误,返?1?/p>

三、更新数?/h3>


当用户对数据H口对象内的数据修改后,xq些修改反映到数据库中去Ӟ必须使用Update()函数?br /> 语法格式Q?br /> dw_control.Update()
q个更新可能成功Q也可能p|。一般在q个函数被调用之后,L要做一个检查。请看下面的例子Q?br /> Int li_return
li_return = dw_1.Update()
IF li_return = 1 THEN
     COMMIT USING SQLCA;
ELSE
     ROLLBACK USING SQLCA;
END IF
在这D代码中Q首先对数据H口控gq行更新操作。但是更新只是把数据写入到客h的内存,q没有提交到数据库中。如果更新成功,把它提交到数据库中Q如 果更新失败,回滚到当前的事务?br />
行操?/span>
行操作的函数主要是对数据库中的数据进行插入、删除或选择操作?br />

一、插入行


在DataWindow中插入一行,可以使用InsertRow()函数?br /> 语法格式Q?br /> dw_control.InsertRow(rownumber)
dw_control是数据窗口控件名Qrownumber是要插入行的的行受如果这个参Cؓ0Q代表在当前DataWindow的最后一行插入一I? 行?br /> InsertRow()函数q回一个长整型|以此来代表插入的行号。如果插入失败,则返?1?/p>

二、删除行


要删除DataWindow内的一行数据,则要使用DeleteRow()函数?br /> 语法格式Q?br /> dw_control.DeleteRow(rownumber)
其中rownumber是要删除的行受如果该gؓ0Q表C删除当前行。如果删除成功,q回1Q失败则q回-1?/p>

三、设|当前行


如果要设|DataWindow中的某行为当前行Q可以用SetRow()函数?br /> 语法格式Q?br /> dw_control.SetRow(rownumber)
其中rownumber是要讄为当前行的行受如果函数返?表示成功Q返?1代表p|?/p>

四、获取当前行


如果惌获取DataWindow中的某行为当前行Q可以用GetRow()函数?br /> 语法格式Q?br /> dw_control.GetRow()
该函数没有参敎ͼ它返回一个长整型Q代表当前行受如果返?1代表p|。如果返?代表没有选中M行?/p>

五、选择?/h3>


如果惌在DataWindow中加亮显C某一行或取消加亮昄某一行,可以使用SelectRow()函数?br /> 语法格式Q?br /> dw_control.SelectRow(rownumber,select)
其中Qrownumber表示要加亮或者取消加q显C的行号Q?表示所有行。select是一个布类型的|TRUE表示加亮QFALSE表示取消加亮 昄。该函数q回1时表C成功,q回-1时表C失败?br /> 如果惌直接讄某一行ؓ加亮Q需要首先取消其它行的加亮显C状态,采用如下的两行代码:
dw_1.SelectRow(0,FALSE)
dw_1.SelectRow(rownumber,TRUE)


六、获取选择?/h3>


如果惌获取当前DataWindow中加亮显C的行,可以使用GetSelectRow()函数?br /> 语法格式Q?br /> dw_control.GetSelectRow(rownumber)
其中Qrownumber为开始查扄行的行号Q?表示从头开始查找。该函数q回一个长整数Q表CZrownumber开始查扄一个加亮显C的行的? 受如果失败返??/p>

七、滚动行


如果在DataWindow的末插入一行数据,而当前行是在DataWindow的中央,那么q种插入可能不会被用戯察。ؓ了改变这U情况,可以滚动 行到DataWindow的末,q样用户p发现新的改变。要滚动行,可以使用ScrollToRow()函数?br /> 语法格式Q?br /> dw_control.ScrollToRow(rownumber)
该函数返?时表C成功,q回-1时表C失败?br /> 与ScrollToRow()函数据功能相关的q有如下几个函数Q?br /> ScrollPriorRow()Q向上滚动一?br /> ScrollNextRow()Q向下滚动一?br />
列操?/span>
列操作类的函C要是选择指定的列和获取列的信息?br />

一、获取列


如果要获取当前的列号Q可以用GetColumn()函数Q如果要获取当前的列名,可以使用GetColumnName()函数?br /> 语法格式Q?br /> dw_control.GetColumn()
dw_control.GetColumnName()
q两个函数都没有参数QGetColumn()函数q回一个长整型|代表当前的列PGetColumnName()函数q回当前列的列名。如果返? 0Q表C当前没有Q何列被选择q回-1表示p|?/p>

二、设|列


要设|某一列ؓDataWindow中的当前列,可以使用SetColumn()函数?br /> 语法格式Q?br /> dw_control.SetColumn(column)
其中column既可以是列号Q也可以是列名。当该函数返?时表C成功,q回-1时表C失败?br />
数据操作
数据操作cȝ函数主要是对DataWindow中的数据q行获取、设|?br />

一、获取数?/h3>


如果要从DataWindow的指定行和列中获取数据,p使用GetItempd的函数。这个系列的函数共有五个Q分别是对字W串、数字、日期、日期时 间和数?br /> 语法格式Q?br /> dw_control.GetItemString(rownumber,column)
dw_control.GetItemNumber(rownumber,column)
dw_control.GetItemDate(rownumber,column)
dw_control.GetItemDateTime(rownumber,column)
dw_control.GetItemDecimal(rownumber,column)
其中Qrownumber参数表示行号Qcolumn可以是列h列名?/p>

二、设|数?/h3>


与获取数据所用的函数不同Q设|DataWindow内指定行列处的数据只要用一个SetItem()函数可以了?br /> 语法格式Q?br /> dw_control.SetItem(rownumber, column, value)
其中rownumber表示行号Qcolumn可以是列P也可以是列名Qvalue表示要设|的倹{但是该必须与DataWindow中指定的行列处的 数据cd一_不然PowerBuilder会报错?br /> SetItem()函数q回1时表C成功,q回-1时表C失败?/p>

三、数据排?/h3>


如果希望对DataWindow内的数据q行重新排序Q而又不想重新从数据库中检索数据,可以使用SetSort()和Sort()函数。这两个函数一? 完成对DataWindowq行排序的功能。其中SetSort()函数用于讄如何排序QSort()函数用于对DataWindow实际q行排序?br /> 语法格式Q?br /> dw_control.SetSort(expression)
dw_control.Sort()
其中expression是一个字W串Q表C排序的表达式,它的具体值是一个列名后面加一个空|然后?A"Q表C升序,?D"Q表C降序。如果有? 个列要同时进行排序,它们之间用逗号隔开?br /> 例:dw_1.SetSort("name A,xh D")
q两个函数都是返?表示成功Q返?1表示p|?/p>

四、数据过?/h3>


如果希望对DataWindow内的数据q行qo而不重新从数据库中检索数据,可以使用SetFilter()和Filter()函数。它们一起完成对? 据的qo功能。其中SetFilter()函数用来讄qo条gQFilter()函数用于对DataWindowq行qo?br /> 语法格式Q?br /> dw_control.SetFiter(expression)
dw_control.Fiter()
其中expression是一个字W串Q表C滤的条gQ它实际是一个逻辑表达式?br /> 例:
dw_1.SetFilter("id>\'003\' AND name like\'?\'")
dw_1.Filter()
q两个函数都是返?表示成功Q返?1表示p|?/p>

五、数据检?/h3>


PowerBuilder提供了两个函数用于数据的查,它们是DeleteCount()和ModifiedCount()Q其作用分别是检? DataWindow中的数据自上一ơ更新到现在Q被删除的行数和被修改的行数。它们一般在H口的CloseQuery事g中用,用来查该H口? DataWindow中的数据是否有尚未保存的修改?br /> 语法格式Q?br /> dw_control.DeleteCount()
dw.control.ModifiedCount()
它们分别q回从上一ơ更新到现在QDataWindow中被删除和被修改的行数。如果没有行被删除或被修改,那么它们q回0。如果出现错误则q回-1?br /> 一般情况下Q如果窗口中含有可供修改的数据窗口对象,那么在窗口的CloseQuery事g中通常使用如下代码查数据窗口对象中是否有尚未保存的数据Q?br /> Int li_return
IF dw_1.ModifiedCount() > 0 OR dw_1.DeletedCount() >0 THEN
     li_return = MessageBox("提示","数据未保存Q是否保存?",Question!,YesNoCancel!,3)
     CHOOSE CASE li_return
            CASE 1
                 TriggerEvent(\'ue_save\')
                 RETURN 0
            CASE 2
                 RETURN 0
            CASE 3
                 RETURN 1
    END CHOOSE
END IF

转自:http://hi.baidu.com/sundl2268/blog/item /ecd8c513085daa0b5baf532d%2Ehtml



KE 2010-05-24 09:19 发表评论
]]> վ֩ģ壺 | | Դ| | | Ժ| | | ̩| | | ͭ| | | | | | | ٰ| ޻| | ն| ̨| ӽ| ɽ| ˮ| | | | ͺ| | Ű| ī| | | | ɽ| | | | |