《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 設計應用 > 基于Webaccess平臺的SQL server數據庫的應用
基于Webaccess平臺的SQL server數據庫的應用
來源:微型機與應用2013年第1期
魏 凱,張天開,王顯靜,孫亦霖
(青島理工大學 自動化學院,山東 青島 266033)
摘要: 介紹了采用SQL數據庫,分別在Webaccess腳本、VB采集程序和Delphi的檢測程序中調用,解決大量數據的流通及存儲的問題。
關鍵詞: WebAccess 數據庫 SQL ADO ODBC
Abstract:
Key words :

摘  要: 介紹了采用SQL數據庫,分別在Webaccess腳本、VB采集程序和Delphi的檢測程序中調用,解決大量數據的流通及存儲的問題。
關鍵詞: Webaccess;數據庫;SQL;ADO;ODBC

 某空調通風試驗臺以Webaccess作為軟件平臺,用于采集測點數據、執行算法并輸出控制信號。但在空調通風試驗臺的項目中,風速、壓力和溫度總共有140個采集點,如果采用Webaccess內部點,無法進行存儲。因為這些點的數據要被實時地保存。為此,本文介紹了基于Webaccess平臺、采用SQL sever作為本工程節點的數據保存數據庫,同時也考慮了可以方便其他局域網的應用程序訪問本機上的數據,以作為分析的依據。
 在本系統中,應用程序訪問SQL數據庫通過ODBC或ADO兩種方式。ODBC是微軟開發的數據庫編程接口,應用程序可以通過ODBC訪問來自不同數據庫管理系統的數據。在Windows系統中,包含有ODBC接口的管理程序,如果要使用ODBC數據源,必須首先創建和配置數據源。ODBC管理器根據數據源提供的數據庫的位置、數據庫的類型和ODBC驅動程序,建立與數據庫的連接,應用程序對數據庫的操作通過ODBC完成。ADO是微軟提供的一種面向各種數據源的高級接口,開發人員只需編寫訪問數據庫的代碼而不用去關心如何去實現,即只要關心和數據庫的連接;ADO通過OLE DB訪問和操作數據庫服務器中的數據,通過ADO可以連接數據庫,并且指定訪問數據源的命令,最后執行命令。
 在本系統中,連接一個本地SQLserver,并在這個服務器中建立了一個shuju數據庫,這個數據庫含有10個數據表,分別為:1個存儲修正值的表,3個實時的數據保存數據表,3個數據坐標直接讀取表和3個歷史坐標存儲總表。Webaccess在采集數據之后,存入數據庫,數據庫再把數據分享到局域網。整個系統的數據流向圖如圖1所示。

1 通過ODBC訪問數據庫
 在Windows系統中,采用Webaccess作為軟件平臺,其本身支持對數據庫的讀寫,但需要在Windows的ODBC管理器中添加ODBC數據源。在Windows XP系統的控制面板的管理工具中,數據源管理器中添加SQL server驅動、命名、選擇服務器,然后添加數據庫shuju,測試連接即完成。每次在腳本中執行SQL語句、進行操作數據庫之前,必先連接數據源。下面介紹如何連接shuju數據庫、讀寫存儲溫度的數據表TDATATABLE和存儲矯正值的數據表xiuzheng。
?。?)在xiuzheng數據表中存儲了在Webaccess中對每個點的傳感器數據的矯正值,每當每個點的數據存儲到數據庫之前,必須讀取xiuzheng表中的矯正值,加到讀入的數據值上。其代碼如下:
SQLDIRECT”CONNECT SESSION 1 TO shuju,sa,”  
 #建立與數據庫的連接,用戶名為sa,密碼為空[1]
 SQLDIRECT "USE SESSION 1"  #使用連接
 SQLPREPARE "DECLARE C1 CURSOR FOR "  
 #這一條語句從數據庫flag=1處讀取,并記錄到緩存
 SQLPREPARE"SELECTTO1,TO2,TO3,TO4,TO5,TO6,TO7,TO8,TO9,TO10,"
 …...
 SQLPREPARE "TO51,TO52,TO53,TO54,TO55,TO56,TO57,TO58,TO59,TO60"
 SQLPREPARE "FROm xiuzheng WHERE Flag=1"
 SQLEXECUTE  #sql語句執行
 SQLDIRECT "OPEN C1"  
 #將緩存中的數據讀取到本地點中
 SQLPREPARE "FETCH NEXT C1 INTO m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,"
 ……
 SQLPREPARE"m51,m52,m53,m54,m55,m56,m57,m58,m59,m60"
 SQLEXECUTE
 SQLDIRECT "CLOSE C1"  #關閉連接
 set m1 [expr $m1+[GETVAL TT1]]  
 #將驅動讀取到傳感器的數據加上矯正值
 set m2 [expr $m2+[GETVAL TT2]]
 ……
 set m60 [expr $m60+[GETVAL VV60]]
