Кстати - сейчас ищу документацию по написанию драйвера для работы с БД. Но пока подробной документации не нашел..
что там искать-то:
How to Write Your Own Database Driverесли вкратце, вам нужно написать наследников:
QSqlDriverPlugin
QSqlDriver
QSqlResult
смотрите документацию по соответствующим классам, созданию плагинов и исходники существующих плагинов в качестве примера.
накидал примерный шаблон, для чего нужно написать реализацию:
main.cpp#include "AdoDriver.h"
#include <QSqlDriverPlugin>
QT_BEGIN_NAMESPACE
class AdoDriverPlugin : public QSqlDriverPlugin
{
public:
AdoDriverPlugin();
QSqlDriver *create(const QString &name);
QStringList keys() const;
};
AdoDriverPlugin::AdoDriverPlugin()
: QSqlDriverPlugin()
{
}
QSqlDriver *AdoDriverPlugin::create(const QString &name)
{
if (name == QLatin1String("QADO"))
{
AdoDriver *driver = new AdoDriver();
return driver;
}
return 0;
}
QStringList AdoDriverPlugin::keys() const
{
return QStringList("QADO");
}
Q_EXPORT_STATIC_PLUGIN(AdoDriverPlugin)
Q_EXPORT_PLUGIN2(sqlado, AdoDriverPlugin)
QT_END_NAMESPACE
AdoDriver.h#ifndef ADODRIVER_H
#define ADODRIVER_H
#ifdef QT_PLUGIN
#define Q_EXPORT_SQLDRIVER_ADO
#else
#define Q_EXPORT_SQLDRIVER_ADO Q_SQL_EXPORT
#endif
#include <QSqlResult>
#include <QSqlDriver>
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
class AdoDriver;
class AdoResult : public QSqlResult
{
public:
AdoResult(const AdoDriver *dr);
~AdoResult();
protected:
QVariant data(int index);
bool isNull(int index);
bool reset(const QString &query);
bool fetch(int index);
bool fetchFirst() ;
bool fetchLast();
int size();
int numRowsAffected();
QSqlRecord record() const;
};
class Q_EXPORT_SQLDRIVER_ADO AdoDriver : public QSqlDriver
{
Q_OBJECT
public:
explicit AdoDriver(QObject *parent = 0);
~AdoDriver();
bool hasFeature(DriverFeature feature) const;
bool open(const QString &db, const QString &user, const QString &password, const QString &host, int port, const QString &options);
void close();
QSqlResult *createResult() const;
QStringList tables(QSql::TableType tableType) const;
QSqlRecord record(const QString &tableName) const;
QSqlIndex primaryIndex(const QString &tableName) const;
};
QT_END_NAMESPACE
QT_END_HEADER
#endif // ADODRIVER_H