PowerBuilder创建动态数据窗口

  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_Error
  ls_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_1),其DataObject为空。

  2、构造SyntaxFromSQL()函数的语法字符串。这是PowerBuilder动态数据窗口的关键,稍为复杂一些,具体做法请见下面实例。

  3、用Create()函数创建动态数据窗口dw_1,并用SetTransObject()函数为其分配事务对象,具体做法请见下面实例。

  这种方法的主要缺点是必须在设计阶段先建数据窗口控件,运行时无法增减,这对于一些较为特殊的应用(如设计阶段尚不知需几个数据窗口)就不太适合了。那如何解决这个问题呢?经过一番摸索并查阅了一些资料,终于找到了二种解决方法,现分别介绍如下:

  1、创建一个标准可视数据窗口用户对象u_d_sample

  PowerBuilder6.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_1
  dw_1=Create DataWindow

  其实第1种方法还须定义dw_1,形式如下:

  u_d_sample dw_1
  dw_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,lserrC
  SQLCA.DBMS="ODBC"
  SQLCA.DBParm="ConnectString='DSN=FoxPro25'" //本例使用FoxPro25数据库,可根据需要用其他数据库
  Connect;
  //下面3条语句即为关键,若dw_1为鼠标点建请删除这3条语句,否则会出错。
  DataWindow dw_1 //若采用数据窗口用户对象u_d_sample,则可改为:u_d_sample dw_1
  dw_1=Create DataWindow //若采用数据窗口用户对象u_d_sample,此句应去除。
  OpenUserObject(dw_1)
  //Select…As…的As可将列标题显示为As之后的字符,较为灵活方便。
  //可根据实际情况设计生成Select语句及Where子句的可视化界面
  lsSQLstr="Select A12 As 主管部门,A01 As 法人代码,mc As 企业名称,A06 From bb Where A12<'1'"
  lsDwsyntax=SQLCA.SyntaxFromSQL(lsSQLstr,"style(type=Grid)",lserr) //构造SyntaxFromSQL()函数
  If Len(lserr)>0 Then
  //如果构造SyntaxFromSQL()函数失败,则显示错误信息并退出
  messagebox("错误信息!",lserr)
  Return
  end if
  dw_1.Create(lsDwsyntax,lserrC) //创建动态数据窗口dw_1
  If Len(lserrC)>0 Then
  //如果创建动态数据窗口dw_1失败,则显示错误信息并退出
  messagebox("错误信息!",lserrC)
  Return
  end if
  //以下设置dw_1的一些属性,可根据实际需要设置。
  dw_1.X=5
  dw_1.Y=5
  dw_1.width=1500
  dw_1.height=650
  dw_1.Visible=True
  dw_1.Enabled=True
  dw_1.HScrollBar=True
  dw_1.VScrollBar=True
  //为dw_1分配事务对象SQLCA
  dw_1.SetTransObject(SQLCA)
  //提取数据
  dw_1.Retrieve()

  第2种方法的优点大家一看即知,不必费劲去创建一个标准可视数据窗口用户对象,但存在不足之处:不能在窗口w_main的其他事件或控件中引用dw_1。解决方法很简单:将dw_1定义为实例变量(Instance Variable)。PowerBuilder6.0/6.5中:在窗口画笔(w_main)的菜单上点击Declareà Instance Variables…,在弹出窗口Declare Instance Variables中输入datawindow dw_1, 点击Ok按钮即告完成。PowerBuilder7.0/8.0中:打开窗口画笔,在其下半部的窗口Declare Instance Variables中输入datawindow dw_1, 点击工具栏上的Save图标即告完成。

  三点补充说明:

  (一)、ODBC数据源设置

  打开Windows操作系统的"开始"菜单--à设置--à控制面板--àODBC数据源,出现"ODBC数据源管理器"窗口,在"系统DSN"页签中点击"添加(D)…"按钮,出现"创建新数据源"窗口,双击列表框中"Microsoft FoxPro Driver (*.dbf)"选项(或"Microsoft dBase Driver (*.dbf)"或"Microsoft FoxPro Driver (*.dbf)"或"Microsoft Visual FoxPro Driver"),现以"Microsoft dBase Driver (*.dbf)"为例(其他大同小异),即弹出"ODBC dBase安装"窗口,在"数据源名称"文本框中输入FoxPro25,在"版本"下拉框中选择dBaseⅢ,然后去掉"使用当前目录"前的√,点击"选定目录(S)…"按钮,在弹出的"选定目录"窗口中选择您数据库文件所在目录,然后点击"确定"按钮即可。其他数据源可参照设置。

  (二)、PowerBuilder8.0有关问题

  PowerBuilder8.0正式版是从http://www.yeswit.com/pb80/index.htm用NetAnts下载3.5小时得到的。PowerBuilder8.0中创建应用先须创建(或打开)WorkSpace(*.pbw),其他操作基本同PowerBuilder7.0。本示例在PowerBuilder8.0中运行需如下三个文件:dw_dynamic8.pbl, WkSpForPB8.pbw,test.pbt。如图(-)为PowerBuilder8.0中编辑本示例的主窗口w_main的样图。

  (三)、其他说明

  本人传送的dw_dynamic.zip中包括如下6个文件:bb.dbf(FoxPro数据表)、dw_dynamic6.pbl(PB6.0的程序库文件)、dw_dynamic7.pbl(PB7.0的程序库文件)及PB8.0的3个文件dw_dynamic8.pbl, WkSpForPB8.pbw和test.pbt。请分别在各自对应版本的PB中打开、运行。

转自:http://www.yesky.com/SoftChannel/72342371928571904/20011127/207107.shtml

你可能感兴趣的:(PowerBuilder)