設計思路:在未輸入相關的代碼時,界面顯示所有科室代碼。輸入相關科室代碼后,界面只顯示所查詢的科室資訊,可進行多次查詢。
前兩部都已經做出來實作了,但是最后一步出現了問題:每次只能查詢一次,所以想請教下各位前輩,這樣的問題如何能解決?
代碼:

二次查詢報錯提示:

uj5u.com熱心網友回復:
因為你第一查完后,資料視窗的sql陳述句已經被你改變了(加了where后面的條件)你第二次查又加了where條件 就變成兩個where在sql陳述句了
當然報錯
不建議這種直接拼裝sql陳述句的方式,
資料視窗里可以定義引數變數,然后可以用dw_1.retrieve(ls_arg1,ls_arg2)這樣的方式獲取資料
uj5u.com熱心網友回復:
謝謝指導
但如果我再資料視窗添加引數變數條件,那么我再打開主視窗的時候就不會顯示任何資料,我的思路是打開主視窗自動顯示所有的資料,然后再去根據輸入的結果去查詢,所以一開始就沒有用在資料視窗定義引數變數。在嘗試添加了引數變數后,再打開主視窗的時候就會彈出輸入變數引數的資料框,點了CLANNE之后也沒有出現任何資料。。。
uj5u.com熱心網友回復:
你的思路大方向就不理想。retrieve() 是拉取資料,也就是從資料庫中讀取資料庫。通常都是open之后拉取一次,然后添加一個重繪的按鈕,如果視窗打開比較長時間,重新拉取一次。
而過濾只需要用filter(),對已經拉取的資料進行過濾篩選就可以了,而不是重新重資料庫拉取資料。
uj5u.com熱心網友回復:
我昨天后面也考慮過通過重繪按鈕去還原資料視窗SQL陳述句的想法,也新建了一個重繪按鈕事件,但是一直點擊了沒效果
:

然后剛剛也嘗試通過過濾的方式重新修改了下,但是程式一直提示表達是無效,請大佬看看是不是我代碼寫漏了:
uj5u.com熱心網友回復:
過濾條件,不用寫where,不過字串型別,要拼接'號ls_filter = "dept_code = '"+dm+"'"
比如dm是1001
如果不拼接,就是按 dept_code =1001 過濾
拼接后,會按 dept_code ='1001' 過濾
另外,filter()之后,不用retrieve(),這個方法呼叫,會從資料庫拉取一次資料。
如果這個表格不是更新非常頻繁,就沒有這個必要
uj5u.com熱心網友回復:
最簡單的方法 加個debugbreak()除錯看一下ls_newsql變數的值uj5u.com熱心網友回復:
真的不建議拼接資料視窗SQL,除錯很麻煩,這都是20年前的用法你資料視窗的sql陳述句可以這樣寫:select * from dept_dict where dept_code=:dm or :dm='all',
在視窗打開的時候可以這樣dw_1.retrieve('all')
查詢的時候可以這樣:
string dm
dm=ddlb_dept.text
if dm='' or isnull(dm) then dm='all'
dw_1.retrieve(dm)
uj5u.com熱心網友回復:
感謝大佬指導!
uj5u.com熱心網友回復:
謝謝大佬的指導,新思路!我當時也考慮在SQL陳述句中通過OR陳述句的方式來定義!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/8544.html
標籤:基礎類
