亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 課堂 > 技術開發 > 正文

PB中實現動態報表格式的自由定義

2023-06-15 12:15:00
字體:
來源:轉載
供稿:網友

報表設計是MIS開發中非常重要的一環,本文介紹了如何省時省力的為用戶設計出符合要求的報表的方法。

在通常的Server/Client方式MIS開發中,總是有沒完沒了的報表需要制作,調試報表花費的時間也是最多而且乏味,還常常不能滿足客戶的要求。要是能夠讓用戶自己調整報表的格式和內容,然后將它保存下來,程序下次啟動時它自動調用保存了的報表格式那有多好。本人通過如下方法最終實現了用的要求。

PB(PowerBuilder)有一種以PSR結尾的特殊的保存報表的文件格式(本文簡稱作PSR文件)。根據數據窗口可以直接讀取PSR文件生成報表的原理,程序通過生成PSR文件,實現動態報表格式的保存。

一、實現原理:

PB中的報表其實就相當于是數據窗口。

第一步,動態報表的實現。通過設置數據窗口對象(dataobject)中文本、列等的Resizeable和moveable屬性為1來實現對象位置的拖動控制,通過數據窗口的Modify函數實現對象值的更改(包括增加和刪除)。

第二步,報表格式的保存。在一個應用當中,數據窗口對象的名稱總是唯一的,將每一個數據窗口對象轉化成PSR文件存于數據庫表中。在窗口打開時,程序先校驗報表格式是否存在。如果存在,先將報表格式讀取出來放在一個臨時文件當中,然后設置數據窗口(datawindow)的數據對象(dataobject)為這個報表文件,然后提取數據;如果不存在,直接提取數據即可。

二、實現過程:

(1)建立一個數據庫表用以保存報表格式文件。

表名:dyn_report 

Dwobject Varchar2(20) 數據窗口對象名稱 Primary key 

Rptitle Varchar2(80) 報表的標題名稱

Memo Long raw  報表格式

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

string is_dwtype,is_dwobject //保存報表中對象的類型及名稱

控件名稱  控件含義

Dw_print 數據窗口對象

Cb_exit 退出按鈕

Cb_savereport  報表格式保存按鈕

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

blob emp_pic
   long ll_handle
   string ls_dwobject,ls_reportfile,ls_path
   ls_dwobject = dw_print.dataobject
   //判斷是否存在該數據窗口的報表格式
   select count(*) into:ll_count from dyn_report where dwobject =:ls_dwobject;
   if ll_count>0 then
     //讀取報表格式文件到大文本變量
     selectblob memo into:emp_pic from dyn_report where dwobject =:ls_dwobject;
     //創建psr臨時文件到硬盤
     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)報表格式的保存。通過Cb_savereport按鈕的clicked實現。

 string ls_filename
   long ll_count
   blob Emp_id_pic
   ls_filename = "temp70201.psr"
   //保存報表格式到硬盤臨時文件
   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
   //從硬盤臨時文件讀取數據保存到數據庫表中
   emp_id_pic = of_readbmpfile(ls_filename)//該函數將二進制文件內容讀到大文本對象中
   //更新數據庫
   UPDATEBLOB dyn_report SET memo = :Emp_id_pic where dwobject = :is_dwobject;
   sqlca.autocommit = false

(5)動態報表的實現。通過數據窗口dw_print的clicked事件捕獲數據窗口中對象,并將對象名存放在實現變量is_dwobject中,為下一步修改報表作準備。

 string ls_type,ls_dwoname
   //得到對象類型和名稱
   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
       //設置為可以拖動和改變大小,其它類同
       this.modify(ls_dwoname+".Resizeable='"+"1'")
       this.modify(ls_dwoname+".moveable="+"1")
     case "LINE" //直線對象不能通過設置Resizeable和moveable屬性進行調整,必須通過其它路徑
       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

然后再通過modify()函數可以實現基本的動態報表操作,這一類的文章較多,PB中也有大量的例子可直接使用,在此這不再累述。

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

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

