技術(shù)頻道

      Labview中遠(yuǎn)程數(shù)據(jù)庫(kù)訪問技術(shù)

      摘 要:介紹了在Labview中應(yīng)用ADO技術(shù)訪問本地和遠(yuǎn)程數(shù)據(jù)庫(kù)的方案。對(duì)在局域網(wǎng)中以網(wǎng)絡(luò)共享方式訪問遠(yuǎn)程Access數(shù)據(jù)庫(kù)進(jìn)行了詳細(xì)介紹,最后給出了應(yīng)用該方法開發(fā)的一個(gè)實(shí)例。

      關(guān)鍵詞:Labview ADO 遠(yuǎn)程數(shù)據(jù)庫(kù)

      引言

        Labview 是美國(guó)NI公司開發(fā)的一種圖形化編程語(yǔ)言,其主要用于數(shù)據(jù)采集、儀器控制、過程監(jiān)控等領(lǐng)域。Labview具有豐富的采集與分析函數(shù)庫(kù),在Labview環(huán)境下可以方便快捷地開發(fā)監(jiān)控系統(tǒng)軟件。現(xiàn)代監(jiān)控系統(tǒng)一般構(gòu)建于局域網(wǎng)內(nèi),且監(jiān)控系統(tǒng)自身也是企業(yè)生產(chǎn)管理系統(tǒng)的一個(gè)子系統(tǒng),因此不可避免地要訪問本地或遠(yuǎn)程數(shù)據(jù)庫(kù)。Labview開發(fā)版中并沒有提供直接與通用數(shù)據(jù)庫(kù)接口的工具,但可以通過以下方法解決:購(gòu)買NI公司開發(fā)的附加軟件工具包;利用其它語(yǔ)言如VC++編寫DLL訪問數(shù)據(jù)庫(kù);利用ADO控件訪問數(shù)據(jù)庫(kù)。[1]Labview支持Activex控件,與其它方法相比基于ADO技術(shù)構(gòu)建本地或遠(yuǎn)程數(shù)據(jù)庫(kù)訪問接口不失為一種簡(jiǎn)單而又經(jīng)濟(jì)的方法。

      1 ADO技術(shù)簡(jiǎn)介

        ADO(Activex Data Objects)是Microsot為OLE DB設(shè)計(jì)的應(yīng)用層接口,它為一致的數(shù)據(jù)訪問接口提供了良好的擴(kuò)展性而不局限于單一的數(shù)據(jù)源。ADO接口編程模型中包括連接(connection)、命令(command)、參數(shù)(parameter)、記錄集(recordset)、字段(field)、錯(cuò)誤(error)、屬性(property)、集合(collection)、事件(event)等元素。其中connection、command、recordset是三個(gè)主體對(duì)象,parameters、fields、errors、properties、是四個(gè)集合對(duì)象。ADO的一般操作方式為:1 連接到數(shù)據(jù)源;2 指定訪問數(shù)據(jù)源的命令;3 執(zhí)行命令;4 將命令執(zhí)行后產(chǎn)生的結(jié)果保存在緩存中;5 更新數(shù)據(jù)源。ADO接口繼承了OLE DB的高速性,可以高速訪問本地或遠(yuǎn)程的數(shù)據(jù)源。

      2在Labview 中使用ADO接口

        在Labview 中使用ADO接口訪問數(shù)據(jù)庫(kù)一般包括以下幾個(gè)步驟:建立ADO控件;連接到數(shù)據(jù)源;生成SQL命令;執(zhí)行命令;關(guān)閉連接。具體步驟如圖1 所示。

        2.1建立ADO控件

        在前面板控件模板中選擇Activex子模板單擊Automation Refnum項(xiàng),右鍵單擊Select Activex Class的Browse從類型庫(kù)中選擇Microsoft Activex Data Objects 2.7 library Version 2.7,之后可以向框圖程序中加入connection、command、recordset等對(duì)象。

        2.2連接到數(shù)據(jù)源

        首先在Diagram中單擊鼠標(biāo)右鍵,從Function模板選擇communication子模板,從中選擇Activex項(xiàng)的Automation Open 與ADODB_Connection相連即可打開連接。接著同樣從communication子模板的Activex項(xiàng)中選擇Invoke node (方法節(jié)點(diǎn))并與Automation Open 相連,在其上單擊右鍵選擇methods項(xiàng)的Open方法即出現(xiàn)圖1中所示的節(jié)點(diǎn)。其中“Open”表示該節(jié)點(diǎn)為打開“連接對(duì)象”,“ConnectionString”是連接到數(shù)據(jù)源的字符串, “UserID”和“Password”是連接到數(shù)據(jù)源的用戶名和密碼,左側(cè)小黑三角表示寫入,可以采用字符串控件或字符串常量為其賦值。


      圖1 Labview 中訪問數(shù)據(jù)庫(kù)

        2.3生成SQL命令、執(zhí)行命令

        采用與建立“打開連接”方法相同的步驟建立執(zhí)行節(jié)點(diǎn),如圖1中所示:其中“Execute”右端的小三角表示讀出,“CommandText”表示需要執(zhí)行的SQL命令文本,該命令文本可由字符串控件或字符串常量賦值。如果需要執(zhí)行帶參數(shù)的命令,則可以采用Labview提供的“格式化字符串生成子VI”(format into string)來定制生成所需要的SQL命令文本。例如可以使用“Create”命令創(chuàng)建表,用“Drop”命令刪除表,用“Insert”命令向表中插入數(shù)據(jù),用“Select”命令進(jìn)行查詢并返回操作結(jié)果等(具體的操作命令格式可以參考相關(guān)的SQL語(yǔ)言手冊(cè))。RecordsAffected返回一個(gè)長(zhǎng)整型數(shù)值表示命令執(zhí)行后受影響的記錄集的數(shù)目。若要對(duì)執(zhí)行后的記錄進(jìn)行顯示或讀取字段值則需要建立“Recordset”對(duì)象,并與“Execute”相連然后再進(jìn)行相關(guān)的操作。

        2.4關(guān)閉連接

        對(duì)數(shù)據(jù)庫(kù)訪問操作完畢后要及時(shí)關(guān)閉連接對(duì)象以釋放內(nèi)存和所用的系統(tǒng)資源。與建立連接對(duì)象的“Open”方法和“Execute”方法類似,先建立“Invoke Node ”選擇“Close”方法關(guān)閉連接,從“Function ”模板上單擊“Communication”子模板選擇“Activex”中的“Automation Close”項(xiàng)并連線。圖1中使用了一個(gè)順序結(jié)構(gòu),目的是為了使訪問數(shù)據(jù)庫(kù)按一定的順序運(yùn)行,不致發(fā)生命令尚未執(zhí)行完畢而關(guān)閉連接的錯(cuò)誤。

      3 訪問遠(yuǎn)程數(shù)據(jù)庫(kù)

        在Labview中訪問遠(yuǎn)程數(shù)據(jù)庫(kù)的途徑有以下幾種:(1)采用NI公司開發(fā)的數(shù)據(jù)庫(kù)訪問軟件包實(shí)現(xiàn)對(duì)本地或遠(yuǎn)程數(shù)據(jù)庫(kù)訪問,該軟件包需單獨(dú)購(gòu)買。;(2)基于RDS技術(shù)構(gòu)建客戶端/服務(wù)器的遠(yuǎn)程數(shù)據(jù)庫(kù)訪問模式,該方案要求系統(tǒng)有數(shù)據(jù)庫(kù)服務(wù)器如SQL Server 等,同時(shí)也要求對(duì)ADO RDS技術(shù)有深入的了解;(3)通過Web控件訪問數(shù)據(jù)庫(kù)訪問頁(yè)模式。這種方案以網(wǎng)頁(yè)瀏覽的方式交互的訪問數(shù)據(jù)庫(kù)訪問頁(yè),對(duì)于監(jiān)測(cè)系統(tǒng)而言其實(shí)時(shí)性難以滿足,同時(shí)也需要借助其它語(yǔ)言如VBscript或&#106avascript等。如需要訪問SQL Server則在連接字符串中設(shè)定相應(yīng)的數(shù)據(jù)源以及遠(yuǎn)程計(jì)算機(jī)名和所要訪問的數(shù)據(jù)庫(kù)名即可實(shí)現(xiàn)。考慮到目前監(jiān)控系統(tǒng)大多處于局域網(wǎng)內(nèi)且系統(tǒng)要求實(shí)時(shí)、高速地訪問數(shù)據(jù)庫(kù),在Labview中以訪問共享文件或網(wǎng)絡(luò)驅(qū)動(dòng)器中的遠(yuǎn)程數(shù)據(jù)庫(kù)的方式實(shí)現(xiàn)遠(yuǎn)程訪問因其簡(jiǎn)單、經(jīng)濟(jì)而具有較高的實(shí)際意義。在局域網(wǎng)內(nèi)以共享文件方式訪問遠(yuǎn)程數(shù)據(jù)庫(kù)的具體作法是在遠(yuǎn)程計(jì)算機(jī)中將數(shù)據(jù)庫(kù)所在的文件夾或驅(qū)動(dòng)器設(shè)為共享,在本地計(jì)算機(jī)應(yīng)用程序中對(duì)遠(yuǎn)程計(jì)算機(jī)中的數(shù)據(jù)庫(kù)文件進(jìn)行讀寫、查詢等操作。所有的操作均在本地計(jì)算機(jī)中進(jìn)行,遠(yuǎn)程計(jì)算機(jī)實(shí)際上只提供文件服務(wù),因此要求本地機(jī)處理器有較強(qiáng)的能力。[2]

        3.1本地連接字符串設(shè)定

        訪問本地?cái)?shù)據(jù)庫(kù)時(shí)根據(jù)是否提供ODBC支持可以分為兩種情況:(1)通過ODBC DSN 連接;首先要在控制面板的“ODBC數(shù)據(jù)源”中設(shè)定數(shù)據(jù)源名稱并指定要訪問的數(shù)據(jù)庫(kù)。然后將“DSN=數(shù)據(jù)源名稱”寫入“ConnectionString”。通過ODBC DSN 連接必須預(yù)先在控制面板中進(jìn)行設(shè)定,而且應(yīng)用程序只能訪問特定的數(shù)據(jù)源,因此對(duì)程序移植和使用有一定影響。(2)無ODBC DSN 連接;以連接到Access 數(shù)據(jù)庫(kù)為例,向“ConnectionString”中寫入以下字符串“Driver={Microsoft Access Driver(*.mdb)};Dbq=c:\somepath\mydb.mdb;Uid=admin;Pwd=”,其中“Driver”指定數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序,“Dbq”指定要訪問的數(shù)據(jù)庫(kù)的路徑;“Uid”和“Pwd”指定訪問數(shù)據(jù)庫(kù)時(shí)的用戶名和密碼。無ODBC DSN連接可以在程序中根據(jù)需要隨時(shí)指定數(shù)據(jù)源以及所需使用的驅(qū)動(dòng)程序無需在控制面板中手動(dòng)設(shè)置,這種方式便于程序移植和使用。


      圖2向遠(yuǎn)程數(shù)據(jù)庫(kù)寫入數(shù)據(jù)實(shí)例

        3.2遠(yuǎn)程連接字符串設(shè)定

        訪問遠(yuǎn)程數(shù)據(jù)庫(kù)步驟與訪問本地?cái)?shù)據(jù)庫(kù)基本類似,差別之處在于數(shù)據(jù)源的設(shè)定有所不同。在網(wǎng)絡(luò)共享上訪問Access 數(shù)據(jù)庫(kù)時(shí)要在“ConnectionString”中指定數(shù)據(jù)源提供者為Microsoft Jet OLEDB Provider,應(yīng)向“ConnectionString”中寫入以下字符串“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\mysever\myshare\mypath\mydb.mdb”其中“Provider”指定數(shù)據(jù)源提供者,“Data Source”指定數(shù)據(jù)庫(kù)的路徑。“mysever”是遠(yuǎn)程計(jì)算機(jī)名或遠(yuǎn)程計(jì)算機(jī)的IP地址。“myshare”是共享文件夾的名稱,“mypath”是數(shù)據(jù)庫(kù)文件的相對(duì)路徑,“mydb.mdb”是被訪問的遠(yuǎn)程數(shù)據(jù)庫(kù)名稱。在確認(rèn)上述各項(xiàng)設(shè)定正確無誤且遠(yuǎn)程計(jì)算機(jī)共享打開后就可以向該遠(yuǎn)程數(shù)據(jù)庫(kù)進(jìn)行各項(xiàng)操作了。[3]

        3.3訪問遠(yuǎn)程數(shù)據(jù)庫(kù)實(shí)例

        本實(shí)例由一個(gè)數(shù)據(jù)采集子VI采集生產(chǎn)現(xiàn)場(chǎng)一組數(shù)據(jù),并將這些數(shù)據(jù)存在一個(gè)全局?jǐn)?shù)組中,然后采用如圖2所示的框圖程序通過局域網(wǎng)絡(luò)向名為“myserver”計(jì)算機(jī)中的一個(gè)Accesss數(shù)據(jù)庫(kù)文件寫入數(shù)據(jù)。該文件名為“sampledatabase”位于共享名為“123”的文件夾中,“mytable”是該數(shù)據(jù)庫(kù)文件的一個(gè)表格文件。由于要向表格中寫入一組數(shù)據(jù),因此使用一個(gè)“for loop”結(jié)構(gòu)并利用其對(duì)數(shù)組自動(dòng)索引功能通過“format into string”子VI生成SQL命令文本依次向表格中寫入數(shù)據(jù)。經(jīng)過一次循環(huán)可以向數(shù)據(jù)庫(kù)中添加一條記錄,該記錄包含兩個(gè)字段:數(shù)據(jù)編號(hào)和數(shù)據(jù)值。如果是連續(xù)采集則可以將上述的程序置于一個(gè)“while”循環(huán)結(jié)構(gòu)中,定時(shí)調(diào)用數(shù)據(jù)寫入程序即可實(shí)現(xiàn)連續(xù)保存數(shù)據(jù)。對(duì)于從遠(yuǎn)程計(jì)算機(jī)中讀取數(shù)據(jù)庫(kù)文件也可采用類似的方法,在此不再贅述。

      4 結(jié)論

        實(shí)際證明,在Labview中基于ADO技術(shù)構(gòu)建局域網(wǎng)環(huán)境下的,以網(wǎng)絡(luò)共享方式實(shí)現(xiàn)對(duì)本地或遠(yuǎn)程數(shù)據(jù)庫(kù)訪問可以充分利用ADO的各種屬性和方法,無需使用其它編程語(yǔ)言,無需增加系統(tǒng)成本,直接在Labview中實(shí)現(xiàn)高速、實(shí)時(shí)地訪問數(shù)據(jù)庫(kù),是一種簡(jiǎn)單、經(jīng)濟(jì)而又具有實(shí)際意義的遠(yuǎn)程數(shù)據(jù)庫(kù)訪問方法。

      參考文獻(xiàn)

        [1]楊樂平等,Labview高級(jí)程序設(shè)計(jì)[M].清華大學(xué)出版社.2003.457-465

        [2] 紀(jì)淑娟,蘇蕊,梁永全.利用ADO方法在C/S模式下實(shí)現(xiàn)遠(yuǎn)程數(shù)據(jù)訪問[J]. 山東科技大學(xué)學(xué)報(bào),2003,22(1):73-75

        [3]肖桂東等, SQL Server疑難解析[M].電子工業(yè)出版社.2003.316-325

      文章版權(quán)歸西部工控xbgk所有,未經(jīng)許可不得轉(zhuǎn)載。

      主站蜘蛛池模板: 国产综合一区二区在线观看| 一区二区在线免费视频| 在线精品一区二区三区电影| 日韩精品一区二区三区在线观看l| 国产午夜精品一区理论片飘花 | 精品无码av一区二区三区| 国产伦精品一区二区三区视频小说| 国精产品一区二区三区糖心| 国产成人高清亚洲一区久久| 3d动漫精品一区视频在线观看| 国产婷婷色一区二区三区| 高清一区高清二区视频| 国模吧一区二区三区精品视频| 国产成人AV一区二区三区无码 | 久久成人国产精品一区二区| 成人免费视频一区二区三区| 熟女精品视频一区二区三区| 夜夜爽一区二区三区精品| 亚欧在线精品免费观看一区 | 久久综合九九亚洲一区| 一区二区三区国产精品| 亚洲av成人一区二区三区在线播放| 久久精品国产一区二区| 韩国理伦片一区二区三区在线播放 | 搜日本一区二区三区免费高清视频 | 久久婷婷久久一区二区三区| 日韩免费视频一区| 日本一区二区视频| 精品人妻中文av一区二区三区| 国产午夜精品一区理论片| 精品成人一区二区三区四区| 国产在线一区二区杨幂| 免费一本色道久久一区| 亚洲福利电影一区二区?| 中文字幕人妻丝袜乱一区三区 | 免费无码毛片一区二区APP| 99国产精品一区二区| 日韩一区二区三区视频| 乱人伦一区二区三区| 国产乱码精品一区二区三区四川人| 精品一区二区三区在线观看视频 |