資源描述:
《windows利用qt axobject使用ado訪問(wèn)數(shù)據(jù)庫(kù)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、Windows利用QtAxObject使用ADO訪問(wèn)數(shù)據(jù)庫(kù)1.介紹使用Qt在Windows下編程,有時(shí)候需要使用COM組件。在Qt中,可以用以下幾種方式訪問(wèn)COM組件:1.通過(guò)VC等其他語(yǔ)言對(duì)要使用的COM封裝成動(dòng)態(tài)鏈接庫(kù),然后利用QLibrary加載并使用這些動(dòng)態(tài)鏈接庫(kù)2.使用QAxObject這個(gè)類(lèi)直接操作COM組件如果Qt程序要在Windows平臺(tái)下使用微軟提供的數(shù)據(jù)庫(kù),如Access和SQLServer。雖然可以同QSqlDatabase以O(shè)DBC的方式訪問(wèn)Access或SQLServer,但這種方式顯然不如ADO來(lái)的效率更高一些
2、。如果要使用MySQL,Oracle等其他數(shù)據(jù)庫(kù),還是不妨使用QSqlDatabase進(jìn)行操作。2.實(shí)現(xiàn)代碼下面是使用AxObject對(duì)ADO的封裝/*File:ado.h關(guān)于ADO的一些定義*/#ifndefADO_H#defineADO_H#include#defineadConnectUnspecified-1#defineadStateClosed0#defineadOpenStatic3#defineadOpenDynamic2#defineadLockOptimistic3#defineadCmdText
3、1typedeflongHRESULT;#defineSUCCEEDED(hr)((HRESULT)(hr)>=0)#defineFAILED(hr)((HRESULT)(hr)<0)#defineADO_DELETE(p)do{if(p)delete(p);(p)=0;}while(0)#endif//ADO_H/*Fileadoconnection.hAdoConnection的聲明*/#ifndefADOCONENCTION_H#defineADOCONENCTION_H#include#include4、riant>classQTimer;classAdoConnection:publicQObject{Q_OBJECTpublic:explicitAdoConnection(QObject*parent=0);boolopen(constQString&connectString);boolopen();boolexecute(constQString&sql);QVariantconnection();boolisOpen()const;voidclose();protectedslots:voidexception(intcode,
5、constQString&source,constQString&desc,constQString&help);voiddisconnect();private:QAxObject*object;QStringopenString;QTimer*timer;};#endif//ADOCONENCTION_H/*Fileadoconnection.hAdoConnection的實(shí)現(xiàn)*/#include"adoconenction.h"#include"ado.h"#include#includeAdoCo
6、nnection::AdoConnection(QObject*parent):QObject(parent){timer=newQTimer(this);Q_CHECK_PTR(timer);connect(timer,SIGNAL(timeout()),this,SLOT(disconnect()));object=newQAxObject(this);object->setControl("ADODB.Connection");/*創(chuàng)建ADODB.Connection對(duì)象*/object->setProperty("Connecti
7、onTimeout",300);/*設(shè)置超時(shí)時(shí)間,確保連接成功*/connect(object,SIGNAL(exception(int,constQString&,constQString&,constQString&)),this,SLOT(exception(int,constQString&,constQString&,constQString&)));}voidAdoConnection::exception(int/*code*/,constQString&/*source*/,constQString&/*desc*/,co
8、nstQString&/*help*/){/*輸出異?;蝈e(cuò)誤信息*/qDebug()<<"Code:"<