Windows利用Qt AxObject使用ADO访问数据库.doc
《Windows利用Qt AxObject使用ADO访问数据库.doc》由会员分享,可在线阅读,更多相关《Windows利用Qt AxObject使用ADO访问数据库.doc(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Windows利用Qt AxObject使用ADO访问数据库1.介绍使用Qt在Windows下编程,有时候需要使用COM组件。在Qt中,可以用以下几种方式访问COM组件:1. 通过VC等其他语言对要使用的COM封装成动态链接库,然后利用QLibrary加载并使用这些动态链接库2. 使用QAxObject这个类直接操作COM组件如果Qt程序要在Windows平台下使用微软提供的数据库,如Access和SQL Server。虽然可以同QSqlDatabase以ODBC的方式访问Access或SQL Server,但这种方式显然不如ADO来的效率更高一些。如果要使用MySQL,Oracle等其他数据
2、库,还是不妨使用QSqlDatabase进行操作。2.实现代码下面是使用AxObject对ADO的封装/*File: ado.h 关于ADO的一些定义*/#ifndef ADO_H#define ADO_H#include #define adConnectUnspecified -1#define adStateClosed 0#define adOpenStatic 3#define adOpenDynamic 2#define adLockOptimistic 3#define adCmdText 1typedef long HRESULT;#define SUCCEEDED(hr) (
3、HRESULT)(hr) = 0)#define FAILED(hr) (HRESULT)(hr) 0)#define ADO_DELETE(p) doif(p) delete (p); (p)=0;while(0)#endif / ADO_H/*File adoconnection.h AdoConnection的声明*/#ifndef ADOCONENCTION_H#define ADOCONENCTION_H#include #include class QTimer;class AdoConnection : public QObject Q_OBJECTpublic: explici
4、t AdoConnection(QObject *parent = 0); bool open(const QString & connectString); bool open(); bool execute(const QString & sql); QVariant connection(); bool isOpen() const; void close();protected slots: void exception(int code, const QString & source, const QString & desc, const QString & help); void
5、 disconnect();private: QAxObject * object; QString openString; QTimer * timer;#endif / ADOCONENCTION_H/*File adoconnection.h AdoConnection的实现*/#include adoconenction.h#include ado.h#include #include AdoConnection:AdoConnection(QObject *parent) : QObject(parent) timer = new QTimer(this); Q_CHECK_PTR(
6、timer); connect(timer,SIGNAL(timeout(),this,SLOT(disconnect(); object = new QAxObject(this); object-setControl(ADODB.Connection);/*创建ADODB.Connection对象*/ object-setProperty(ConnectionTimeout,300);/*设置超时时间,确保连接成功*/ connect(object,SIGNAL(exception(int,const QString&,const QString&,const QString &), th
7、is,SLOT(exception(int,const QString&,const QString&,const QString &);void AdoConnection:exception(int /*code*/, const QString & /*source*/, const QString & /*desc*/, const QString & /*help*/) /*输出异常或错误信息*/ qDebug() Code: code; qDebug() Source: source; qDebug() Description: desc; qDebug() Help: dynam
8、icCall(Open(QString,QString,QString,int),connectString,adConnectUnspecified).toInt(); /*连接到数据库*/ return SUCCEEDED(hr);bool AdoConnection:open() if(openString.isEmpty() return false; bool ret = open(openString); if(timer & timer-isActive() timer-stop(); return ret;bool AdoConnection:execute(const QSt
9、ring & sql) if(!open() return false; /*执行SQL语句*/ HRESULT hr = object-dynamicCall(Execute(QString),sql).toInt(); return SUCCEEDED(hr);void AdoConnection:disconnect() if(isOpen() object-dynamicCall(Close); /*关闭数据库连接*/ if(timer) timer-stop(); /qDebug() isActive() timer-stop(); timer-start(5000); else d
10、isconnect();QVariant AdoConnection:connection() return object-asVariant();bool AdoConnection:isOpen() const return (bool)(object-property(State).toInt() != adStateClosed);/*File adorecordset.h AdoRecordset的实现*/#ifndef ADORECORDSET_H#define ADORECORDSET_H#include #include class QAxObject;class AdoCon
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Windows利用Qt AxObject使用ADO访问数据库 Windows 利用 Qt AxObject 使用 ADO 访问 数据库
限制150内