PB动态创建窗口_第1页
PB动态创建窗口_第2页
PB动态创建窗口_第3页
PB动态创建窗口_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

动态创建数据窗口在实际应用中,经常需要根据用户需求来动态创建数据窗,一般方法是这样的。在一个window中加入一个数据窗控件,如dw_new但是该数据窗没有dataobject,(空白的)就可以用以下语法来创建:dw_new.create(ls_syntax,ls_error)//创建语法,错误信息ls_syntax可以用以下三种方法来形成:一、 动态由sql语法创建://连接到pb的example数据库stringls_sql,ls_syntax,ls_errorls_syntax='select*fromdepartment'ls_syntax=sqlca.SyntaxFromSQL(ls_sql,'style(type=grid)',ls_error)iflen(ls_error)>0thenmessagebox('Error','SyntaxFromSQLError:~r'+ls_error)elsedw_new.create(ls_syntax,ls_error)iflen(ls_error)>0thenMessageBox("Error","Createhavetheseerrors:~r"+ls_error)elsedw_new.settransobject(sqlca)dw_new.retrieve()endifendif二、 由另一个数据窗的syntax来创建stringls_syntax,ls_errorls_syntax=dw_test.describe('datawindow.syntax')dw_new.create(ls_syntax,ls_error)ifls_error''thenmessagebox('CreateError',ls_error)elsedw_new.settransobject(sqlca)dw_new.retrieve()endif三、 读取psr文件来创建stringls_syntax,ls_error,ls_retls_ret=char(13)+char(10)//回车键intli_fileNumlongli_lengthli_FileNum=FileOpen("efef.psr",Streammode!,read!,shared!,Replace!)ifli_filenum>0thenFileSeek(li_FileNum,158,FromBeginning!)li_length=fileRead(li_filenum,ls_syntax)endiffileclose(li_filenum)ifli_length=0thenreturnls_syntax="release5;"+ls_ret+ls_syntax〃截掉ls_syntax中的数据部分,5.0以"sparse(names="dept_name?)"作为参考位置〃6.0以html(作为参考位置longpos1,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)ifls_error''thenmessagebox('CreateError',ls_error)elsedw_new.settransobject(sqlca)dw_new.retrieve()endif//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!。示例如下:Stringls_DwSyntax,ls_Errorls_DwSyntax=LibraryExport("C:\PBExam\dy_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_l),其DataObject为空。2、 构造SyntaxFromSQL()函数的语法字符串。这是PowerBuilder动态数据窗口的关键,稍为复杂一些,具体做法请见下面实例。3、 用Create()函数创建动态数据窗口dw_1,并用SetTransObject()函数为其分配事务对象,具体做法请见下面实例。这种方法的主要缺点是必须在设计阶段先建数据窗口控件,运行时无法增减,这对于一些较为特殊的应用(如设计阶段尚不知需几个数据窗口)就不太适合了。那如何解决这个问题呢?经过一番摸索并查阅了一些资料,终于找到了二种解决方法,现分别介绍如下: 1、创建一个标准可视数据窗口用户对象u_d_samplePowerBuilder6.0/6.5中步骤为:点击工具栏上的UserObject图标,在弹出的SelectUserObject窗口中点击New按钮,出现NewUserObject窗口,双击其中Visual下的Standard图标,在弹出的SelectStandardVisualType窗口中双击datawindow选项,即出现UserObject(Untitled)窗口,点击工具栏上的Save图标,弹出的SaveUserObject窗口,在UserObjects:中输入u_d_sample回车即进入UserObject---u_d_sample窗口,关闭该窗口,标准可视数据窗口用户对象u_d_sample即告建成。PowerBuilder7.0中步骤为:点击工具栏上的New图标,在弹出的New窗口中选择Object页面,双击其中的StandardVisual图标,在弹出的SelectStandardVisualType窗口中双击datawindow选项,出现UserObject(Untitled)inheritedfromdatawindow窗口,将其右边的Title栏中的none删除,再点击左边空白区,然后点击工具栏上的Save图标,以后的操作步骤与PowerBuilder6.0/6.5大致相同。至于PowerBuilder8.0则与PowerBuilder7.0大体相同,不再赘述。2、直接定义DataWindow型变量dw_1如下:DataWindowdw_1dw_1=CreateDataWindow其实第1种方法还须定义dw_1,形式如下:u_d_sampledw_1dw_1=Createu_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创建实例stringlserr,lsSQLstr,lsDWsyntax,lserrCSQLCA.DBMS="ODBC"SQLCA.DBParm="ConnectString='DSN=FoxPro25'"//本例使用FoxPro25数据库,可根据需要用其他数据库Connect;〃下面3条语句即为关键,若dw_l为鼠标点建请删除这3条语句,否则会出错。DataWindowdw_1//若采用数据窗口用户对象u_d_sample,则可改为:u_d_sampledw_1dw_1=CreateDataWindow//若采用数据窗口用户对象u_d_sample,此句应去除。OpenUserObject(dw_1)//Select*…As…的As可将列标题显示为As之后的字符,较为灵活方便。〃可根据实际情况设计生成Select语句及Where子句的可视化界面lsSQLstr="SelectA12As主管部门,A01As法人代码,mcAs企业名称,A06FrombbWhereA120Then〃如果构造SyntaxFromSQL()函数失败,则显示错误信息并退出messagebox("错误信息!",lserr)Returnendifdw_1.Create(lsDwsyntax,lserrC)//创建动态数据窗口dw_1IfLen(lserrC)>0Then//如果创建动态数据窗口dw_1失败,则显示错误信息并退出messagebox("错误信息!",lserrC)Returnendif//以下设置dw_1的一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论