王仁勝 閆艾敏
(安徽埃夫特智能裝備有很公司,安徽 蕪湖 241007)
ADO是微軟公司為數(shù)據(jù)庫(kù)開(kāi)發(fā)提供的強(qiáng)大的使用應(yīng)用程序?qū)咏涌?并且是當(dāng)前微軟支持的數(shù)據(jù)庫(kù)進(jìn)行操作的最有效和最簡(jiǎn)單直接的方法.它是面向?qū)ο蟮木幊探涌?包含三個(gè)基本接口::_ ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口.使用之前需要引入ADO庫(kù)文件和初始化OLE/COM庫(kù)環(huán)境.
1.引入ADO庫(kù)文件
使用ADO前必須在工程的stdafx. h頭文件里用直接引入符號(hào)#import引入ADO庫(kù)文件
以使編譯器能正確編譯,代碼如下所示:
用#import引入ADO庫(kù)文件
#i m p o r t“c:p r o g r a m f i l e s commonfilessystemadomsado15.dll”no_ namespacesrename(“EOF”adoEOF”)
這行語(yǔ)句聲明在工程中使用ADO,但不使用ADO的名字空間,并且為了避免常數(shù)沖突,將常數(shù)EOF改名為adoEOF?,F(xiàn)在不需添加另外的頭文件,就可以使用ADO接口了。
圖1 :中英文切換數(shù)據(jù)表
圖2 :IO映射表
2.初始化OLE/ COM庫(kù)環(huán)境
ADO庫(kù)是一組COM動(dòng)態(tài)庫(kù),因此應(yīng)用程序在調(diào)用ADO前,必須初始化OLE/COM庫(kù)環(huán)境。
::CoInitialize(NULL);
3.采用ADO接口智能指針
ADO庫(kù)包含三個(gè)基本接口:_ ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。
_ConnectionPtr接口返回一個(gè)記錄集或一個(gè)空指針。通常使用它來(lái)創(chuàng)建一個(gè)數(shù)據(jù)連接或執(zhí)行一條不返回任何結(jié)果的SQL語(yǔ)句,如一個(gè)存儲(chǔ)過(guò)程。對(duì)于要返回記錄的操作通常用_RecordserPtr來(lái)實(shí)現(xiàn)。_CommandPtr接口返回一個(gè)記錄集。它提供了一種簡(jiǎn)單的方法來(lái)執(zhí)行返回記錄集的存儲(chǔ)過(guò)程和SQL語(yǔ)句。
_RecordsetPtr是一個(gè)記錄集對(duì)象。與以上兩種對(duì)象相比,它對(duì)記錄集提供了更多的控制功能,如記錄鎖定,游標(biāo)控制等。同_CommandPtr接口一樣,它不一定要使用一個(gè)已經(jīng)創(chuàng)建的數(shù)據(jù)連接,可以用一個(gè)連接串代替連接指針賦給_ RecordsetPtr的connection成員變量,讓它自己創(chuàng)建數(shù)據(jù)連接。
SQL關(guān)系數(shù)據(jù)庫(kù)是當(dāng)今網(wǎng)絡(luò)編程中使用的比較多的一個(gè)數(shù)據(jù)庫(kù)系統(tǒng).SQL是英文StructuredQueryLanguage的簡(jiǎn)稱,中文名是結(jié)構(gòu)化查詢語(yǔ)言,是進(jìn)行數(shù)據(jù)庫(kù)操作的標(biāo)準(zhǔn)語(yǔ)言。SQL語(yǔ)言的主要功能就是同各種數(shù)據(jù)庫(kù)建立聯(lián)系,進(jìn)行溝通。按照ANSI(美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì))的規(guī)定,SQL被作為關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)的標(biāo)準(zhǔn)語(yǔ)言。SQL語(yǔ)言可以用來(lái)執(zhí)行各種各樣的操作,例如更新數(shù)據(jù)庫(kù)中的數(shù)據(jù),從數(shù)據(jù)庫(kù)中提取數(shù)據(jù)等。目前,絕大多數(shù)流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)等都采用了SQL語(yǔ)言標(biāo)準(zhǔn)。QH165奇瑞自主研發(fā)的點(diǎn)焊機(jī)器人就采用access作為數(shù)據(jù)庫(kù),采用SQL關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言對(duì)其進(jìn)行數(shù)據(jù)的訪問(wèn)和操作,包括對(duì)數(shù)據(jù)的添加,更新,修改,刪除等。
圖3 :報(bào)警內(nèi)容表
數(shù)據(jù)庫(kù)記錄添加:
Sql=”insertinto數(shù)據(jù)表(字段1,字段2,字段3...)values(值1,值2,值3...)”
Sql=”insertinto目 標(biāo) 數(shù) 據(jù) 表select*from源數(shù)據(jù)表”(把源數(shù)據(jù)表的記錄添加到目標(biāo)數(shù)據(jù)表)
數(shù)據(jù)庫(kù)記錄修改:
Sql=”update數(shù)據(jù)表set字段名=字段值where條件表達(dá)式”
Sql=”update數(shù)據(jù)表set字段1=值1,字段2=值2...字段n=值nwhere條件表達(dá)式”
數(shù)據(jù)庫(kù)記錄刪除:
圖4 :主程序表
圖6 :數(shù)據(jù)程序表
Sql=”deletefrom數(shù)據(jù)表where條件表達(dá)式”
Sql=”deletefrom數(shù)據(jù)表”(將數(shù)據(jù)表所有記錄刪除)
基于以上的基礎(chǔ)開(kāi)發(fā)了QH165點(diǎn)焊機(jī)器人的數(shù)據(jù)庫(kù)程序.
機(jī)器人數(shù)據(jù)庫(kù)程序采用access作為數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)源程序分為示教程序和點(diǎn)位置保存程序。比如一個(gè)命為2H01的表名,存貯著示教運(yùn)動(dòng)指令程序,其對(duì)應(yīng)著一個(gè)2H01Data的點(diǎn)存貯程序,保存著各個(gè)點(diǎn)的位置或關(guān)節(jié)值.
數(shù)據(jù)庫(kù)表保存在相對(duì)路徑為data\ data.mdb和data\sysuser.mdb中.
1.判斷表名是否存在,格式是否正確
首先在數(shù)據(jù)庫(kù)表中查找是否存在這兩個(gè)表,用到MFC中的CFileFind類的FindFile方法.如:
BOOLbworking=finder1.FindFile(“data\sysuser.mdb”);
BOOLbfinding=finder2.FindFile(“data\data.mdb”);
通過(guò)BOOL類型的兩個(gè)變量的返回值來(lái)進(jìn)行判斷表名是否存在.
2.數(shù)據(jù)庫(kù)中表組成
data.mdb數(shù)據(jù)表中有語(yǔ)言轉(zhuǎn)換的數(shù)據(jù)表languageNum,存貯機(jī)器人報(bào)警內(nèi)容和時(shí)間數(shù)據(jù)表warning,外部IO輸入輸出表IO,文件名表FileName,坐標(biāo)系表Coordinate,主程序表和存貯數(shù)據(jù)點(diǎn)位置表,與機(jī)器人相關(guān)的數(shù)據(jù)都存貯在各自的數(shù)據(jù)表中.(如下圖圖1、圖2):
3.數(shù)據(jù)表的操作
每一個(gè)數(shù)據(jù)表都涉及到創(chuàng)建,增加/刪除行,刪除表,修改表的操作,以主程序表為例進(jìn)行詳細(xì)介紹
數(shù)據(jù)表的創(chuàng)建:
數(shù)據(jù)表的創(chuàng)建涉及到SQL關(guān)系數(shù)據(jù)語(yǔ)句.CREATETABLE
首先采用ADO接口連接數(shù)據(jù)庫(kù),創(chuàng)建ADO庫(kù)中的接口對(duì)象實(shí)例m_ pConnection2,
m_pRecordset2.打開(kāi)數(shù)據(jù)庫(kù),將SQL語(yǔ)句格式化的執(zhí)行創(chuàng)建數(shù)據(jù)表,然后在表中創(chuàng)建列.并采用try()catch()的方式來(lái)捕獲異常.
圖7 創(chuàng)建表程序
圖8 復(fù)制表程序
圖9 數(shù)據(jù)表刪除
數(shù)據(jù)表復(fù)制:
通過(guò)SQL語(yǔ)句的格式化操作來(lái)執(zhí)行,SQL語(yǔ)句為Select*into*from*(如圖)
數(shù)據(jù)表刪除
在數(shù)據(jù)庫(kù)開(kāi)發(fā)中,采用ADO接口技術(shù)與SQL語(yǔ)句結(jié)合對(duì)數(shù)據(jù)的操作在IT領(lǐng)域方面已經(jīng)非常常見(jiàn).通過(guò)這種方法數(shù)據(jù)結(jié)構(gòu)清晰,結(jié)構(gòu)簡(jiǎn)單,操作方便,效率也非常高.而本文則是將此方法應(yīng)用于機(jī)器人的開(kāi)發(fā)技術(shù)中.因此讀者可以以此為鑒將其應(yīng)用于其它相關(guān)行業(yè).
注:國(guó)家863項(xiàng)目基金:國(guó)家863新型重載工業(yè)點(diǎn)焊機(jī)器人及自動(dòng)化裝備開(kāi)發(fā)
[1]候俊杰深入淺出MFC[M]華中理工出版社2002
[2]陳克力SQLServer2005編程[M].清華大學(xué)出版社2008