我正在尝试在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语法是正确的)但是没有条目,无论我输入什么。
我的源代码中有错误吗?或者我怎样才能让它发挥作用?
答案 0 :(得分:1)
将SELECT * FROM INFORMATION_SCHEMA.EVENTS
C风格字符串(char*
)添加到"contacts_firstName LIKE "
(char
)时出现问题,这将导致以下情况:
'%'
(char
)将被转换为整数(以ASCII表示),为了执行添加,请查看this。'%'
)产生的整数将添加到37
C风格的字符串中,这将使您进入尚未初始化的内存(可能是其他C-您在只读数据部分中使用的样式字符串。)char*
将上面生成的邪恶指针(直到找到QString
字符)的数据添加到行编辑中的字符串,从而产生'\0'
显然不是针对的。 。 总之,您应该使用以下内容替换QString
来电:
setFilter