2012年10月30日 星期二

TIPTOP程式開發--同一個QBE欄位撈取兩個不同資料表

大家都知道QBE條件輸入的資料,系統會很聰明的幫你轉成SQL條件,讓你可以直接放在l_sql字串裡當條件,撈取資料。

但是QBE裡的欄位必須是table column,也就是必須實體存在ds.sch裡的欄位,否則組出來的SQL條件會撈不到資料。



但是還有一種狀況,在畫面檔裡設定的table column,結果組到l_sql裡沒有join到那個table,資料一樣撈不出來。

例如:
畫面設oga_file.oga03
但是l_sql字串是" SELECT * FROM ima_file WHERE ",tm.wc
就會查無資料

這篇主要要說明的是在設計QBE畫面時,欄位只能設定對應一個,但是報表可能需要取兩個不同資料表的資料,這時,可能就會造成困擾。
例如:報表要列印所有的出貨單與銷退單的資料,但是報表格式是共用,畫面也共用(如下圖的客戶編號欄位)

當然,你也可以把這個客戶編號欄位設定為occ01(客戶編號),然後一律去join occ_file也可以完成需求。

但Genero有提供一個語法,可以做變數字串的編修,取代插入都可以。

DEFINE   l_buffer  base.stringbuffer    →定義變數

LET tm.wc = "oga03='123'"
LET l_buffer  = base.StringBuffer.create()
↑要先定義Class Method
CALL l_buffer.append(tm.wc)
↑把要調整的變數加進來。
CALL l_buffer.replace('oga03','oha03',1)
↑設定取代('舊值','新值',次數)
這邊指的次數是指在tm.wc這變數裡會出現幾次oga03,設定要改變幾個。
LET tm.wc = l_buffer.toString()
↑最後再把變數值存回tm.wc

以上程式碼結束後,tm.wc的值就會變成 "oha03='123'"

後續撈資料的程式我就不贅述了。

base.stringbuffer這個語法可以運用的Method很多,可以參考FourJs網站資料。
http://www.4js.com/online_documentation/fjs-fgl-manual-html/User/ClassStringBuffer.html#create

沒有留言:

張貼留言