5

我在 Windows 7 ×64 上使用 Qt 5.0.0(个人编译 – MinGW x64)。我在配置中添加了 MySQL 支持,并且 MySQL 也安装在系统上。MySQL 库、标头和在应用程序中可见。

打开数据库时程序崩溃。我这样打开数据库:

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setDatabaseName("My DB name");
db.setUserName("root");
db.setPassword("My password");
db.setHostName("localhost");
db.setPort(3306);
try{
db.open(); // <=== Crashes without throwing an exception
}
catch(std::exception e)
{
    std::cout << e.what() << std::endl;
}

笔记:

qDebug() << QSqlDatabase::drivers();

印刷

("QMYSQL3", "QMYSQL", "QODBC3", "QODBC", "QSQLITE")

操作系统生成的问题签名如下所示:

Problem Event Name: APPCRASH
Application Name: CMS.exe
Application Version: 0.0.0.0
Application Timestamp: 51010cdd
Fault Module Name: Qt5Sql.dll
Fault Module Version: 5.0.0.0
Fault Module Timestamp: 50f6b734
Exception Code: c0000005
Exception Offset: 00000000000df950
OS Version: 6.1.7600.2.0.0.256.1
Locale ID: 1033
Additional Information 1: db69
Additional Information 2: db697f824a06df6631cf05ed1f197e16
Additional Information 3: 1d76
Additional Information 4: 1d7605bf295c1c2cfcbfc6bfcec7c569

我以这种方式使用 gendef 和 dlltool 生成 .a 文件:

gendef libmysql.dll
dlltool --input-def libmysql.def --dllname libmysql.dll --output-lib libmysql.a

Qt 配置为-qt-sql-mysql而不是-plugin-sql-mysql. (有什么区别?)

4

1 回答 1

1

由于您的程序在没有捕获异常的情况下崩溃(并且我注意到您已经编写为一个包罗万象的内容),我倾向于假设崩溃发生在 try 块之前。

尝试将 'db' 的声明及其属性设置包装在 try-catch 中(即使只是暂时的)。

于 2013-08-01T15:50:17.790 回答