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

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

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

1 通過ODBC訪問數(shù)據(jù)庫
 在Windows系統(tǒng)中,采用Webaccess作為軟件平臺,其本身支持對數(shù)據(jù)庫的讀寫,但需要在Windows的ODBC管理器中添加ODBC數(shù)據(jù)源。在Windows XP系統(tǒng)的控制面板的管理工具中,數(shù)據(jù)源管理器中添加SQL server驅(qū)動、命名、選擇服務(wù)器,然后添加數(shù)據(jù)庫shuju,測試連接即完成。每次在腳本中執(zhí)行SQL語句、進行操作數(shù)據(jù)庫之前,必先連接數(shù)據(jù)源。下面介紹如何連接shuju數(shù)據(jù)庫、讀寫存儲溫度的數(shù)據(jù)表TDATATABLE和存儲矯正值的數(shù)據(jù)表xiuzheng。
 (1)在xiuzheng數(shù)據(jù)表中存儲了在Webaccess中對每個點的傳感器數(shù)據(jù)的矯正值,每當(dāng)每個點的數(shù)據(jù)存儲到數(shù)據(jù)庫之前,必須讀取xiuzheng表中的矯正值,加到讀入的數(shù)據(jù)值上。其代碼如下:
SQLDIRECT”CONNECT SESSION 1 TO shuju,sa,”  
 #建立與數(shù)據(jù)庫的連接,用戶名為sa,密碼為空[1]
 SQLDIRECT "USE SESSION 1"  #使用連接
 SQLPREPARE "DECLARE C1 CURSOR FOR "  
 #這一條語句從數(shù)據(jù)庫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語句執(zhí)行
 SQLDIRECT "OPEN C1"  
 #將緩存中的數(shù)據(jù)讀取到本地點中
 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"  #關(guān)閉連接
 set m1 [expr $m1+[GETVAL TT1]]  
 #將驅(qū)動讀取到傳感器的數(shù)據(jù)加上矯正值
 set m2 [expr $m2+[GETVAL TT2]]
 ……
 set m60 [expr $m60+[GETVAL VV60]]
 (2)將讀到的傳感器測量的點的數(shù)值加上矯正值存儲到TDATATABLE。其代碼如下:
 SQLDIRECT”CONNECT SESSION 1 TO shuju,sa,”
 #連接數(shù)據(jù)庫
 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)”
 #將系統(tǒng)日期,時間和局部點讀取到TDATEBASE數(shù)據(jù)表中
 SQL.EXECUTE
 SQLDIRECT”DISCONNECT SESSION1”
2 通過ADO接口連接到數(shù)據(jù)庫
 (1)在Webaccess中局部點存儲了坐標(biāo)值,只有當(dāng)局部點文件被加載時才能把這些點賦值。本文采用在Webaccess的總體腳本中添加VB輔助程序、運行總體腳本時在VB程序中給這些局部點賦值。
 在VB輔助程序中,VB控件作為第三方控件在Webaccess平臺中實現(xiàn)與數(shù)據(jù)庫的連接。由于嵌入到Webaccess中的控件是通過bwocxrun.exe與Webaccess通信,因此要把bwocx.ocx引用到VB中。在VB中新建ActiveX控件—>工程—>部件bwocxrun ActiveX Control modole—>接口向?qū)?mdash;>hWnd—>映射到UserControl—>數(shù)據(jù)類型為string—>在空白處添加ocx控件。
 在VB控件中建立與SQL數(shù)據(jù)庫的連接,本系統(tǒng)采用ADO連接數(shù)據(jù)庫,而在VB中采用ADO接口。主要有兩種方式:一是采用ADOdata控件連接數(shù)據(jù)庫,二是采用ADO對象與數(shù)據(jù)庫連接。在采用第二種方式時還有兩種方式:分別是ADO對象和ODBC數(shù)據(jù)源連接或者ADO對象和指定的OLE DB提供者連接數(shù)據(jù)庫。本文采用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”  
 ′與數(shù)據(jù)庫建立連接的字符串[2]
 conn.open ′建立與數(shù)據(jù)的連接
 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數(shù)據(jù)庫的TXYZTABLE表中
 (2)在本系統(tǒng)中,由于如果改變測點額定坐標(biāo),將會使以前的坐標(biāo)信息全部丟失。為了存儲過去的歷史坐標(biāo),系統(tǒng)建立了一個歷史坐標(biāo)數(shù)據(jù)表。利用Delphi編寫了一個輔助程序?qū)?dāng)前的測點坐標(biāo)存儲到數(shù)據(jù)庫中,當(dāng)測量點修改后,可以運行該程序?qū)⒏膭拥淖鴺?biāo)存儲到歷史坐標(biāo)數(shù)據(jù)庫中。當(dāng)在使用以前的測量點時,也可以在程序中選擇以前存儲的歷史坐標(biāo)加載到測量點的局部點。
 使用Delphi編寫試驗坐標(biāo)處理程序時,其程序采用ADO數(shù)據(jù)庫訪問接口進行連接數(shù)據(jù)庫,采用ODBC驅(qū)動程序連接數(shù)據(jù)源。圖2為該程序的界面。

 

 

 在編寫程序時,需要在新建的窗體上添加ADOConnection和ADOQUERY控件。其中這ADOConnection的connectionstring屬性為”Provider=MSDASQL.1;Persist Security Info=False;User ID=sa;Data Source=shuju”,并為ADOQUERY添加connection屬性為ADOConnection的name[4]。
