0

我正在尝试在 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 语法是正确的)但是无论我输入什么都没有条目。

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

4

1 回答 1

1

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

  1. ( ) 将被转换为一个整数char'%'它在 ASCII 中的表示),为了执行加法,看看这个
  2. 由强制转换 ( ) 产生的整数37将被添加到char*C 样式字符串中,这将使您进入尚未初始化的内存(可能是您在只读数据部分中拥有的其他 C 样式字符串)。
  3. 之后,QString将上面生成的 evil 指针中的数据(直到找到一个'\0'字符)添加到您的行编辑中的字符串中,从而导致QString您显然不是针对的。. .

总之,你应该setFilter用这样的东西替换你的电话:

mModelContacts->setFilter(QString("contacts_firstName LIKE '%")+mUi->searchContactsLine->text()+QString("%'"));
于 2016-06-24T13:11:18.703 回答