當前為10.0版本文檔,更多實例內容將在最新幫助文檔中展現,點選跳轉至 最新版幫助文檔

JS實現通過sql一次性獲取多個字段

1. 概述

1.1 預期效果

使用 sql() 函數可以動态取數據庫中某個字段的值,但是如果想取得多個字段的值,就必須執行多條 sql() 函數,這樣就加大了對服務器資源的請求量;如果查詢的 SQL 又比較複雜的話,執行效率将會很慢。

可以通過一個 sql() 函數,配合 JavaScript 來獲取多個不同字段的值。如下圖所示,一個填報中通過輸入人員 ID,來獲取人員名字,姓别,電話号碼。

存字段的表:

222

查詢結果:
222


1.2 實現思路

因爲 SQL 函數 本身的使用限制,只能每次獲取一個列的信息,但是如果想獲取多列的話,我們其實是可以同時對多個字段用特殊符号拼接到一起查詢出來,再在 JavaScript 中對這一串利用特殊符号拼接的字符串進行分割,這樣就可以分别取得不同列的值。

2. 示例

2.1 準備模板

新建模板,B2 單元格添加文本框, 爲輸入 ID 的文本框,C2 單元格添加按鈕, 爲查詢的按鈕 。

D2 單元格公式内容爲:sql("FRDemo","SELECT empname||','||sex||','||tel  FROM employee where EMPid='"+B2+"'",1,1)

注:不同數據庫拼接字符的方法不同,比如 Sqlite,Oracle 是||,其他 如 MSSQL, MySQL 等一般直接用+就行了 ,另外在 SQL 用於分割的拼接字段的特殊字符和 JavaScript 中分割時的要一緻 。

最後将 D 列設隐藏。如下圖所示:

222

2.2 添加事件

1)爲了取得 B2 單元格中控件修改後的實時值,我們需要在 B2 單元格控件設置「編輯後」事件,如下圖所示:

注意需要添加一個參數row,值爲公式 row。

JavaScript 代碼如下:

//修改後即把當前值賦值給實際值
var v=this.getValue();
contentPane.setCellValue('B'+row,null,v)

2)爲 C3 單元格中「查詢按鈕」添加「點擊」事件,如下圖所示:

注意需要添加一個參數row,值爲公式 row。

JavaScript 代碼如下:

//獲取D2單元格信息,因爲填報模板設置直接顯示控件後獲取方式不一樣,下面這種寫法保證獲取成功    
var info=contentPane.curLGP.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 效果預覽

保存模板,點擊「填報預覽」,效果如下圖所示:

20180815093155_7587.png

注:不支持移動端。

3. 模板下載

已完成模板可參見:

%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\JS\JS實現通過SQL一次性獲取多個字段.cpt

點擊下載模板:JS實現通過sql一次性獲取多個字段.cpt

附件列表


主題: 原簡體文檔
  • 有幫助
  • 沒幫助
  • 只是瀏覽

文 檔回 饋

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉

反饋已提交

網絡繁忙