日本福利一区_最近中文高清在线观看_免费黄色电影在线观看_亚洲天堂成人在线 - 91人人

用戶中心
· 企業空間 首頁 | 資訊 | 技術 | 產品 | 企業 | 直播 | 專題 | 智能制造 | 論壇| 在線研討會
紫金橋軟件技術有限公司
企業空間 > 案例應用 > 正文
  • 紫金橋組態軟件基于內置SQL查詢歷史數據的方法
  • 發布時間:2014/7/11 16:19:51   修改時間:2014/7/11 16:19:51 瀏覽次數:1573
  • 一、引言


      在項目中,經常會涉及到查詢歷史數據,通常情況下都是使用查詢歷史的專用組件,或者利用系統函數GetHisDataEx()以及相關的函數進行查詢,但是上述兩種方法都有一定的局限性,現在紫金橋推出一種全新的查詢方法:基于內置SQL查詢歷史數據的方法


    二、功能實現


      1.功能頁面布局


      首先,創建個窗口,窗口中如下圖所示布局。放置兩個“起始時間”控件用來控制查詢歷史數據的時間范圍,分別命名為_StartTime_EndTime;放置一個“文本框”,用來輸入時間間隔,命名為_INTERVAL;放置一個“按鈕”,用來控制查詢腳本;在下面放置一個“自由報表”,用來顯示已經查詢出來的歷史數據,命名為RPT_Data。并在窗口導航樹下選擇:畫面\查詢\內置SQL查詢,新建一個查詢命名為ObSql1



      2.腳本實現


    所有的腳本均寫在查詢按鈕中,方法比較簡單,首先要在設置時間范圍與時間間隔,然后在查詢按鈕中選擇所要查詢的數據點,并按照設置的數據進行查詢,最后將查詢到的數據放置到自由報表中。下面來分析查詢按鈕中的腳本。

    ObHost Host1;

    ObDataTable& ReturnTable;

    string StrPar[];

    string StrWhereCmd = ""; //Select查詢時的Where語句

    string StrNameCmd = ""; //Select查詢時的Where語句中存放點名的字符串

    string StrQuery = ""; //總的查詢語句

    string StrTableText = ""; 

    int i,j;

    int nTagCount; //所要查詢數據點的個數

    int nEveryTagCount; //每一個數據點返回歷史數據的個數

    int nTableVal = 0;


    上述部分為定義的一些臨時變量,方便下面寫程序時使用。


    if  Host1.TagParSelMulti("",StrPar,-1) then


    If語句用來判斷是否在點選擇器中選擇了數據點,如果選擇了點,才會執行下面的腳本


    nTagCount = StrPar.GetCount();

    for i = 0 to nTagCount-1 step 1

    StrNameCmd = StrNameCmd + "'" + StrPar[i] + "',";

    next

    StrNameCmd = StrNameCmd + "'" + StrPar[nTagCount-1] + "'";


    上述語句是將在點選擇器中選擇的數據點按照SQL語句的形式拼接成字符串。


    StrWhereCmd = "INTERVAL="+IntToStr(#_INTERVAL.Val*1000,10)+"";

    StrWhereCmd = StrWhereCmd + " and DATETIME >= #"+#_StartTime.GetStringDateTime()+"#";

    StrWhereCmd = StrWhereCmd + " AND DATETIME< #"+#_EndTime.GetStringDateTime()+"#";

    StrWhereCmd = StrWhereCmd + " AND NAME IN ("+StrNameCmd+")";


    上述語句是拼寫SQL查詢語句中的Where子句,其中第一句是設置時間間隔;第二句是設置查詢的其實時間;第三句是設置查詢的結束時間;第四句是設置所要查詢的歷史數據的數據點。


    StrQuery = "SELECT Name,DATETIME,VALUE FROM HISDATA WHERE "+StrWhereCmd+"";


    上述語句是拼寫整體的SQL查詢語句,按照Where字句中的設置信息,從歷史數據庫中查詢歷史數據,并返回Name,DATETIME,VALUE三個字段的信息,這三個字段分別表示點名,歷史數據的時間和歷史數據。


    #ObSql1.Connect("本地");

    #ObSql1.Query(StrQuery,ReturnTable);


    上述語句是執行SQL查詢,并將查詢到的結構返回到通用數據表ReturnTable中。


    nEveryTagCount = ReturnTable.GetRowCount()/nTagCount;

    #RPT_Data.AddCol(nTagCount-1);

    #RPT_Data.AddRow(nEveryTagCount-1);


    上述語句是按照查詢返回的數據個數及數據點的個數,設置顯示報表的大小,在報表中增加相應的列和行。


    for i = 2 to #RPT_Data.RowCount() + 1 step 1

    #RPT_Data.SetTxt(i,0,StrPar[i-2]); //設置表頭,內容為點名

    for j = 0 to nEveryTagCount step 1

    ReturnTable.Get("VALUE",j,StrTableText);

    #RPT_Data.SetTxt(i,j+1,StrTableText); //按照數據點向報表中放置查詢到的數據

    if #RPT_Data.Txt(1,j+1) == "" then 

    ReturnTable.Get("DATETIME",j,nTableVal);

    #RPT_Data.SetVal(1,j+1,nTableVal); //向報表中放置歷史數據點時間,放置之前要 判斷時間是否已經存在

    endif

    ReturnTable.RemoveRow(0);

    next

    next

    endif


    上述語句是將查詢到的結果放置到顯示報表中。


      3.運行效果


     

     

    三、結束語


      通過該方式增加了查詢歷史數據隨意性,且加快了數據查詢的速度同時,查詢到的數據可以根據自身需要進行多種形式的展示,方便數據的后期處理。

  • 企業介紹
紫金橋軟件研發始于1993年,是國家重點項目“九五攻關”與兩期國家“863計劃”的結晶。作為國家級高新技術企業,紫金橋軟件不僅是國內領先的工業控制軟件提供商,還憑借深厚的技術積累和行業影響力,持續為工業自動化領域提供安全、可靠、高效的解決…  更多>>
  • 聯系方式

紫金橋軟件技術有限公司

聯系人:李磊

地址:黑龍江省大慶市高新區服務外包產業園C1-817室

郵編:163316

電話:400-678-6601

傳真:0459-8151391-808

公司網址:http://realinfo.cc

  • 該空間手機版

掃描此二維碼即可訪問該空間手機版

  • 在線反饋
1.我有以下需求:



2.詳細的需求:
姓名:
單位:
電話:
郵件:
您還沒有登錄,請登陸,
如果您還沒有注冊,點擊這里注冊.
  • 網友反饋
  • 戴永鐵 在2024/6/11 14:51:00留言
  • 留言類型:貴公司產品銷售人員聯系我,貴公司技術支持人員聯系我,
  • 詳細留言:需要制藥工業領域的實時庫報表,包含矩陣配?、參數配方、數據(統計和歷史)、曲線、事件、報警、審計追蹤,這些內容可以組態化
  • 曉同 在2024/5/16 11:06:00留言
  • 留言類型:我讓貴公司產品銷售人員聯系我,
  • 詳細留言:紫金橋組態軟件V6.5,512點授權
  • 在2023/10/21 16:03:00留言
  • 留言類型:貴公司技術支持人員聯系我,
  • 詳細留言:OPC
  • 鄭鑫汶 在2023/6/1 14:58:00留言
  • 留言類型:我想得到貴公司產品詳細資料,我想得到貴公司產品的價格信息,我讓貴公司產品銷售人員聯系我,我讓貴公司技術支持人員聯系我,
  • 詳細留言:需要咨詢貴公司軟件的價格功能
  • 吳吉校 在2023/3/15 7:45:00留言
  • 留言類型:我想得到貴公司產品詳細資料,我想得到貴公司產品的價格信息,我讓貴公司產品銷售人員聯系我,我讓貴公司技術支持人員聯系我,
  • 詳細留言:組態軟件咨詢
更多請進入空間管理中心查看
關于我們 | 網站地圖 | 聯系我們
© 2003-2018    經營許可編號:京ICP證120335號
公安機關備案號:110102002318  服務熱線:010-82053688
我要反饋