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
('%'
) 时出现问题,这将导致以下:
char
('%'
) 将被转换为一个整数(它在 ASCII 中的表示),为了执行加法,请查看 this。
- 强制转换 (
37
) 产生的整数将被添加到 char*
C 风格的字符串中,这将使您进入尚未初始化的内存(可能是其他 C-只读数据部分中的样式字符串)。
- 之后
QString
将来自上面产生的邪恶指针的数据(直到它找到 '[=20=]'
字符)添加到行编辑中的字符串,导致 QString
你显然不是瞄准的。 . .
总而言之,您应该将 setFilter
调用替换为如下内容:
mModelContacts->setFilter(QString("contacts_firstName LIKE '%")+mUi->searchContactsLine->text()+QString("%'"));
我正在尝试访问 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
('%'
) 时出现问题,这将导致以下:
char
('%'
) 将被转换为一个整数(它在 ASCII 中的表示),为了执行加法,请查看 this。- 强制转换 (
37
) 产生的整数将被添加到char*
C 风格的字符串中,这将使您进入尚未初始化的内存(可能是其他 C-只读数据部分中的样式字符串)。 - 之后
QString
将来自上面产生的邪恶指针的数据(直到它找到'[=20=]'
字符)添加到行编辑中的字符串,导致QString
你显然不是瞄准的。 . .
总而言之,您应该将 setFilter
调用替换为如下内容:
mModelContacts->setFilter(QString("contacts_firstName LIKE '%")+mUi->searchContactsLine->text()+QString("%'"));