(8)本程序在PB7.0加Oracle8.05下調試通過。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色999日韩欧美国产| 国产成人在线播放| 亚洲视频国产视频| 欧美日韩亚洲精品内裤| 在线观看亚洲视频| 久久成人综合视频| 亚洲视频在线免费观看| 日韩精品在线观看一区二区| 在线日韩欧美视频| 亚洲成人黄色网| 日韩精品极品视频免费观看| 91精品久久久久久久久| 国产日韩欧美中文| 国产精品精品一区二区三区午夜版| 日韩免费高清在线观看| 国产精品亚洲网站| 中文字幕精品—区二区| 91久久久在线| 亚洲女人被黑人巨大进入| 亚洲欧美精品在线| 国产精品视频专区| 久久视频在线直播| 欧亚精品中文字幕| 亚洲第一男人av| zzijzzij亚洲日本成熟少妇| 欧美俄罗斯乱妇| 亚洲毛片一区二区| 日韩精品视频观看| 在线看国产精品| 国产精品成人一区二区三区吃奶| 色老头一区二区三区在线观看| 欧美性开放视频| 91免费看片在线| 日韩精品视频三区| 亚洲精品videossex少妇| 91久久精品国产91久久性色| 中文字幕亚洲一区在线观看| 欧美黄色三级网站| 精品偷拍各种wc美女嘘嘘| 欧美午夜精品伦理| 欧美一级淫片播放口| 在线观看不卡av| 欧美电影第一页| 91亚洲永久免费精品| 国产欧美亚洲精品| 欧美日本亚洲视频| 日韩在线欧美在线国产在线| 成人黄色影片在线| 欧美刺激性大交免费视频| 欧美日韩另类字幕中文| 精品中文字幕久久久久久| 福利视频导航一区| 欧美日韩一区免费| 国产免费亚洲高清| 日韩欧美国产骚| 欧美激情中文字幕在线| 色七七影院综合| 久久久精品一区| 欧美特级www| 国产国语videosex另类| 亚洲一区二区三区xxx视频| 日韩精品中文字幕在线播放| 九色91av视频| 欧美黄色www| 中文字幕欧美视频在线| 国产精品91久久久| 久久精品视频99| 57pao成人永久免费视频| 日韩精品在线免费观看视频| 欧美国产激情18| 精品久久久久久久大神国产| 韩国三级日本三级少妇99| 国内精品久久久久久久久| 亚洲嫩模很污视频| 国产亚洲激情视频在线| 51久久精品夜色国产麻豆| 国产九九精品视频| 日韩欧美在线播放| 欧美高清视频在线| 久久久亚洲欧洲日产国码aⅴ| 久久久亚洲国产| 国产伊人精品在线| 68精品久久久久久欧美| 久久香蕉频线观| 久久影院中文字幕| 91中文字幕在线| 久久九九亚洲综合| 中文字幕日韩欧美在线视频| 国产欧美亚洲视频| 亚洲精品中文字幕女同| 日韩欧美在线视频免费观看| 久久久久久久亚洲精品| 国产精品视频资源| 26uuu国产精品视频| 成人免费淫片视频软件| 国产亚洲一区二区精品| 欧美日韩国产成人在线观看| 91福利视频在线观看| 91麻豆国产语对白在线观看| 91亚洲国产成人久久精品网站| 91日本视频在线| 91干在线观看| 国产精品日日摸夜夜添夜夜av| 日韩在线免费视频观看| 国产精品视频yy9099| 欧美激情乱人伦一区| 成人写真福利网| 久久久久久久一区二区| 欧美性受xxx| 亚洲成人性视频| 日韩电影中文字幕| 91免费高清视频| 日韩免费在线电影| 国产精品久久久久久久久粉嫩av| 欧美性色视频在线| 欧美最猛黑人xxxx黑人猛叫黄| 国内精品久久久久| 中文在线资源观看视频网站免费不卡| 日韩网站在线观看| 成人午夜一级二级三级| 亚洲国内高清视频| 亚洲国产成人在线播放| 亚洲新声在线观看| 欧美电影在线观看网站| 国产精品日韩电影| 中文字幕亚洲天堂| 岛国精品视频在线播放| 欧美日韩国产丝袜另类| 精品欧美aⅴ在线网站| 欧美高清电影在线看| 精品国产一区二区三区四区在线观看| 琪琪亚洲精品午夜在线| 久久夜色撩人精品| 欧美一级淫片播放口| 日韩av免费一区| 日韩欧美中文字幕在线播放| 欧美高清视频一区二区| 日本久久91av| 另类专区欧美制服同性| 国内精品小视频| 国产一级揄自揄精品视频| 亚洲日韩第一页| 久久影视电视剧免费网站| 欧美亚洲视频在线观看| 欧美极品少妇xxxxⅹ裸体艺术| 92国产精品久久久久首页| 亚洲国产欧美一区二区三区同亚洲| 97avcom| 亚洲精品wwwww| 国产精品一区二区3区| 国产一区玩具在线观看| 97超碰国产精品女人人人爽| 亚洲四色影视在线观看| 成人激情综合网| 欧美巨乳美女视频| 在线日韩第一页| 亚洲国产美女精品久久久久∴| 久久精品久久久久电影| 98精品国产高清在线xxxx天堂| 亚洲欧美999| 欧美第一黄色网| 91在线观看免费观看| 久久精品视频一| 日韩福利视频在线观看|