随着資訊時代的快速發展,報表工具的應用也越來越普遍,其中難免會涉及到很多填報需求。
比如:
資料采集錄入填報時如何隻更新目前修改行、用報表工具實作樹狀層級結構的填報表、web 操作資料留痕等等,今天我們主要來介紹一下 web 操作資料留痕,簡單說就是填報表從 A 表取數,将 web 端修改記錄更新到 B 表儲存操作記錄……如果您還不明白,其實就相當于記錄您某個賬号的登入時間地點。
下面我們具體看一下。
工具:潤乾報表 oracle11g
資料庫表結構(SQL 語句):
A表:create table GDFW_RB_FHQK_MX(
ID NUMBER,
JCSJ DATE not null,
TJRQ DATE,
TJSJ VARCHAR2(12),
QKJFH NUMBER(12,2)
)
B表:create table GDFW_RB_FHQK_MX_HISTORY(
QKJFH NUMBER(12,2),
CREATER NVARCHAR2(20) default ‘SYSTEM’,
CREATETIME DATE default SYSDATE,
XGYY NVARCHAR2(200) default ‘暫未填寫’
目前報表設計如下,首先實作基本的行式填報操作:

資料來源:
資料去向:
至此,填報表的基本功能已經實作, 下面我們繼續以這個報表為例看一下怎麼實作web 操作資料留痕。
保證資料來源、資料去向、報表中涉及到的字段個數名稱一緻。
在資料去向執行 update 前對要插入到 B 表的資料做處理。方式如下:
通過對比新舊對象的記錄來實作,以擷取到 web 端操作的記錄,因為行式填報表在 web 頁面上支援做增、删、改三種操作,故不能保證新舊對象的記錄條數一緻,是以這裡需要通過雙層循環來擷取新舊對象的差集(即 web 頁面操作的記錄集)。
注:舊對象儲存的是修改前的資料,新對象儲存的是修改後的資料。
具體的資料處理過程:
資料來源腳本增加 XGYY,并且以對象(如對象:GDFW_RB_F HQK_MX)的方式傳回新增後的結果集。如下:
資料去向腳本修改如下:
其中:
第 2 行、第 8 行以及第 10 行的 debug 部分,是為了觀察各部操作前後資料的變化,有助于排查問題,最終可以視實際情況删除或注釋。
3-7 行 使用雙層 for 循環對比 GDFW_RB_FHQK_MX 與 GDFW_RB_FHQK_MX_old 對象記錄并從 GDFW_RB_FHQK_MX 中删除兩者相同的記錄,進而整理出 web 端操作的行;
for 循環原理:
for 舊對象
if(新對象主鍵對比舊對象主鍵)
for 新對象
if (舊對象記錄 == 新對象記錄)從新對象裡删除
else 将 web 頁面删除的記錄插入新對象
注:if…else…作用是對比主鍵保證 web 頁面上删除的記錄也被記錄下來。
最後新對象中保留的記錄既是 web 端操作的行。
A9 單元格 使用 db.update@i() 函數實作更新入庫, 其中 @i 選項代表的是僅執行插入操作。
通過上面的修改後,我們就可以實作 web 操作資料留痕了。
效果如下:
web 操作前,B 表資料記錄。
在 web 端通路報表,修改原有資料,并增加行(動圖)
web 操作後,在資料庫端查詢資料,檢查一下,我們會發現僅把 web 端操作的資料插入到資料庫中了,Bingo! 沒想到吧,就這麼輕松搞定了。
最後,課外知識擴充
怎樣在不改變資料庫表結構的基礎上,增加字段。
使用集算器函數 P.derive(xi :Fi,…),給序表 / 排列 P 增加 Fi,…字段,形成 "P 中原有的字段, Fi,…" 結構的序表,然後對 P 的每條記錄周遊,給每個 Fi 指派為 xi。簡單說就是使用此函數可以複制原序表也可以在原序表的基礎上追加字段。
資料更新時,如何控制僅執行插入操作。
靈活運用 db_.update_(A:A’,tbl,Fi:xi,…;P,…) 函數的選項。
@i 對比主鍵隻生成 INSERT。無 A’ 時不再對比,直接用 A 插入到資料庫。
@u 對比主鍵隻生成 UPDATE。無 A’ 時不再對比,直接用 A 更新到資料庫。
@k 完成後不送出事務,預設将送出。
等等,具體參考集算器函數參考 doc.raqsoft.com.cn/esproc/func/update.html
填報更新原理:
目前,行式填報表在送出的時會自動對比修改前和修改後的資料:首先對比主鍵,根據主鍵是否有新增或缺失确定資料的增删操作;然後再針對前後都有的記錄對比每條記錄值是否有不同,如有不同則執行 update 操作。
是以,建議資料處理(資料來源、資料去向)中的字段名稱與報表中的字段名稱個數要保持一緻,不然填報更新時就會因新舊對象字段不比對導緻更新失敗。
另外細心的你也一定找到了更新前後的資料是分開編輯的的好處了吧–靈活、自由、不受限制!
執行個體報表