Я пытаюсь получить доступ к базе данных 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 правильный), но там нет записи, независимо от того, что я ввожу.
Есть ли ошибка в моем исходном коде? Или как я могу заставить это работать?
Существует проблема с добавлением char*
Строка в стиле C ("contacts_firstName LIKE "
) к char
('%'
), это приведет к следующему:
char
('%'
) будет приведен к целому числу (его представление в ASCII), чтобы выполнить сложение, взгляните на этот.37
) будет добавлен в char*
Строка в стиле C, она перенесет вас в память, которую вы не инициализировали (возможно, в другие строки в стиле C, которые есть в разделе данных только для чтения).QString
добавляет данные из злого указателя, полученного выше (пока не найдет '\0'
символ) к строке, которая находится в вашей строке редактирования, в результате чего QString
что вы явно не стремитесь. , ,в итоге вы должны заменить свой setFilter
звонки с чем-то вроде этого:
mModelContacts->setFilter(QString("contacts_firstName LIKE '%")+mUi->searchContactsLine->text()+QString("%'"));
Других решений пока нет …