gpt4 book ai didi

c++ - QSqlTableModel 过滤器没有结果

转载 作者:行者123 更新时间:2023-11-28 05:37:06 25 4
gpt4 key购买 nike

我正在尝试在 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)工作正常。但其他所有内容(名字、姓氏等)都没有。我刚看到一张空 table 。所以我可以看到列名(因此我认为我的 sql 语法是正确的)但是没有条目,无论我输入什么。

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

最佳答案

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("%'"));

关于c++ - QSqlTableModel 过滤器没有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38011780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com