麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 課堂 > 技術(shù)開(kāi)發(fā) > 正文

PB中實(shí)現(xiàn)動(dòng)態(tài)報(bào)表格式的自由定義

2023-06-15 12:15:00
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

報(bào)表設(shè)計(jì)是MIS開(kāi)發(fā)中非常重要的一環(huán),本文介紹了如何省時(shí)省力的為用戶(hù)設(shè)計(jì)出符合要求的報(bào)表的方法。

在通常的Server/Client方式MIS開(kāi)發(fā)中,總是有沒(méi)完沒(méi)了的報(bào)表需要制作,調(diào)試報(bào)表花費(fèi)的時(shí)間也是最多而且乏味,還常常不能滿(mǎn)足客戶(hù)的要求。要是能夠讓用戶(hù)自己調(diào)整報(bào)表的格式和內(nèi)容,然后將它保存下來(lái),程序下次啟動(dòng)時(shí)它自動(dòng)調(diào)用保存了的報(bào)表格式那有多好。本人通過(guò)如下方法最終實(shí)現(xiàn)了用的要求。

PB(PowerBuilder)有一種以PSR結(jié)尾的特殊的保存報(bào)表的文件格式(本文簡(jiǎn)稱(chēng)作PSR文件)。根據(jù)數(shù)據(jù)窗口可以直接讀取PSR文件生成報(bào)表的原理,程序通過(guò)生成PSR文件,實(shí)現(xiàn)動(dòng)態(tài)報(bào)表格式的保存。

一、實(shí)現(xiàn)原理:

PB中的報(bào)表其實(shí)就相當(dāng)于是數(shù)據(jù)窗口。

第一步,動(dòng)態(tài)報(bào)表的實(shí)現(xiàn)。通過(guò)設(shè)置數(shù)據(jù)窗口對(duì)象(dataobject)中文本、列等的Resizeable和moveable屬性為1來(lái)實(shí)現(xiàn)對(duì)象位置的拖動(dòng)控制,通過(guò)數(shù)據(jù)窗口的Modify函數(shù)實(shí)現(xiàn)對(duì)象值的更改(包括增加和刪除)。

第二步,報(bào)表格式的保存。在一個(gè)應(yīng)用當(dāng)中,數(shù)據(jù)窗口對(duì)象的名稱(chēng)總是唯一的,將每一個(gè)數(shù)據(jù)窗口對(duì)象轉(zhuǎn)化成PSR文件存于數(shù)據(jù)庫(kù)表中。在窗口打開(kāi)時(shí),程序先校驗(yàn)報(bào)表格式是否存在。如果存在,先將報(bào)表格式讀取出來(lái)放在一個(gè)臨時(shí)文件當(dāng)中,然后設(shè)置數(shù)據(jù)窗口(datawindow)的數(shù)據(jù)對(duì)象(dataobject)為這個(gè)報(bào)表文件,然后提取數(shù)據(jù);如果不存在,直接提取數(shù)據(jù)即可。

二、實(shí)現(xiàn)過(guò)程:

(1)建立一個(gè)數(shù)據(jù)庫(kù)表用以保存報(bào)表格式文件。

表名:dyn_report 

Dwobject Varchar2(20) 數(shù)據(jù)窗口對(duì)象名稱(chēng) Primary key 

Rptitle Varchar2(80) 報(bào)表的標(biāo)題名稱(chēng)

Memo Long raw  報(bào)表格式

(2)建立一個(gè)窗口w_temp。 定義實(shí)例變量如下:

string is_dwtype,is_dwobject //保存報(bào)表中對(duì)象的類(lèi)型及名稱(chēng)

控件名稱(chēng)  控件含義

Dw_print 數(shù)據(jù)窗口對(duì)象

Cb_exit 退出按鈕

Cb_savereport  報(bào)表格式保存按鈕

(3)在窗口的OPEN事件中加入如下代碼, 校驗(yàn)報(bào)表格式是否存在,如果存在讀取定義好的報(bào)表格式到數(shù)據(jù)窗口。

blob emp_pic
   long ll_handle
   string ls_dwobject,ls_reportfile,ls_path
   ls_dwobject = dw_print.dataobject
   //判斷是否存在該數(shù)據(jù)窗口的報(bào)表格式
   select count(*) into:ll_count from dyn_report where dwobject =:ls_dwobject;
   if ll_count>0 then
     //讀取報(bào)表格式文件到大文本變量
     selectblob memo into:emp_pic from dyn_report where dwobject =:ls_dwobject;
     //創(chuàng)建psr臨時(shí)文件到硬盤(pán)
     ls_reportfile = '/temp7089.psr'
     ll_handle = FileOpen(is_reportfile,StreamMode!,write!,LockWrite!,Replace!)
     FileWrite(ll_handle,emp_pic)
     FileClose(ll_handle)
     dw_print.dataobject = ls_reportfile
     dw_print.settransobject(sqlca)
   else
     Dw_print.settransobject(sqlca)
   End if
   Dw_print.retrieve()

