QSqlTableModel filter нет результатов

Я пытаюсь получить доступ к базе данных MySQL в QT C ++.

У меня есть разные таблицы и я хочу вывести их на 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);

}

Идентификационный фильтр (случай 0) работает нормально. Но все остальное (имя, фамилия и т. Д.) Нет. Я только что показал пустую таблицу. Таким образом, я могу видеть имена столбцов (поэтому я думаю, что мой синтаксис sql правильный), но там нет записи, независимо от того, что я ввожу.

Есть ли ошибка в моем исходном коде? Или как я могу заставить это работать?

0

Решение

Существует проблема с добавлением char* Строка в стиле C ("contacts_firstName LIKE ") к char ('%'), это приведет к следующему:

  1. char('%') будет приведен к целому числу (его представление в ASCII), чтобы выполнить сложение, взгляните на этот.
  2. целое число, полученное в результате приведения (37) будет добавлен в char* Строка в стиле C, она перенесет вас в память, которую вы не инициализировали (возможно, в другие строки в стиле C, которые есть в разделе данных только для чтения).
  3. после этого QString добавляет данные из злого указателя, полученного выше (пока не найдет '\0' символ) к строке, которая находится в вашей строке редактирования, в результате чего QString что вы явно не стремитесь. , ,

в итоге вы должны заменить свой setFilter звонки с чем-то вроде этого:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]