QSqlTableModel过滤器没有结果

时间:2016-06-24 10:57:51

标签: c++ mysql qt qsqltablemodel

我正在尝试在qt c ++中访问mysql数据库。

我有不同的表格,希望在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);

}

ID过滤器(案例0)正常工作。但其他一切(名字,姓氏等)却没有。我刚拿到一张空桌子。所以我可以看到列名(因此我认为我的sql语法是正确的)但是没有条目,无论我输入什么。

我的源代码中有错误吗?或者我怎样才能让它发挥作用?

1 个答案:

答案 0 :(得分:1)

SELECT * FROM INFORMATION_SCHEMA.EVENTS C风格字符串(char*)添加到"contacts_firstName LIKE "char)时出现问题,这将导致以下情况:

  1. '%'char)将被转换为整数(以ASCII表示),为了执行添加,请查看this
  2. 由演员('%')产生的整数将添加到37 C风格的字符串中,这将使您进入尚未初始化的内存(可能是其他C-您在只读数据部分中使用的样式字符串。)
  3. 之后char*将上面生成的邪恶指针(直到找到QString字符)的数据添加到行编辑中的字符串,从而产生'\0'显然不是针对的。 。
  4. 总之,您应该使用以下内容替换QString来电:

    setFilter