2016-06-24 39 views
0

我試圖訪問MySQL在QT下的數據庫++。與QSqlTableModel篩選沒有結果

我有不同的表,並希望他們的輸出上QTableView

我使用QSqlTableModel,偉大的工程,但只要我想篩選我遇到問題的結果..

這裏是我的源代碼的主要部分:

mModelContacts->setTable("contacts"); 
mModelContacts->select(); 
mUi->tableContacts->setModel(mModelContacts); 

void MainWindow::on_submitContactsButton_clicked() 
{ 

switch(mUi->comboBoxContacts->currentIndex()) 
{ 
    case 0: 
     mModelContacts->setFilter("contacts_id = "+mUi->searchContactsLine->text()); 
     break; 
    case 1: 
     mModelContacts->setFilter("contacts_firstName LIKE "+'%'+mUi->searchContactsLine->text()+'%'); 
     break; 
    case 2: 
     mModelContacts->setFilter("contacts_lastName LIKE "+'%'+mUi->searchContactsLine->text()+'%'); 
     break; 
    case 3: 
     mModelContacts->setFilter("contacts_city LIKE "+'%'+mUi->searchContactsLine->text()+'%'); 
     break; 
    case 4: 
     mModelContacts->setFilter("contacts_phoneNumber LIKE "+'%'+mUi->searchContactsLine->text()+'%'); 
     break; 
} 

mModelContacts->select(); 
mUi->tableContacts->setModel(mModelContacts); 

}

1D濾波器(情況0)工作正常。但其他一切(名字,姓氏等)都沒有。我只是得到一個空表顯示。所以,我可以看到列名(因此,我認爲我的SQL語法是正確的),但沒有進入,不管是什麼我型英寸

有沒有在我的源代碼的錯誤呢?或者我怎樣才能使這個工作?

+0

嘗試檢查你的查詢字符串qDebug(),例如qDebug()<< QString的( 「contacts_firstName LIKE」 + '%' + mUi-> searchContactsLine->文本()+ '%');並且張貼您的結果 – CppChris

+1

@ChrisG謝謝你的提示:) –

回答

1

有一個與你添加char* C風格的字符串("contacts_firstName LIKE ")所涉及的char'%')的問題,這將導致如下:

  1. char'%')將被強制轉換爲的整數(其在ASCII表示),爲了執行加法,看看this
  2. 整數源於投(37)將被加入到char* C風格的字符串,這將讓你到內存中,你有沒有初始化(也許另一種則是在只讀您有C風格的字符串數據部分)。
  3. 之後QString將來自上面導致的惡意指針的數據(直到它找到一個'\0'字符)添加到行編輯中的字符串中,導致您顯然不想瞄準的QString。 。 。

總之,你應該更換您的通話setFilter像這樣的東西:

mModelContacts->setFilter(QString("contacts_firstName LIKE '%")+mUi->searchContactsLine->text()+QString("%'")); 
+0

你解決它!非常感謝:)你做了我的一天! 似乎我仍然需要學習很多.. –