2014-02-11 68 views
2

我在Visual Studio 2008中做了一些程序的setup packadge,所以在我的電腦上安裝後一切正常。在其他PC上,當你點擊數據庫連接選項時,它只會崩潰。Qt QList ASSERT在其他電腦上安裝後失敗

嗯,這裏的錯誤

我認爲它出現在該行

database = QSqlDatabase::addDatabase("QPSQL"); 

,因爲約DB apperas,一切信息的數據庫初始化部分似乎做工精細,直到這條線。

這裏是全功能

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(如果這可能是問題的原因)。

這個問題的原因是什麼?我怎麼能解決這個問題? 順便說一句,我用Qt 4.7.4

UPD: 好了,問題解決了!我忘了添加sqldrivers文件夾!當然,我添加了所有必要的.dlls,但由於某種原因,程序僅在此文件夾中查看它。希望對某人有幫助。 順便說一下DependencyWalker顯示沒有工作的版本沒有錯(沒有sqldrivers文件夾)。

+0

Dependency Walker沒有看到我認爲的運行時間的東西。 Process Explorer是此工具(在其他情況下,在任務管理器不會削減它的情況下也很有用)。 – hyde

回答

4

我的猜測是,問題就出在這裏(A,調試器會告訴你更多):

QStringList sdrivers = QSqlDatabase::drivers(); 
//output all available drivers 
QString driver = sdrivers[0]; 

您正在訪問sdrivers [0]而未檢查sdrivers是否至少包含一個元素。 我假設你沒有正確部署Qt SQL插件,因此在其他計算機上找不到任何Qt SQL插件。所以修正上面的代碼(用if (!sdrivers.isEmpty())deploy the plugins來保護它)。

+0

是啊插件部署的問題,已經檢查完成!不過,謝謝 – DanilGholtsman

1

問題更可能是這一行:QString driver = sdrivers [0]; 我猜你忘了提供sql-plugin文件夾? %YOUR-APP-PATH%/插件/ qpsql.dll

嘗試增加:

if(sdrivers.size() > 0) 
    QString driver = sdrivers[0];