2015-04-30 43 views
0

當單擊搜索按鈕時,它會像這樣顯示錶中的第一條記錄;QSqlQuery中的next()返回表中的最後一條記錄

void EditEntry::on_search_button_clicked() { 
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 
    db.setDatabaseName("database.db"); 
    bool ok = db.open(); 
    if (ok) { 

     QSqlQuery query1("SELECT * FROM table_name WHERE last_name LIKE '%Nana%'"); 
     if (query1.first()) { 
      //show first record in the table where last name like Nana 
     } 
} 

我想通過點擊這樣的按鈕使查詢移動到表中的下一個記錄;

void EditEntry::on_next_button_clicked() { 
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 
    db.setDatabaseName("database.db"); 
    bool ok = db.open(); 
    if (ok) { 
     QSqlQuery query1("SELECT * FROM table_name WHERE last_name LIKE '%Nana%'"); 
     if (query1.isActive()) { 
      while (query1.next()) { 
       //show the next record in the table with last name like Nana 
      } 
} 

並顯示出像「娜娜」這樣的名稱以前的記錄;

void EditEntry::on_previous_button_clicked() { 
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 
    db.setDatabaseName("database.db"); 
    bool ok = db.open(); 
    if (ok) { 
     QSqlQuery query1("SELECT * FROM table_name WHERE last_name LIKE '%Nana%'"); 
     if (query1.isActive()) { 
      while (query1.previous()) { 
       //show previous record in the table where last name like Nana 
      } 
} 

on_search_button_clicked()作品以及通過展示與像「娜娜」姓氏的第一個記錄。 on_next_button_clicked()顯示錶中最後一個記錄,名稱爲'Nana',而不是第一個記錄之後的下一個記錄(該表有3個記錄,姓氏像'Nana')。 on_previous_button_clicked()按鈕根本不起作用,即使我希望它顯示前一個記錄中的名字,例如'Nana',它也不會顯示任何內容。我如何獲得這些按鈕以符合我的期望?

P.S。;我想要的是,每當點擊on_next_button_clicked()時,它應該繼續顯示下一條記錄,直到它到達表中的最後一條記錄。

回答

1

next()只能對QSqlQuery一個實例,但在on_search_button_clicked()on_next_button_clicked()工作進行到底,並on_previous_button_clicked()你扔掉的QSqlQuery實例(以及QSqlDatabase)。

我想你可以在EditEntry類存儲一個偏移變量int offset_ = 0然後做這樣的事情

void EditEntry::on_next_button_clicked() { 
    offset_ += 1; 

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 
    db.setDatabaseName("database.db"); 
    bool ok = db.open(); 
    if (ok) { 
     QString sql = QString("SELECT * FROM table_name WHERE last_name LIKE '%Nana%' LIMIT ") + QString::number(offset_) + QString(", 1"); 
     QSqlQuery query1(sql); 
     if (query1.isActive()) { 
      while (query1.first()) { 
       //show the next record in the table with last name like Nana 
      } 
     } 
    } 
} 

,另一種:

void EditEntry::on_previous_button_clicked() { 
    offset_ -= 1; 

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 
    db.setDatabaseName("database.db"); 
    bool ok = db.open(); 
    if (ok) { 
     QString sql = QString("SELECT * FROM table_name WHERE last_name LIKE '%Nana%' LIMIT ") + QString::number(offset_) + QString(", 1"); 
     QSqlQuery query1(sql); 
     if (query1.isActive()) { 
      while (query1.first()) { 
       //show the next record in the table with last name like Nana 
      } 
     } 
    } 
} 
+0

這一次,它不會做任何事情在所有。如果我在類頭文件中存儲偏移量變量,我會從編譯器中得到一個錯誤,告訴我將它變爲靜態的和所有這些。所以我將偏移量存儲在構造函數中。但正如我所說,它不起作用。行! –

+0

行!得到它的工作,但我想要的是,每當按鈕被點擊它應該繼續顯示下一個記錄,直到它到達表中的最後一個記錄? 'on_next_button_clicked()'。這只是讓它做一次。對不起,我將它添加到我的問題中 –

+0

而且你正在談論拋棄'QSqlQuery'和'QSqlDatabase'的實例。你能否詳細說明一下,我迷路了! –

相關問題