Как реализовать поиск в базе данных SQLITE через QT query?
Язык c++. Есть список компаний, необходимо реализовать поиск в бд SQLITE.
Метод обновления списка компаний (ListWidget) через цикл прохода по бд, он работает нормально.
ui->listWidget->clear();
DataBase::openDataBase();
QSqlQuery query("SELECT * FROM clients");
QSqlRecord rec = query.record();
while (query.next()){
companyName = query.value(rec.indexOf("companyName")).toString();
ui->listWidget->addItem(companyName);
}
Добавил LineEdit, и по изменению LineEdit текст является объектом для поиска
DataBase::openDataBase();
if (arg1 == "") {
listWidgetUpdate(); //Если пустое поле
} else{
ui->listWidget->clear();
QSqlQuery query("SELECT * FROM clients WHERE companyName LIKE '%:search%';");
query.bindValue(":search", arg1);
QSqlRecord rec = query.record();
while (query.next()){
companyName = query.value(rec.indexOf("companyName")).toString();
ui->listWidget->addItem(companyName);
}
}
Если поле пустое - выводятся компании из бд, но стоит ввести что угодно иное - ListWidget пустует. Думаю, ошибка в оформлении query запроса, но понять что-то не могу, подскажите знатоки)
Ответы (1 шт):
Вообщем, ошибку выдавало " Parameter count mismatch ", причем выдавало её именно при поисковом запросе с %. Тут ответа не дождался, сделал костыль - новую переменную типа QString srch , и немного отредактировал запрос. Теперь всё заработало
QString srch = "%" + arg1 + "%"; //Новая переменная
if (arg1 == "") {
listWidgetUpdate();
} else{
ui->listWidget->clear();
QSqlQuery query;
query.prepare("SELECT * FROM clients WHERE companyName LIKE :search");
query.bindValue(":search", srch);
if(!query.exec()){
qDebug() << query.lastError().text();
}
QSqlRecord rec = query.record();
while (query.next()){
companyName = query.value(rec.indexOf("companyName")).toString();
ui->listWidget->addItem(companyName);
}
}