QSqlQuery在dll模块中抛出异常

时间:2015-09-11 11:36:37

标签: c++ qt qtsql

我的解决方案中有3个不同的项目

  • Interops(LIB)

  • XModule(DLL,包含QWidget){使用Interops}

  • 主要应用程序(EXE){使用Interops,XModule}

我在Interops项目中创建了一个logger类作为“LogManager”,它连接到MySQL以定期将日志写入数据库。

在“主应用程序”中使用“LogManager”类可以,但在XModule(也在“主应用程序”中使用)中,在QSqlQuery执行期间抛出奇怪的异常并且它是不可调试的。我认为动态链接的DLL无法加载Qt的SQL驱动程序,但我不知道如何修复。

BTW使用SQL Qt模块的所有项目。感谢名单。

两个示例函数:在MainApp中成功但在XModule中没有成功。在QString val = q.value(0).toString();函数中的getLastDbLogDate()行处投掷。此外,我将LogManager实例的指针传递到MainApp中实例化的任何地方。

bool LogManager::connect()
{
    if(!QSqlDatabase::contains(LOG_DB_NAME))
    {
        QSqlDatabase db = QSqlDatabase::addDatabase(mDriver, LOG_DB_NAME);
        if(!db.isValid())
            return false;

        db.setHostName(mHost);
        db.setPort(mPort);
        db.setDatabaseName(mDb);
        db.setUserName(mUser);
        db.setPassword(mPw);

        return db.open();
    }

    return true;
}

QDateTime LogManager::getLastDbLogDate()
{
    if(!connect())
        QDateTime();

    QSqlQuery q("SELECT MAX(logTime) FROM tbl_logs", QSqlDatabase::database(LOG_DB_NAME));
    while (q.next())
    {
        QString val = q.value(0).toString();
        return QDateTime::fromString(val, LOG_DATE_SQL_FORMAT);
    }

    return QDateTime();
}

像到处打电话一样:

mLogMgr->getLastDbLogDate();

0 个答案:

没有答案