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