在MPXYZTABLE中,每一條記錄的第一個字段表示第幾條實驗記錄。下面是以壓力歷史坐標(biāo)表演示將數(shù)據(jù)編號讀出,并將選擇的編號的數(shù)據(jù)記錄讀取到坐標(biāo)數(shù)據(jù)表的示例:
 ADOQuery1.Close;
 ADOQuery1.SQL.Clear;
 ADOQuery1.SQL.Add(′SELECT*FROM MPXYZTABLE′); //連接數(shù)據(jù)庫選擇數(shù)據(jù)表
 ADOQuery1.Open; //打開數(shù)據(jù)表
 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;  //下一條記錄
 下面是把歷史坐標(biāo)中選擇的編號相應(yīng)的記錄輸出到全局變量中,然后把這些變量再寫入到坐標(biāo)表中的代碼:
 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中的數(shù)據(jù)讀到數(shù)組中
 end;
 ADOQuery1.Close;
 ADOQuery1.SQL.Clear;
 ADOQuery1.SQL.Add(′update TXYZTABLE setFLAG=′′′+inttostr(1)+′′′,F(xiàn)T1=′′′+floattostr(data[1])+′ ′′,XT1=′′′+floattostr(data[2])+′′′,YT1=′′′+floattostr(data[3])+′′′,ZT1=′′′+floattostr(data[4])+′′′,′ );
 ……
 ADOQuery1.SQL.Add(′FT2=′′′+floattostr(data[57])+′′′,XT2=′′′+floattostr(data[58])+′′′,YT2=′′′+floattostr(data[59])+′′′,ZT2=′′′+floattostr(data[60])+′′′,′);  
 //把數(shù)組中的值寫入到坐標(biāo)數(shù)據(jù)表TXYZTABLE
 以上就是在Webaccess中SQL數(shù)據(jù)庫的調(diào)用和操作。在實際的應(yīng)用中只要掌握簡單的查詢語句,就可以對數(shù)據(jù)庫進行操作。
