



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
动态创建数据窗口 在实际应用中,经常需要根据用户需求来动态创建数据窗,一般方法是这样的。在一个window中加入一个数据窗控件,如dw_new,但是该数据窗没有data object,(空白的)就可以用以下语法来创建:dw_new.create(ls_syntax,ls_error) / 创建语法,错误信息ls_syntax可以用以下三种方法来形成:一、动态由sql语法创建:/ 连接到pb的example数据库string ls_sql,ls_syntax,ls_errorls_syntax = select * from departmentls_syntax = sqlca.SyntaxFromSQL(ls_sql,style(type=grid),ls_error)if len(ls_error) 0 thenmessagebox(Error,SyntaxFromSQL Error:r+ls_error)elsedw_new.create(ls_syntax,ls_error)if len(ls_error) 0 thenMessageBox(Error, Create have these errors: r + ls_error)elsedw_new.settransobject(sqlca)dw_new.retrieve()end ifend if二、由另一个数据窗的syntax来创建string ls_syntax,ls_errorls_syntax = dw_test.describe(datawindow.syntax)dw_new.create(ls_syntax,ls_error)if ls_error thenmessagebox(Create Error,ls_error)elsedw_new.settransobject(sqlca)dw_new.retrieve()end if三、读取psr文件来创建string ls_syntax,ls_error,ls_retls_ret = char(13)+char(10) /回车键int li_fileNumlong li_lengthli_FileNum = FileOpen(efef.psr,Streammode!, read!, shared!, Replace!)if li_filenum 0 thenFileSeek(li_FileNum, 158, FromBeginning!)li_length = fileRead(li_filenum,ls_syntax)end iffileclose(li_filenum)if li_length = 0 then returnls_syntax = release 5;+ls_ret+ls_syntax /截掉ls_syntax中的数据部分,5.0以sparse(names=dept_name?) 作为参考位置/6.0以html(作为参考位置long pos1,pos2pos1 = pos(ls_syntax,sparse(names=,1)pos2 = pos(ls_syntax,pos1 +16)ls_syntax = left(ls_syntax,pos1) + mid(ls_syntax,pos1 +1,pos2 - pos1 +1)dw_New.create(ls_syntax,ls_error)if ls_error thenmessagebox(Create Error,ls_error)elsedw_new.settransobject(sqlca)dw_new.retrieve()end if/pb6,pb7的代码可以参照pb5自己写,只是文件头和数据窗结束标记不同而已。 PowerBuilder用Create()函数创建动态数据窗口,其语法格式为:dw.Create(Syntax,ErrString) 其中:dw为需创建的动态数据窗口名;Syntax为创建动态数据窗口的语法字符串;ErrString为可选参数,用来存放发生错误时的错误信息,若忽略,发生错误时系统自动显示消息框,一般不符我们需要,所以需定义该参数。显然重点在Syntax, PowerBuilder提供LibraryExport()与SyntaxFromSQL()二个函数来达到这个目的:一、 LibraryExport()函数功能:从PowerBuilder库中输出一个对象,返回该对象的语法。语法格式:LibraryExport(LibName,ObjName,ObjType) 其中:LibName 为带路径的PowerBuilder库名,若未指定路径,则按系统标准搜索路径搜索;ObjName为导出对象名,现为LibName中的数据窗口对象名;ObjType为该对象的类型,现为数据窗口,值为ExportDataWindow!。示例如下:String ls_DwSyntax,ls_Errorls_DwSyntax=LibraryExport(C:PBExamdy_dw.pbl,d_tbl1, ExportDataWindow!)/数据窗口dw_1的产生下面将详细讨论,现暂略dw_1.Create(ls_DwSyntax,ls_Error)/以下语句与下面示例中的相同,故此处略。 LibraryExport()函数是利用已有的数据窗口对象创建动态数据窗口,有一定的使用价值,但不多见。 二、 SyntaxFromSQL()函数功能:基于SQL的SELECT 语句产生创建数据窗口的语法。语法格式:Transaction.SyntaxFromSQL(SqlString,StyleString,ErrorString)其中:Transaction.为已连接的事务对象,一般即为SQLCA;SqlString为SQL-SELECT 语句;Stylestring为数据窗口的显示风格字符串,比较复杂,一般常用Style(Type=Grid);ErrorString用来存放发生错误时的错误信息。一般来说,SyntaxFromSQL()函数灵活性高、功能强,因此创建动态数据窗口大都使用该函数,下面的示例也是使用该函数。三、创建动态数据窗口的一般步骤创建动态数据窗口的一般步骤如下:1、在某窗口(如w_main)上用鼠标点建一个数据窗口控件(如dw_1),其DataObject为空。2、构造SyntaxFromSQL()函数的语法字符串。这是PowerBuilder动态数据窗口的关键,稍为复杂一些,具体做法请见下面实例。3、用Create()函数创建动态数据窗口dw_1,并用SetTransObject()函数为其分配事务对象,具体做法请见下面实例。这种方法的主要缺点是必须在设计阶段先建数据窗口控件,运行时无法增减,这对于一些较为特殊的应用(如设计阶段尚不知需几个数据窗口)就不太适合了。那如何解决这个问题呢?经过一番摸索并查阅了一些资料,终于找到了二种解决方法,现分别介绍如下: 1、创建一个标准可视数据窗口用户对象u_d_samplePowerBuilder6.0/6.5中步骤为:点击工具栏上的UserObject图标,在弹出的Select User Object窗口中点击New按钮,出现New User Object窗口,双击其中Visual下的Standard图标, 在弹出的Select Standard Visual Type窗口中双击datawindow选项,即出现User Object(Untitled)窗口,点击工具栏上的Save图标,弹出的Save User Object窗口,在User Objects: 中输入u_d_sample回车即进入User Object-u_d_sample窗口,关闭该窗口,标准可视数据窗口用户对象u_d_sample即告建成。PowerBuilder7.0中步骤为:点击工具栏上的New图标,在弹出的New窗口中选择Object页面,双击其中的Standard Visual图标, 在弹出的Select Standard Visual Type窗口中双击datawindow选项,出现User Object(Untitled)inherited from datawindow窗口,将其右边的Title栏中的none删除,再点击左边空白区,然后点击工具栏上的Save图标,以后的操作步骤与PowerBuilder6.0/6.5大致相同。至于PowerBuilder8.0则与PowerBuilder7.0大体相同,不再赘述。2、直接定义DataWindow型变量dw_1如下:DataWindow dw_1dw_1=Create DataWindow 其实第1种方法还须定义dw_1,形式如下:u_d_sample dw_1dw_1=Create u_d_ sample /此句可省略 这二种方法的关键都是使用OpenUserObject()函数,其功能即为打开一个用户对象,语法格式:w_name.OpenUserObject(ObjName,x,y) 其中ObjName为需打开的用户对象名;x、y为用户对象的打开位置,省略时值均为0。下面请见具体实例, 该实例在Win98、PowerBuilder8.0/PowerBuilder7.0/PowerBuilder6.5下通过,ODBC数据源已配置,为FoxPro25(可根据需要使用其他数据库),数据表为bb.dbf。请先建窗口w_main,在其Open事件中写入以下代码:(注意:PowerBuilder8.0中先须创建WorkSpace(*.pbw),其他操作基本同PowerBuilder7.0)/动态数据窗口dw_1创建实例string lserr,lsSQLstr,lsDWsyntax,lserrCSQLCA.DBMS=ODBCSQLCA.DBParm=ConnectString=DSN=FoxPro25 /本例使用FoxPro25数据库,可根据需要用其他数据库Connect;/下面3条语句即为关键,若dw_1为鼠标点建请删除这3条语句,否则会出错。DataWindow dw_1 /若采用数据窗口用户对象u_d_sample,则可改为:u_d_sample dw_1dw_1=Create DataWindow /若采用数据窗口用户对象u_d_sample,此句应去除。OpenUserObject(dw_1) /SelectAs的As可将列标题显示为As之后的字符,较为灵活方便。/可根据实际情况设计生成Select语句及Where子句的可视化界面lsSQLstr=Select A12 As 主管部门,A01 As 法人代码,mc As 企业名称,A06 From bb Where A120 Then/如果构造SyntaxFromSQL()函数失败,则显示错误信息并退出messagebox(错误信息!,lserr)Returnend ifdw_1.Create(lsDwsyntax,lserrC) /创建动态数据窗口dw_1If Len(lserrC)0 Then/如果创建动态数据窗口dw_1失败,则显示错误信息并退出messagebox(错误信息!,lserrC)Returnend if/以下设置dw_1的一些属性,可根据实际需要设置。dw_1.X=5dw_1.Y=5dw_1.width=1500dw_1.height=650dw_1.Visible=Truedw_1.Enabled=Truedw_1.HScrollBar=Truedw_1.VScrollBar=True/为dw_1分配事务对象SQLCAdw_1.SetTransObject(SQLCA)/提取数据dw_1.Retrieve() 第2种方法的优点大家一看即知,不必费劲去创建一个标准可视数据窗口用户对象,但存在不足之处:不能在窗口w_main的其他事件或控件中引用dw_1。解决方法很简
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 快递站点抵押合同范本
- 钢结构签合同范本
- 染料销售合同范本
- 监理合同范本 酬金
- 开公司 投资 合同范本
- 办公座椅购买合同范本
- 施工企业施工合同范本
- 员工集资合同范本
- 面地板装修合同范本
- 联合中标epc合同范本
- GB/T 9871-2008硫化橡胶或热塑性橡胶老化性能的测定拉伸应力松弛试验
- GB/T 26480-2011阀门的检验和试验
- GB/T 19861-2005丙烯酸系阴离子交换树脂强碱基团、弱碱基团和弱酸基团交换容量测定方法
- GB/T 11085-1989散装液态石油产品损耗
- GB 30000.3-2013化学品分类和标签规范第3部分:易燃气体
- 《材料力学》说课-课件
- (完整版)沪教牛津版小学一至六年级英语单词汇总(最新)
- JJF 1587-2016 数字多用表校准规范-(高清现行)
- 完整课件-西方经济学下册(第二版)
- 机械制图教学通用课件(全套)
- 天星择日的基本原理
评论
0/150
提交评论