我在Visual Studio 2008中创建了一些程序包。所以安装后我的电脑上运行良好。在其他PC上,当您只需单击数据库连接选项时,它就会崩溃。
嗯,这是错误
我认为它出现在这一行
database = QSqlDatabase::addDatabase("QPSQL");
在数据库初始化部分,因为有关DB上传的消息,所有内容在此行之前似乎都能正常工作。
这是完整的功能
void DatabaseManagement::initDatabase(){
QMessageBox::information(this, "error tracking step 5", " DB ADDED");
database = QSqlDatabase::addDatabase("QPSQL");
QStringList sdrivers = QSqlDatabase::drivers();
//output all avalible drivers
QString driver = sdrivers[0];
for(int i = 0; i< sdrivers.size();i++)
QMessageBox::information(this, "Driver info", sdrivers[i]);
}
这里的 database
变量是DatabaseManagement
类的全局变量。
同样在这个类中,我得到了getDatabase
函数,它返回database
变量,我在其他类中使用它,比如mainClass
(如果这可能是问题的原因)。< / p>
造成这个问题的原因是什么?我怎么能解决这个问题?
顺便说一下,我使用Qt 4.7.4
UPD:
好吧,问题解决了!我忘了添加sqldrivers文件夹!当然我添加了所有必要的.dlls
但由于某种原因,程序只在此文件夹中看到它。希望它对某些人有用。
顺便说一句 DependencyWalker 显示没有工作版本没有错误(没有sqldrivers
文件夹)。
答案 0 :(得分:4)
我的猜测是问题出在这里(调试器会告诉你更多):
QStringList sdrivers = QSqlDatabase::drivers();
//output all available drivers
QString driver = sdrivers[0];
您正在访问sdrivers [0]而未检查sdrivers是否包含至少一个元素。
我假设你没有正确部署Qt SQL插件,因此在另一台计算机上找不到。因此,请修复上述代码(使用if (!sdrivers.isEmpty())
)和deploy the plugins保护它。
答案 1 :(得分:1)
问题更可能是这一行:QString driver = sdrivers [0]; 我猜你忘了提供sql-plugin文件夹? %YOUR-APP-PATH%/插件/ qpsql.dll
尝试添加:
if(sdrivers.size() > 0)
QString driver = sdrivers[0];