在當(dāng)前的嵌入式工控產(chǎn)品中,數(shù)據(jù)庫(kù)得到了越來(lái)越多的應(yīng)用。通過(guò)數(shù)據(jù)庫(kù),可以非常方便地存儲(chǔ)和檢索數(shù)據(jù),極大地提高工作效率。英創(chuàng)公司基于WinCE的ARM9工控主板,提供了兩種類型的數(shù)據(jù)庫(kù),供客戶的應(yīng)用程序選擇。一種是WinCE自帶的數(shù)據(jù)庫(kù),主要面對(duì)需要存儲(chǔ)的數(shù)據(jù)量較小,數(shù)據(jù)結(jié)構(gòu)相對(duì)簡(jiǎn)單的應(yīng)用,例如系統(tǒng)的動(dòng)態(tài)配置文件,則使用起來(lái)非常合適。另一種則是在PC中最流行的SQL數(shù)據(jù)庫(kù),英創(chuàng)ARM9工控主板缺省配置的SQL數(shù)據(jù)庫(kù)版本為SQL CE2.0。在表一中,列出了WinCE自帶數(shù)據(jù)庫(kù)與SQL CE數(shù)據(jù)庫(kù)部分功能的對(duì)比,用戶可以根據(jù)自己的需要,選擇合適的數(shù)據(jù)庫(kù)。關(guān)于WinCE自帶數(shù)據(jù)庫(kù)的操作請(qǐng)參考《EVC高級(jí)編程及其應(yīng)用開(kāi)發(fā)》WinCE基礎(chǔ)數(shù)據(jù)庫(kù)編程部分。本文主要講解在eVC開(kāi)發(fā)環(huán)境下,以使用ADOCE 3.1為例詳細(xì)說(shuō)明開(kāi)發(fā)SQLCE本地?cái)?shù)據(jù)庫(kù)的方法。 表一:WinCE自帶數(shù)據(jù)庫(kù)與SQLCE數(shù)據(jù)庫(kù)功能對(duì)照表
WinCE 自帶數(shù)據(jù)庫(kù)
SQLCE 數(shù)據(jù)庫(kù)
開(kāi)發(fā)方式
使用 API 函數(shù)操作
使用 SQL 語(yǔ)句操作
數(shù)據(jù)類型
較少 (9 種 )
較多 (20 種 )
與 pc 端 SQL Sever 數(shù)據(jù)同步
不支持
支持
更改表字段
不支持
支持
在EVC環(huán)境下由于沒(méi)有提供專門的API函數(shù)對(duì)SQLCE進(jìn)行操作,需要通過(guò)ADOCE(Active Data Object for Windows CE)組件才能實(shí)現(xiàn)對(duì)SQLCE數(shù)據(jù)庫(kù)的操作。為了方便用戶使用SQLCE數(shù)據(jù)庫(kù),利用ADOCE組件技術(shù)(ADOCE介紹在附錄一中),針對(duì)數(shù)據(jù)庫(kù)操作中常用的功能,包括創(chuàng)打開(kāi)數(shù)據(jù)庫(kù)、建數(shù)據(jù)表等,英創(chuàng)提供了一個(gè)對(duì)SQLCE數(shù)據(jù)庫(kù)操作的管理類DBManager,應(yīng)用程序通過(guò)調(diào)用該類中提供的API函數(shù),就可以很方便的建立與SQLCE的鏈接、打開(kāi)數(shù)據(jù)庫(kù),并可以直接利用SQL語(yǔ)句來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行建立表、為表添加記錄以及查詢表中的記錄等功能。在eVC環(huán)境下通過(guò)DBManager類訪問(wèn)SQLCE數(shù)據(jù)庫(kù)模型如圖1所示。
圖1 EVC通過(guò)DBManager訪問(wèn)數(shù)據(jù)庫(kù)模型
一、DBManager類及派生類說(shuō)明 DBManager類主要提供打開(kāi)數(shù)據(jù)庫(kù)、執(zhí)行SQL語(yǔ)句等方法。其頭文件聲明如下: //函數(shù)功能:打開(kāi)數(shù)據(jù)庫(kù) //入口參數(shù):lpszFileName表示要打開(kāi)的數(shù)據(jù)庫(kù)名稱,為絕對(duì)路徑加文件名。 //出口參數(shù):無(wú) //返 回 值:TRUE:打開(kāi)數(shù)據(jù)庫(kù)成功;FALSE:打開(kāi)數(shù)據(jù)庫(kù)失敗 bool OpenDatabase(LPCTSTR lpszDBName); //函數(shù)功能:執(zhí)行SQL語(yǔ)句 //入口參數(shù):lpstrSql為要執(zhí)行SQL語(yǔ)句的字符串。 //出口參數(shù):無(wú) //返 回 值:TRUE:執(zhí)行SQL語(yǔ)句成功;FALSE:執(zhí)行SQL語(yǔ)句失敗 bool ExecSql(LPCTSTR lpstrSql); 如果想靈活使用DBManager類對(duì)數(shù)據(jù)庫(kù)操作,必須了解SQL語(yǔ)句,常用SQL語(yǔ)句可以參考附錄二中的內(nèi)容。但是,對(duì)于嵌入式工程師來(lái)說(shuō),有很多用戶對(duì)SQL語(yǔ)句并不了解,這樣,對(duì)用戶使用數(shù)據(jù)庫(kù)提高了門檻。在實(shí)際應(yīng)用中,嵌入式主板的主要任務(wù)是把采集工業(yè)現(xiàn)場(chǎng)的狀態(tài)并保存到數(shù)據(jù)庫(kù)中,如果想查看分析數(shù)據(jù),可以通過(guò)WebServer把數(shù)據(jù)庫(kù)信息傳輸?shù)紺lient端。為了方便不了解SQL語(yǔ)句的用戶使用數(shù)據(jù)庫(kù),我們?cè)诨怐BManager中提供了幾個(gè)虛函數(shù),并給出在派生類中實(shí)現(xiàn)虛函數(shù)的例子。這樣,使用API函數(shù)就可以實(shí)現(xiàn)打開(kāi)數(shù)據(jù)庫(kù)、創(chuàng)建表、插入記錄等操作。用戶可以根據(jù)要保存數(shù)據(jù)結(jié)構(gòu)修改虛函數(shù)就可以滿足用戶操作數(shù)據(jù)庫(kù)的要求,下面以一個(gè)實(shí)際示例說(shuō)明使用派來(lái)類的方法。