1. 概述
1.1 預期效果
使用 sql() 函式可以動態取資料庫中某個欄位的值,但是如果想取得多個欄位的值,就必須執行多條 sql() 函式,這樣就加大了對伺服器資源的請求量;如果查詢的 SQL 又比較複雜的話,執行效率將會很慢。
可以透過一個 sql() 函式,配合 JavaScript 來獲取多個不同欄位的值。如下圖所示,一個填報中透過輸入人員 ID,來獲取人員名稱,性別,電話號碼。
存欄位的表:
查詢結果:
1.2 實現思路
因為 SQL 函式 本身的使用限制,只能每次獲取一個欄的資訊,但是如果想獲取多欄的話,我們其實是可以同時對多個欄位用特殊符號連接到一起查詢出來,再在 JavaScript 中對這一串利用特殊符號連接的字串進行分割,這樣就可以分別取得不同欄的值。
2. 範例
2.1 準備範本
建立範本,B2 儲存格新增文字框, 為輸入 ID 的文字框,C2 儲存格新增按鈕, 為查詢的按鈕 。
D2 儲存格公式內容為:sql("FRDemoTW","SELECT empname||','||sex||','||tel FROM employee where EMPid='"+B2+"'",1,1)
注:不同資料庫連接字元的方法不同,比如 Sqlite,Oracle 是||,其他 如 MSSQL, MySQL 等一般直接用+就行了 ,另外在 SQL 用於分割的連接欄位的特殊字元和 JavaScript 中分割時的要一致 。
最後將 D 欄設隱藏。如下圖所示:
2.2 新增事件
1)為了取得 B2 儲存格中元件修改後的實時值,我們需要在 B2 儲存格元件設定「編輯後」事件,如下圖所示:
注意需要新增一個參數row,值為公式 row。
JavaScript 程式碼如下:
//修改後即把當前值指派給實際值
var v = this.getValue();
_g().setCellValue('B' + row, null, v);
2)為 C3 儲存格中「查詢按鈕」新增「點擊」事件,如下圖所示:
注意需要新增一個參數row,值為公式 row。
JavaScript 程式碼如下:
//獲取D2儲存格資訊,因為填報範本設定直接顯示元件後獲取方式不一樣,下面這種寫法保證獲取成功
var info = _g().getCellValue('D' + row);
//分割查詢出來的結果
var infoarray = info.split(',');
var result = '';
//這裏是上面欄位的個數,如果不是3,那麼說明沒查詢到資料
if (infoarray.length == 3) {
result += '姓名:' + infoarray[0] + '\n';
result += '性別:' + infoarray[1] + '\n';
result += '電話號碼:' + infoarray[2] + '\n';
FR.Msg.alert('查詢結果', result);
} else {
alert('未查詢到資訊!');
}
2.3 效果預覽
儲存範本,點選「填報預覽」,效果如下圖所示:
注:不支援行動端。
3. 範本下載
點選下載範本:JS實現透過sql一次性獲取多個欄位.cpt