?。?)將讀到的傳感器測量的點的數值加上矯正值存儲到TDATATABLE。其代碼如下:
 SQLDIRECT”CONNECT SESSION 1 TO shuju,sa,”
 #連接數據庫
 SQLDIRECT”USE SESSION 1”
 SQLPREPARE”INSERT INTO TDATABASE VALUES(”SQLPREPARE”'[GETVAL  %TI
 MDATE]','[GETVAL %TTMTIME]'”
 SQLPREPARE” $m1,$2, $m3,$m4,$m5,”
 ……
 SQLPREPARE”$m56,$m57,$m58,$59,$m60)”
 #將系統日期,時間和局部點讀取到TDATEBASE數據表中
 SQL.EXECUTE
 SQLDIRECT”DISCONNECT SESSION1”
2 通過ADO接口連接到數據庫
?。?)在Webaccess中局部點存儲了坐標值,只有當局部點文件被加載時才能把這些點賦值。本文采用在Webaccess的總體腳本中添加VB輔助程序、運行總體腳本時在VB程序中給這些局部點賦值。
 在VB輔助程序中,VB控件作為第三方控件在Webaccess平臺中實現與數據庫的連接。由于嵌入到Webaccess中的控件是通過bwocxrun.exe與Webaccess通信,因此要把bwocx.ocx引用到VB中。在VB中新建ActiveX控件—>工程—>部件bwocxrun ActiveX Control modole—>接口向導—>hWnd—>映射到UserControl—>數據類型為string—>在空白處添加ocx控件。
 在VB控件中建立與SQL數據庫的連接,本系統采用ADO連接數據庫,而在VB中采用ADO接口。主要有兩種方式:一是采用ADOdata控件連接數據庫,二是采用ADO對象與數據庫連接。在采用第二種方式時還有兩種方式:分別是ADO對象和ODBC數據源連接或者ADO對象和指定的OLE DB提供者連接數據庫。本文采用ADO對象和指定的OLE DB連接方式。以下是與TXYZTABLE的連接:
 Dim conn As New ADODB.Connection
 Dim rs As New ADODB.Recordset
 Private sub form_load()
 Set conn=New ADODB.Connection
 Set rs=New ADODB.Recordset
 Dim s1,s2 As String
 Dim ft1,ft2…..as byte
 Dim xt1,yt1,zt1…as single
 conn.ConnectionString=”driver={sqlserver};server=127.0.0.1;uid=sa;pwd=;Connection  Timeout=0;Database=shuju”  
 ′與數據庫建立連接的字符串[2]
 conn.open ′建立與數據的連接
 ft1=Bwocxrun1.GetValue(“FT1”,ME.AP)
 ′通過Bwocxrun控件將Webaccess中的點讀到VB中的變量[3]
 xt1=Bwocxrun1.GetValue(“XT1”,ME.AP)
 yt1=Bwocxrun1.GetValue(“YT1”,ME.AP)
 zt1=Bwocxrun1.GetValue(“ZT1”,ME.AP)
 ……..
 S1=”USE shuju”
 conn.Execute s1
 s2=”INSERT INTO TXYZTABLE VALUES(1,”&ft1&”’,’”&xt1&”’,’”&yt1&”’,’”&zt1&”,’……’)”
 conn.Exexute s2
 ′將這些變量存儲到shuju數據庫的TXYZTABLE表中
 (2)在本系統中,由于如果改變測點額定坐標,將會使以前的坐標信息全部丟失。為了存儲過去的歷史坐標,系統建立了一個歷史坐標數據表。利用Delphi編寫了一個輔助程序將當前的測點坐標存儲到數據庫中,當測量點修改后,可以運行該程序將改動的坐標存儲到歷史坐標數據庫中。當在使用以前的測量點時,也可以在程序中選擇以前存儲的歷史坐標加載到測量點的局部點。
 使用Delphi編寫試驗坐標處理程序時,其程序采用ADO數據庫訪問接口進行連接數據庫,采用ODBC驅動程序連接數據源。圖2為該程序的界面。

 

 

 在編寫程序時,需要在新建的窗體上添加ADOConnection和ADOQUERY控件。其中這ADOConnection的connectionstring屬性為”Provider=MSDASQL.1;Persist Security Info=False;User ID=sa;Data Source=shuju”,并為ADOQUERY添加connection屬性為ADOConnection的name[4]。
