QSqlTableModel 过滤器没有结果

QSqlTableModel filter no results

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

我有不同的 table 并希望将它们输出到 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)工作正常。但其他所有内容(名字、姓氏等)都没有。我只是得到一个空的 table 显示。所以我可以看到列名(因此我认为我的 sql 语法是正确的)但是没有条目,无论我输入什么。

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

char* C 风格字符串 ("contacts_firstName LIKE ") 添加到 char ('%') 时出现问题,这将导致以下:

  1. char('%') 将被转换为一个整数(它在 ASCII 中的表示),为了执行加法,请查看 this
  2. 强制转换 (37) 产生的整数将被添加到 char* C 风格的字符串中,这将使您进入尚未初始化的内存(可能是其他 C-只读数据部分中的样式字符串)。
  3. 之后 QString 将来自上面产生的邪恶指针的数据(直到它找到 '[=20=]' 字符)添加到行编辑中的字符串,导致 QString你显然不是瞄准的。 . .

总而言之,您应该将 setFilter 调用替换为如下内容:

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