參考文獻
[1] 研華(中國)公司自動化事業(yè)群.Advantech WebAccess產(chǎn)品使用手冊[S].2009.
[2] 陳艷峰,高文姬,邵蘊秋,等.Visul Basic 數(shù)據(jù)庫項目案例導(dǎo)航[M].北京:清華大學(xué)出版社,2004.
[3] 劉德生,張?zhí)扉_.基于VB的WebAccess組態(tài)功能擴展[J].微型機與應(yīng)用,2011,30(12):29.
[4] 鄭阿奇.Delphi實用教程[M].北京:電子工業(yè)出版社,2006.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
在线一区二区日韩| 亚洲人成网站精品片在线观看| 国内自拍一区| 国产日韩精品一区| 国产精品麻豆va在线播放| 欧美日韩另类在线| 欧美久久久久久久久| 欧美91福利在线观看| 久久久久9999亚洲精品| 欧美在线一区二区| 久久国产视频网| 欧美一级理论性理论a| 亚洲欧美视频在线观看| 亚洲综合精品一区二区| 亚洲欧美日本日韩| 欧美一区=区| 欧美一区二区精品在线| 欧美亚洲一级| 欧美一级电影久久| 久久精品国产亚洲aⅴ| 久久久久国色av免费观看性色| 先锋影音网一区二区| 欧美一区二区三区免费视频| 久久av最新网址| 久久久精品tv| 免播放器亚洲一区| 欧美承认网站| 欧美精品一区在线发布| 欧美日韩午夜激情| 国产精品99一区| 国产精品亚洲综合久久| 国产日韩一区二区三区| 国内精品久久久久久| 一区二区亚洲| 亚洲精品视频免费观看| 一区二区三区 在线观看视频 | 国内精品久久久久久久影视蜜臀| 国产一区二区丝袜高跟鞋图片 | 中文国产成人精品久久一| 亚洲免费网址| 亚洲高清久久| 在线视频中文亚洲| 午夜精品一区二区在线观看| 久久精品亚洲一区二区| 老牛嫩草一区二区三区日本| 欧美激情一区二区三区高清视频| 欧美日韩午夜| 国产午夜精品全部视频在线播放| 尤物在线精品| aaa亚洲精品一二三区| 午夜精品一区二区在线观看 | 亚洲精品一线二线三线无人区| 亚洲无亚洲人成网站77777 | 国产精品视频一区二区三区| 黄色亚洲精品| 亚洲精品一二三| 亚洲欧美日韩中文视频| 亚洲国产经典视频| 亚洲先锋成人| 久久中文字幕一区| 欧美日韩你懂的| 国产一区二区日韩| 亚洲美女啪啪| 欧美一级久久久久久久大片| 夜夜爽夜夜爽精品视频| 久久精品亚洲| 欧美丝袜第一区| 在线看成人片| 亚洲欧美日韩另类| 99亚洲精品| 久久蜜臀精品av| 欧美三级网址| 一区二区三区在线免费视频| 亚洲一区中文| 日韩网站在线看片你懂的| 久久精品人人做人人综合| 欧美日韩午夜精品| 在线观看欧美激情| 亚洲欧美中文在线视频| 日韩亚洲欧美成人一区| 欧美日韩国产123| 国产一在线精品一区在线观看| 亚洲国产黄色| 午夜激情综合网| 99一区二区| 浪潮色综合久久天堂| 国产欧美精品在线播放| 日韩一级不卡| 亚洲国产清纯| 久久国产精彩视频| 国产精品99免费看 | 久久精品官网| 欧美偷拍另类| 亚洲品质自拍| 亚洲国产天堂久久国产91| 亚洲社区在线观看| 欧美国产日产韩国视频| 国语自产精品视频在线看一大j8| 亚洲无线一线二线三线区别av| 欧美在线观看视频| 亚洲免费在线视频一区 二区| 欧美顶级少妇做爰| 伊人婷婷久久| 久久精品导航| 久久久久久高潮国产精品视| 国产日韩一级二级三级| 亚洲尤物在线| 亚洲综合日韩| 欧美天天在线| 中文精品一区二区三区 | 亚洲视频视频在线| 欧美激情精品久久久久久免费印度| 韩国美女久久| 欧美伊人久久久久久久久影院| 性做久久久久久免费观看欧美| 国产精品久久久久国产精品日日| 99re热这里只有精品视频| 亚洲美女中文字幕| 欧美激情精品久久久六区热门 | 久久精品国产亚洲一区二区| 国产日韩精品一区二区三区在线 | 99国产精品国产精品毛片| 欧美.日韩.国产.一区.二区| 国内精品伊人久久久久av影院 | 久久综合一区二区三区| 久久人人爽爽爽人久久久| 国产九九精品视频| 亚洲在线免费| 欧美一级片一区| 国产欧美精品一区| 久久久蜜桃一区二区人| 亚洲精品字幕| 香蕉成人久久| 久久精品免视看| 国产一区在线观看视频| 欧美在线综合视频| 亚洲女同精品视频| 国产精品青草久久久久福利99| 亚洲一区激情| 久久精品免费| 极品尤物一区二区三区| 亚洲人成免费| 欧美区在线播放| 亚洲一二三区视频在线观看| 亚洲欧美中文字幕| 国产亚洲欧美在线| 亚洲国产精品一区二区三区| 欧美精品大片| 国产精品99久久99久久久二8| 午夜精品影院| 黄色成人在线免费| 亚洲理论在线| 国产精品盗摄久久久| 欧美一区二区视频免费观看| 久久综合图片| 亚洲每日更新| 欧美在线一级视频| 影音先锋亚洲精品| 一区二区三区免费在线观看| 国产精品欧美日韩一区二区| 久久国产免费看| 欧美日本成人| 亚洲综合电影| 蜜桃av综合| 一区二区欧美精品| 久久精品亚洲一区二区三区浴池| 亚洲成色最大综合在线| 亚洲午夜精品福利| 国产一区自拍视频| 99精品视频免费观看视频| 国产精品午夜视频| 亚洲国产婷婷综合在线精品| 欧美日韩在线一区二区| 性久久久久久久久久久久| 欧美高清在线精品一区| 亚洲一二三区在线| 欧美jjzz| 亚洲一区二区影院| 欧美va天堂| 亚洲伊人伊色伊影伊综合网| 久久综合久色欧美综合狠狠| 99精品国产在热久久| 亚洲欧美国产三级| 一区二区视频免费在线观看 | 久久久999精品免费| 亚洲精品一区在线| 欧美一区二区三区在线免费观看| 亚洲电影免费观看高清完整版在线观看 | 欧美日韩国产免费| 午夜精品久久久久| 欧美日韩精品一区二区在线播放| 午夜精品久久久99热福利| 欧美日本韩国| 久久精品一区四区| 国产精品成av人在线视午夜片| 最新成人av网站| 国产曰批免费观看久久久| 亚洲宅男天堂在线观看无病毒| 1000精品久久久久久久久| 欧美中文字幕精品|