在MPXYZTABLE中,每一條記錄的第一個字段表示第幾條實驗記錄。下面是以壓力歷史坐標表演示將數據編號讀出,并將選擇的編號的數據記錄讀取到坐標數據表的示例:
 ADOQuery1.Close;
 ADOQuery1.SQL.Clear;
 ADOQuery1.SQL.Add(′SELECT*FROM MPXYZTABLE′); //連接數據庫選擇數據表
 ADOQuery1.Open; //打開數據表
 j:= ADOQuery1.RecordCount;
 ……
 ADOQuery1.FindFirst;
 for i:=0 to j-2 do
 begin ComboBox1.Items.Add(ADOQuery1.Fields[0].Value);  //將編號提取到下拉控件中顯示
 testname[i]:=ADOQuery1.Fields[0].Value;
 ADOQuery1.FindNext;  //下一條記錄
 下面是把歷史坐標中選擇的編號相應的記錄輸出到全局變量中,然后把這些變量再寫入到坐標表中的代碼:
 ADOQuery1.Close;
 ADOQuery1.SQL.Clear;
 ADOQuery1.SQL.Add(′SELECT*FROM MTXYZTABLE WHERE FLAG=′′′+ComboBox1.Text+′′′′);
 ADOQuery1.Open;
    for i:=1 to 240 do
      begin
 if ADOQuery1.Fields[i].Value=NULL then
    //檢測記錄是否為空
       begin
         data[i]:=0;
       end
 else
  data[i]=ADOQuery1.Fields[i].Value;   
         //把MTXYZTABLE中的數據讀到數組中
 end;
 ADOQuery1.Close;
 ADOQuery1.SQL.Clear;
 ADOQuery1.SQL.Add(′update TXYZTABLE setFLAG=′′′+inttostr(1)+′′′,FT1=′′′+floattostr(data[1])+′ ′′,XT1=′′′+floattostr(data[2])+′′′,YT1=′′′+floattostr(data[3])+′′′,ZT1=′′′+floattostr(data[4])+′′′,′?。?br />  ……
 ADOQuery1.SQL.Add(′FT2=′′′+floattostr(data[57])+′′′,XT2=′′′+floattostr(data[58])+′′′,YT2=′′′+floattostr(data[59])+′′′,ZT2=′′′+floattostr(data[60])+′′′,′);  
 //把數組中的值寫入到坐標數據表TXYZTABLE
 以上就是在Webaccess中SQL數據庫的調用和操作。在實際的應用中只要掌握簡單的查詢語句,就可以對數據庫進行操作。
參考文獻
[1] 研華(中國)公司自動化事業群.Advantech WebAccess產品使用手冊[S].2009.
[2] 陳艷峰,高文姬,邵蘊秋,等.Visul Basic 數據庫項目案例導航[M].北京:清華大學出版社,2004.
[3] 劉德生,張天開.基于VB的WebAccess組態功能擴展[J].微型機與應用,2011,30(12):29.
[4] 鄭阿奇.Delphi實用教程[M].北京:電子工業出版社,2006.

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 亚洲免费毛片 | 国产91香蕉视频 | 夜色私人影院永久入口 | 亚洲综合精品一区二区三区中文 | 国产亚洲视频网站 | 黄色免费影视 | 亚洲一区二区三区不卡视频 | 色屁屁一区二区三区视频国产 | 欧美成成人免费 | 九九啪| 狠狠色狠狠色综合人人 | 日韩成人免费在线 | 91青草久久久久久清纯 | 国产在线视频一区二区三区 | 18级成人毛片免费观看 | 成人欧美一区二区三区黑人免费 | 成人在线观看视频网站 | 男女视频在线免费观看 | 国产精品高清在线 | ww亚洲ww在线观看国产 | 日本无翼乌全彩无遮挡动漫 | 日日艹夜夜 | 97国产精品国产品国语字幕 | 2021天天操| 在线观看欧美一区 | 97久久人人做人人爽人人澡 | 国产大片中文字幕 | 日韩免费在线观看 | 一个人在线视频免费观看www | 国产麻豆媒一区一区二区三区 | 国产在线一区二区三区在线 | 日韩激情视频在线观看 | 久久精品一区二区国产 | 日韩在线伦理 | 国产成人激情 | 亚洲 国产精品 日韩 | 7777在线 | 色综合久久五月 | 欧美一级专区免费大片野外交 | 国产精品国产 | 一级片生活片 |