INPUT和CONSTRUCT指令——范例報表查詢,作用讓用戶輸入數據,自動生成SQL的WHERE條件,帶開窗查詢


INPUT指令

說明:
1. 當程序執行到INPUT指令時,會將控制權交給用戶,讓用戶輸入數據。
2. 用戶輸入完字段的數據,會將數據回傳給程序中的變量接收。
3. 只要執行到INPUT的指令,程序會將每個字段Default為NULL。

  反之不需要將每個字段的值都變為NULL的話,需添加(WITHOUT DEFAULTS) 

 

范例(cxrq005):

1、首先在MAIN函數前定義客制變量,用來接收用戶數據;

#add-point:自定義模組變數-客製(Module Variable) name="global.variable_customerization"

TYPE type_g_input RECORD
        xrsduc010 STRING,
        xrsduc010_desc STRING,
        xrsduc010_desc_1 STRING
END RECORD

DEFINE g_input      type_g_input

#end add-point  

以上這些變量,均對應規格上的控件代號進行定義;

 

2、在cxrq005 _ui_dialog()函數中的DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM)領域下自定義INPUT;

      DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM)
         #add-point:input段落 name="ui_dialog.input"
         INPUT g_input.xrsduc010 FROM xrsduc010 ATTRIBUTES(WITHOUT DEFAULTS)  
         
           ON ACTION controlp INFIELD xrsduc010
           INITIALIZE g_qryparam.* TO NULL
           LET g_qryparam.state = 'c'               #c-多選,i-單選
           LET g_qryparam.reqry = FALSE
           LET g_qryparam.default1 = g_input.xrsduc010       #給予default值
           LET g_qryparam.arg1 = g_site
           CALL  cq_pmab001_2()                                #呼叫開窗
           DISPLAY g_qryparam.return1  TO xrsduc010      #將開窗取得的值回傳到變數
           #DISPLAY g_qryparam.return2 TO xrsduc010_desc
           #DISPLAY g_qryparam.return3 TO xrsduc010_desc_1
           
         END INPUT
         #end add-point  

如有多個控件的輸入控制權需要交給用戶來輸入,依次在INPUT指令中輸入接收數據的變量和控件代號即可。

 

 

CONSTRUCT指令

此指令可讓用戶在畫面上輸入查詢條件(通稱Query By Example;QBE),以取得用戶的查詢范圍數據。用戶的查詢數據會組成一串WHERE指令(參下頁批注),並置入設定好的變量中。若使用者未輸入任何條件,即按下『確定』離開CONSTRUCT,系統也會自動於此變量中補入『1=1』

 

范例同上:

1、同上;

接收WHERE指令的變量最好使用STRING類型;

 

 

2、在cxrq005 _ui_dialog()函數中的DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM)領域下自定義CONSTRUCT:

         #add-point:construct段落 name="ui_dialog.construct"
         CONSTRUCT BY NAME g_input.xrsduc010 ON xrsduc010 
            ON ACTION controlp INFIELD xrsduc010
                   INITIALIZE g_qryparam.* TO NULL
                   LET g_qryparam.state = 'c'
                   LET g_qryparam.reqry = FALSE
                   LET g_qryparam.default1 = g_input.xrsduc010       #給予default值
                   LET g_qryparam.arg1 = g_site
                   CALL  cq_pmab001_2()                                #呼叫開窗
                   DISPLAY g_qryparam.return1  TO xrsduc010      #將開窗取得的值回傳到變數
                   #DISPLAY g_qryparam.return2 TO xrsduc010_desc
                   #DISPLAY g_qryparam.return3 TO xrsduc010_desc_1
                   
                NEXT FIELD xrsduc010 
                
         END CONSTRUCT
         #end add-point 

域名和變量名稱相同時: CONSTRUCT BY NAME char_variable ON column_list

反之:CONSTRUCT char_variable ON column_list FROM field_list

說明:
 char_variable為接取用戶輸入數據的字符串變量(建議以STRING格式變量接取)
 column_list為對應到表格(TABLE)的域名清單(逗號隔開)
 field_list為畫面(WINDOW或是FORM)上的字段代碼清單(逗號隔開)

 

注:INPUT的數據輸入后,其值是分散於個變量中,若要以INPUT指令來接取用戶所輸入的查詢條件,則必需以一連串復雜的字符串組合指令來組出查詢指令所需要的WHERE條件。而CONSTRUCT的優點在:系統會自動判別用戶輸入條件並組合,后續只要將之與SELECT等指令組合即可,可降低設計的復雜度。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM