RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

英創(chuàng)信息技術(shù)嵌入式數(shù)據(jù)庫SQLC介紹

英創(chuàng)信息技術(shù) ? 來源:英創(chuàng)信息技術(shù) ? 作者:英創(chuàng)信息技術(shù) ? 2019-11-12 10:29 ? 次閱讀

在當前的嵌入式工控產(chǎn)品中,數(shù)據(jù)庫得到了越來越多的應用。通過數(shù)據(jù)庫,可以非常方便地存儲和檢索數(shù)據(jù),極大地提高工作效率。英創(chuàng)公司基于WinCE的ARM9工控主板,提供了兩種類型的數(shù)據(jù)庫,供客戶的應用程序選擇。一種是WinCE自帶的數(shù)據(jù)庫,主要面對需要存儲的數(shù)據(jù)量較小,數(shù)據(jù)結(jié)構(gòu)相對簡單的應用,例如系統(tǒng)的動態(tài)配置文件,則使用起來非常合適。另一種則是在PC中最流行的SQL數(shù)據(jù)庫,英創(chuàng)ARM9工控主板缺省配置的SQL數(shù)據(jù)庫版本為SQL CE2.0。在表一中,列出了WinCE自帶數(shù)據(jù)庫與SQL CE數(shù)據(jù)庫部分功能的對比,用戶可以根據(jù)自己的需要,選擇合適的數(shù)據(jù)庫。關(guān)于WinCE自帶數(shù)據(jù)庫的操作請參考《EVC高級編程及其應用開發(fā)》WinCE基礎數(shù)據(jù)庫編程部分。本文主要講解在eVC開發(fā)環(huán)境下,以使用ADOCE 3.1為例詳細說明開發(fā)SQLCE本地數(shù)據(jù)庫的方法。
表一:WinCE自帶數(shù)據(jù)庫與SQLCE數(shù)據(jù)庫功能對照表

WinCE自帶數(shù)據(jù)庫

SQLCE數(shù)據(jù)庫

開發(fā)方式 使用API函數(shù)操作 使用SQL語句操作
數(shù)據(jù)類型 較少(9種) 較多(20種)
與pc端SQL Server數(shù)據(jù)同步 不支持 支持
更改表字段 不支持 支持

在EVC環(huán)境下由于沒有提供專門的API函數(shù)對SQLCE進行操作,需要通過ADOCE(Active Data Object for Windows CE)組件才能實現(xiàn)對SQLCE數(shù)據(jù)庫的操作。為了方便用戶使用SQLCE數(shù)據(jù)庫,利用ADOCE組件技術(shù)(ADOCE介紹在附錄一中),針對數(shù)據(jù)庫操作中常用的功能,包括創(chuàng)打開數(shù)據(jù)庫、建數(shù)據(jù)表等,英創(chuàng)提供了一個對SQLCE數(shù)據(jù)庫操作的管理類DBManager,應用程序通過調(diào)用該類中提供的API函數(shù),就可以很方便的建立與SQLCE的鏈接、打開數(shù)據(jù)庫,并可以直接利用SQL語句來對數(shù)據(jù)庫進行建立表、為表添加記錄以及查詢表中的記錄等功能。在eVC環(huán)境下通過DBManager類訪問SQLCE數(shù)據(jù)庫模型如圖1所示。

1、DBManager類及派生類說明
DBManager類主要提供打開數(shù)據(jù)庫、執(zhí)行SQL語句等方法。其頭文件聲明如下:
// 函數(shù)功能:打開數(shù)據(jù)庫
// 入口參數(shù):lpszFileName表示要打開的數(shù)據(jù)庫名稱,為絕對路徑加文件名。
// 出口參數(shù):無
// 返 回 值:TRUE:打開數(shù)據(jù)庫成功;FALSE:打開數(shù)據(jù)庫失敗

bool OpenDatabase(LPCTSTR lpszDBName);
// 函數(shù)功能:執(zhí)行SQL語句
// 入口參數(shù):lpstrSql為要執(zhí)行SQL語句的字符串。
// 出口參數(shù):無
// 返 回 值:TRUE:執(zhí)行SQL語句成功;FALSE:執(zhí)行SQL語句失敗

bool ExecSql(LPCTSTR lpstrSql);
如果想靈活使用DBManager類對數(shù)據(jù)庫操作,必須了解SQL語句,常用SQL語句可以參考附錄二中的內(nèi)容。但是,對于嵌入式工程師來說,有很多用戶對SQL語句并不了解,這樣,對用戶使用數(shù)據(jù)庫提高了門檻。在實際應用中,嵌入式主板的主要任務是把采集工業(yè)現(xiàn)場的狀態(tài)并保存到數(shù)據(jù)庫中,如果想查看分析數(shù)據(jù),可以通過WebServer把數(shù)據(jù)庫信息傳輸?shù)紺lient端。為了方便不了解SQL語句的用戶使用數(shù)據(jù)庫,我們在基類DBManager中提供了幾個虛函數(shù),并給出在派生類中實現(xiàn)虛函數(shù)的例子。這樣,使用API函數(shù)就可以實現(xiàn)打開數(shù)據(jù)庫、創(chuàng)建表、插入記錄等操作。用戶可以根據(jù)要保存數(shù)據(jù)結(jié)構(gòu)修改虛函數(shù)就可以滿足用戶操作數(shù)據(jù)庫的要求,下面以一個實際示例說明使用派來類的方法。
在工業(yè)現(xiàn)場,用戶常常需要把現(xiàn)場的狀態(tài)保存起來,例如,把AD采集的數(shù)據(jù)和開關(guān)量保存起來。本文中,以英創(chuàng)的ETA197 AD模塊和ETA716 IO模塊為例,說明數(shù)據(jù)庫的操作。ETA197、ETA716與嵌入式主板的連接如圖2所示。

根據(jù)實際情況,我們需要保存的信息有時間、IO輸出值、IO輸入值、8通道AD采樣值,根據(jù)我們的需要,我們設計ADDIOData數(shù)據(jù)結(jié)構(gòu)如下。
struct ADDIOData
{
CString adtime; // 采集信息的時間
UCHAR dout;// IO輸出值
UCHAR din;// IO輸入值
float Advalue[8];// AD采樣值
};
根據(jù)此數(shù)據(jù)結(jié)構(gòu),我們實現(xiàn)了創(chuàng)建表和插入記錄的API函數(shù),函數(shù)聲明如下:
class ADDataBase : public DBManager
{
public:
// 函數(shù)功能:創(chuàng)建表
// 入口參數(shù):tablename表示要創(chuàng)建的表名。
// 出口參數(shù):無
// 返 回 值:TRUE:創(chuàng)建表成功;FALSE:創(chuàng)建表失敗

bool CreateTable(LPCTSTR tablename);
// 函數(shù)功能:刪除表
// 入口參數(shù):tablename表示要刪除的表名。
// 出口參數(shù):無
// 返 回 值:TRUE:刪除表成功;FALSE:刪除表失敗

bool DeleteTable(LPCTSTR tablename);
// 函數(shù)功能:插入記錄
// 入口參數(shù):tablename表示表名,fieldVal為記錄值結(jié)構(gòu)體
// 出口參數(shù):無
// 返 回 值:TRUE:插入記錄成功;FALSE:插入記錄失敗

bool InsertRecord(LPCTSTR tablename,ADDIOData fieldVal);
};
2、使用DBManager類及派生類實現(xiàn)創(chuàng)建表、插入記錄等操作的順序為:
(1)打開數(shù)據(jù)庫
(2)創(chuàng)建表
(3)插入記錄
ADDataBase dbm;
CString DBFile=_T('\\nandflash\\emtronix.sdf');
CString TableName=_T('ADCollection');
UserInfo test;
dbm.OpenDatabase(DBFile);// 打開數(shù)據(jù)庫,參數(shù)為數(shù)據(jù)庫路徑名
dbm.CreateTable(TableName);// 創(chuàng)建表
for(i=0;i<6;i++)????// 每秒鐘采集一次數(shù)據(jù)
{
test.dout=0x01<ISA_WriteUchar(EM9260_CS1,0x10,test.dout);// 寫716輸出端口
ISA_ReadUchar(EM9260_CS1,0x10,&test.din);// 讀716輸入端口
for (j=0;j<8;j++)
{
getADValue(j,0,&test.Advalue[j]);// 得到8通道AD采樣值
}
dbm.InsertRecord(TableName,test);// 向tablename表中插入記錄
Sleep(1000);
}
由上例可以看出,使用英創(chuàng)公司提供的DBManager的派生類,不必了解數(shù)據(jù)庫就可以方便地實現(xiàn)數(shù)據(jù)的存儲。
這種操作數(shù)據(jù)庫的方式不是十分靈活,對熟悉數(shù)據(jù)庫的用戶,可以使用DBManager類,執(zhí)行SQL語句,靈活對數(shù)據(jù)庫操作。關(guān)于DBManager類,可以參考源碼中注釋說明。
附錄一、ADOCE簡介
ADOCE(Active Data Object for Windows CE)技術(shù)提供了高層數(shù)據(jù)庫應用軟件的訪問接口,可在eVC、eVB等高級語言環(huán)境中直接使用,ADOCE是一種易用的COM組件,關(guān)于COM組件的開發(fā)與調(diào)用在《ARM9工控板在遠程監(jiān)控中的應用》系列文章中有詳細的說明。ADOCE作為開發(fā)WinCE數(shù)據(jù)庫應用程度的面向?qū)ο蟮腃OM接口,其訪問數(shù)據(jù)庫是通過訪問OLE DB數(shù)據(jù)提供程序來進行的,并且提供了一種對OLEDB數(shù)據(jù)提供程序的簡單高層訪問接口。ADOCE技術(shù)簡化了OLE DB的操作,在OLE DB的程序中使用了大量的COM接口,而ADOCE則封裝了這些接口,所以,ADOCE是一種高層的訪問技術(shù)。ADOCE的數(shù)據(jù)存儲模型如圖1所示:

ADOCE支持Connection、Recordset、Field、Fields、Error對象,但不支持Command對象、Property對象以及Properties collection。下面介紹幾個重要的ADOCE對象。
連接對象(Connection)
Connection對象建立一個對象數(shù)據(jù)源的數(shù)據(jù)交換環(huán)境,ADOCE允許建立對ACCESS數(shù)據(jù)源和SQLCE數(shù)據(jù)源的連接。
記錄集對象(Recordset)
Recordset對象是ADOCE數(shù)據(jù)操作的核心,它是查詢結(jié)果的集合,可以通過這個結(jié)果集處理來自數(shù)據(jù)源的數(shù)據(jù),包括修改記錄、更新記錄、插入和刪除記錄等??梢酝ㄟ^Recordset的Open方法執(zhí)行SQL語句,實現(xiàn)數(shù)據(jù)庫的操作。
字段對象(Field)
·字段對象的每條記錄都由Fields組成,其中包括名稱、數(shù)據(jù)和值。
·基于ADOCE的WinCE數(shù)據(jù)庫開發(fā)程序包括以下基本步驟:
·創(chuàng)建Connection對象
·打開數(shù)據(jù)源,建立同數(shù)據(jù)源的連接
·創(chuàng)建Record對象
·將Recordset的連接字符串設置到Connection對象中
·使用SQL命令
·通過Recordset對象完成結(jié)果記錄集的操作
·終止連接
附錄二、SQL語句語法說明
SQL是Structure Query Language結(jié)構(gòu)化查詢語言的縮寫,通過SQL語句的執(zhí)行,可以對數(shù)據(jù)庫內(nèi)容(表及記錄)進行修改或查詢,因此數(shù)據(jù)庫的操作就是執(zhí)行SQL語句。下面簡要介紹下幾個重要的SQL語句。
1、Create Table語句功能是創(chuàng)建表,其語法格式如下:
Create Table 表名稱 (字段名稱 數(shù)據(jù)類型 [(字段長度)] [,字段名稱 數(shù)據(jù)類型 [(字段長度)] ,[ PRIMARY KEY | UNIQUE ] ]

例如: CREATE TABLE Products (ProductID int,Name nvarchar(255), PRIMARY KEY (ProductID)
2、Drop Table語句的功能是將一個現(xiàn)存于數(shù)據(jù)庫內(nèi)的表刪除,其所使用的語法與格式如下所示:
Drop Table 表名稱
3、Select語句可以對表的記錄作查詢、統(tǒng)計。由于Select語句使用比較靈活,我們以幾個具體的例子講價Select的用法。
Select 字段名稱 [,字段名稱] From 表名稱
其中,F(xiàn)rom關(guān)鍵詞是設置來源表名稱,使用時可以設置使用一個或多個表,而表名稱間以逗號分隔。在搜尋結(jié)果中取出所需的字段內(nèi)容,設置的字段名稱以逗號分隔,如果要取得表上的所有字段,可直接用“*”表示。
SELECT * FROM Products WHERE ProductID='02'
Where關(guān)鍵詞是設置查詢記錄條件,用以取得所有符合設置條件內(nèi)容的記錄。在條件設置中可以使用 > 、<、=等比較符號,而對于多項條件的判斷也可以利用AND,OR等邏輯操作數(shù)來連接。
4、插入記錄
INSERT INTO 表名[(field1[, field2[, ...]])] VALUES (value1[, value2[, ...]]
例如:INSERT INTO Products (ProductID,Name) VALUES (1,'EM9000嵌入式模塊')
5、刪除記錄
DELETE FROM 表名 WHERE criteria
例如:DELETE FROM 表名 WHERE ProdutcID=01
6、更新記錄
UPDATE 表名 SET newvalue WHERE criteria;
例如:Update Products set Name=’EM9161嵌入式主板’ where ProdcutID=01
在eVC環(huán)境下,對數(shù)據(jù)的開發(fā),其實就是通過ADOCE COM組件執(zhí)行SQL語句的過程。為了使用戶方便的使用ADOCE,我們提供了DBManager類,通過此類,可以方便的建立與數(shù)據(jù)庫的連接、執(zhí)行sql語句等操作。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • WINDOWS
    +關(guān)注

    關(guān)注

    3

    文章

    3541

    瀏覽量

    88622
  • 嵌入式主板
    +關(guān)注

    關(guān)注

    7

    文章

    6085

    瀏覽量

    35295
收藏 人收藏

    評論

    相關(guān)推薦

    創(chuàng)嵌入式主板的無線通訊解決方案

    WiFi模塊。ETA6210模塊繼續(xù)保持了PPP撥號模式,使得無論是Linux平臺的主板還是CE平臺的主板,都能方便的使用?! ∠卤砹谐隽水斍?b class='flag-5'>英創(chuàng)嵌入式主板支持的無線模塊。模塊型號模塊圖片無線信道
    發(fā)表于 03-24 14:00

    基于組件的嵌入式移動數(shù)據(jù)庫怎么實現(xiàn)?

    嵌入式技術(shù)已在人們生活中得到廣泛應用,移動計算更是給人們的生活帶來了極大的方便,由移動計算技術(shù)推動發(fā)展的新的數(shù)據(jù)庫技術(shù)讓人耳目一新。如
    發(fā)表于 10-11 06:44

    為什么要選擇嵌入式內(nèi)存數(shù)據(jù)庫引擎?

    嵌入式內(nèi)存數(shù)據(jù)庫技術(shù)發(fā)展的現(xiàn)狀內(nèi)存數(shù)據(jù)庫的定義內(nèi)存數(shù)據(jù)庫的特點面向3G平臺嵌入式內(nèi)存
    發(fā)表于 04-27 07:08

    跨平臺嵌入式數(shù)據(jù)庫EffiProz介紹

    EffiProz:面向.NET程序員的跨平臺嵌入式數(shù)據(jù)庫 EffiProz:面向.NET程序員的跨平臺嵌入式數(shù)據(jù)庫EffiProz:面向.NET程序員的跨平臺
    發(fā)表于 12-21 06:00

    嵌入式數(shù)據(jù)庫的作用是什么

    隨著嵌入式技術(shù)的發(fā)展,嵌入式數(shù)據(jù)庫逐步走向應用。本質(zhì)上,嵌入式數(shù)據(jù)庫是由通用
    發(fā)表于 12-21 07:18

    基于ARM 的嵌入式數(shù)據(jù)庫研究與應用

    作為移動計算、移動商務和信息家電的核心技術(shù)嵌入式數(shù)據(jù)庫已成為當前相關(guān)領(lǐng)域的發(fā)展焦點。微處理器ARM、操作系統(tǒng)uCLinux 和嵌入式
    發(fā)表于 06-19 08:19 ?17次下載

    嵌入式移動數(shù)據(jù)庫NimbleDB的實現(xiàn)

    數(shù)據(jù)庫技術(shù)一直隨著計算的發(fā)展而不斷進步,隨著移動計算時代的到來,嵌入式操作系統(tǒng)對移動數(shù)據(jù)庫系統(tǒng)的需求為數(shù)據(jù)庫
    發(fā)表于 06-25 13:35 ?17次下載

    嵌入式移動數(shù)據(jù)庫數(shù)據(jù)同步及其應用

    隨著移動通信技術(shù)的進步和人們對移動數(shù)據(jù)處理和管理需求的不斷提高,與各種智能設備緊密結(jié)合的嵌入式移動數(shù)據(jù)庫技術(shù)已經(jīng)得到了廣泛應用。論文
    發(fā)表于 08-25 08:38 ?15次下載

    嵌入式移動數(shù)據(jù)庫NimbleDB的實現(xiàn)

    數(shù)據(jù)庫技術(shù)一直隨著計算的發(fā)展而不斷進步,隨著移動計算時代的到來,嵌入式操作系統(tǒng)對移動數(shù)據(jù)庫系統(tǒng)的需求為數(shù)據(jù)庫
    發(fā)表于 12-22 11:27 ?15次下載

    嵌入式數(shù)據(jù)庫的應用

    嵌入式數(shù)據(jù)庫的應用 嵌入式數(shù)據(jù)庫一般不出現(xiàn)在表現(xiàn)層,所以很難被一般的用戶所察覺。實際上,被稱作“嵌入式
    發(fā)表于 03-29 15:09 ?1099次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>數(shù)據(jù)庫</b>的應用

    嵌入式移動數(shù)據(jù)庫與Agent技術(shù)原理及設計

    嵌入式移動數(shù)據(jù)庫與Agent技術(shù)原理及設計 概述:隨著網(wǎng)絡技術(shù)的迅速發(fā)展和不斷滲透,在任何地點和任何時候都能接入網(wǎng)絡獲取各種信息,必
    發(fā)表于 03-07 12:47 ?561次閱讀
    <b class='flag-5'>嵌入式</b>移動<b class='flag-5'>數(shù)據(jù)庫</b>與Agent<b class='flag-5'>技術(shù)</b>原理及設計

    嵌入式數(shù)據(jù)庫mSQL在Linux下的應用

    嵌入式數(shù)據(jù)庫的名稱來自其獨特的運行模式。這種數(shù)據(jù)庫嵌入到了應用程序進程中,消除了與客戶機服務器配置相關(guān)的開銷。嵌入式
    發(fā)表于 12-02 10:13 ?607次閱讀
     <b class='flag-5'>嵌入式</b><b class='flag-5'>數(shù)據(jù)庫</b>mSQL在Linux下的應用

    創(chuàng)信息技術(shù)WinCE工控主板的數(shù)據(jù)庫配置簡介

    創(chuàng)公司的工控主板產(chǎn)品均預裝了正版Windows CE操作系統(tǒng)(簡稱WinCE)。WinCE是嵌入式領(lǐng)域的主流操作系統(tǒng)之一,它不僅在多任務、通訊、圖形界面有很好的支持,在數(shù)據(jù)庫方面也有
    的頭像 發(fā)表于 01-14 11:35 ?1470次閱讀

    創(chuàng)信息技術(shù)Linux主板Qt數(shù)據(jù)庫應用程序簡介

    SQLite是一個開源的嵌入式數(shù)據(jù)庫,其特點是零配置,可移植性好,小巧、高效而且可靠。同時SQLite的數(shù)據(jù)庫權(quán)限只依賴于文件系統(tǒng),沒有用戶帳戶的概念,因此使用起來很方便。
    的頭像 發(fā)表于 01-17 09:44 ?1161次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創(chuàng)</b><b class='flag-5'>信息技術(shù)</b>Linux主板Qt<b class='flag-5'>數(shù)據(jù)庫</b>應用程序簡介

    嵌入式數(shù)據(jù)庫

    嵌入式數(shù)據(jù)庫的名稱來自其獨特的運行模式。這種數(shù)據(jù)庫嵌入到了應用程序進程中,消除了與客戶機服務器配置相關(guān)的開銷。嵌入式
    發(fā)表于 10-19 18:33 ?13次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>數(shù)據(jù)庫</b>
    RM新时代网站-首页