(4)報(bào)表格式的保存。通過(guò)Cb_savereport按鈕的clicked實(shí)現(xiàn)。

 string ls_filename
   long ll_count
   blob Emp_id_pic
   ls_filename = "temp70201.psr"
   //保存報(bào)表格式到硬盤(pán)臨時(shí)文件
   dw_print.saveas(ls_filename,PSReport! ,false)
   sqlca.autocommit = true
   select count(*) into :ll_count from dyn_report where dwobject =:is_dwobject;
   if ll_count =0 then
     insert into dyn_report(dwobject,rptitle)
     values(:is_dwobject,:ls_filename,:ls_path);
   end if
   //從硬盤(pán)臨時(shí)文件讀取數(shù)據(jù)保存到數(shù)據(jù)庫(kù)表中
   emp_id_pic = of_readbmpfile(ls_filename)//該函數(shù)將二進(jìn)制文件內(nèi)容讀到大文本對(duì)象中
   //更新數(shù)據(jù)庫(kù)
   UPDATEBLOB dyn_report SET memo = :Emp_id_pic where dwobject = :is_dwobject;
   sqlca.autocommit = false

(5)動(dòng)態(tài)報(bào)表的實(shí)現(xiàn)。通過(guò)數(shù)據(jù)窗口dw_print的clicked事件捕獲數(shù)據(jù)窗口中對(duì)象,并將對(duì)象名存放在實(shí)現(xiàn)變量is_dwobject中,為下一步修改報(bào)表作準(zhǔn)備。

 string ls_type,ls_dwoname
   //得到對(duì)象類(lèi)型和名稱(chēng)
   ls_type = trim(upper(dwo.type))
   ls_dwoname = trim(dwo.name)
   is_dwtype = ls_type
   choose case ls_type
     case "TEXT","CommandButton","GROUPBOX"
       is_dwobject = ls_dwoname
       //設(shè)置為可以拖動(dòng)和改變大小,其它類(lèi)同
       this.modify(ls_dwoname+".Resizeable='"+"1'")
       this.modify(ls_dwoname+".moveable="+"1")
     case "LINE" //直線對(duì)象不能通過(guò)設(shè)置Resizeable和moveable屬性進(jìn)行調(diào)整,必須通過(guò)其它路徑
       is_dwobject = ls_dwoname
     case "RECTANGLE","ELLIPSE","GRAPH","BITMAP"
       is_dwobject = ls_dwoname
       this.modify(ls_dwoname+".Resizeable='"+"1'")
       this.modify(ls_dwoname+".moveable='"+"1'")
     case "COLUMN","COMPUTE"
       is_dwobject = ls_dwoname
       this.modify(ls_dwoname+".Resizeable='"+"1'")
       this.modify(ls_dwoname+".moveable='"+"1'")
   end choose

然后再通過(guò)modify()函數(shù)可以實(shí)現(xiàn)基本的動(dòng)態(tài)報(bào)表操作,這一類(lèi)的文章較多,PB中也有大量的例子可直接使用,在此這不再累述。

(6)在cb_exit按鈕的clicked()事件中加入:close(parent)。

(7)在應(yīng)用的open事件中加入: open(w_temp)。然后保存并運(yùn)行,大功告成啦!

(8)本程序在PB7.0加Oracle8.05下調(diào)試通過(guò)。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 欧美成人一区二区视频 | 91精品动漫在线观看 | 欧美14一15sex性hd | 国产精品美女久久久久久不卡 | 国产系列 视频二区 | 精品影视一区二区 | 免费三级大片 | 黄色片网站免费 | 成年人视频在线免费观看 | 欧美性黄 | 久久精品无码一区二区三区 | 久久精品a一级国产免视看成人 | 亚洲成人精品在线 | 国产精品免费一区二区三区都可以 | 黄色影院av| 视频一区二区久久 | 五月激情久久 | 久久精品一区二区三区四区五区 | 日产精品久久久一区二区福利 | 成人午夜一区二区 | av在线免费在线观看 | 国产精品一区二区在线 | 日韩av电影免费在线观看 | 色污视频 | free台湾极品性hd | 欧美日韩大片在线观看 | 日日操夜夜透 | 国产一级一国产一级毛片 | 成人免费午夜视频 | 国产精品午夜性视频 | 欧美亚洲国产成人 | 粉嫩粉嫩一区二区三区在线播放 | 成人免费视频视频在线观看 免费 | 伊人二本二区 | 国产高潮失禁喷水爽到抽搐视频 | 欧洲精品久久 | 国产一级毛片av | 成年片在线观看 | 黄色免费在线视频网站 | 国产一区二区三区欧美 | 久久99精品视频在线观看 |