Member 13740197 Ответов: 1

Запрос Qsql чтобы проверить, является ли целое число, присутствует или нет в Qt


число является целым числом, и PassID тоже целое число
qry по.подготовить("выбрать * из ISSUEPASS где PassID =кол-во");
Мне нужно выбрать строку, в которой совпадает PassID
Iam получает ошибку "невозможно извлечь строку без запроса"

Что я уже пробовал:

qry по.подготовить("выбрать * из ISSUEPASS где PassID =кол-во");

1 Ответов

Рейтинг:
12

Jochen Arndt

Вы должны создать передачу строки запроса num в качестве параметра функции форматирования строк. Потому что QSqlQuery::prepare() | Qt SQL 5.10[^] ожидает, что QString аргумент, это может быть сделано в одном утверждении:

qry.prepare(QString("SELECT * FROM ISSUEPASS WHERE PassID =%1").arg(num));

Но команды SQL никогда не должны использовать созданные текстовые строки, чтобы избежать SQL-инъекций (здесь это было бы нормально, потому что нет текстового параметра). Предпочтительным решением является использование параметризованных запросов:
qry.prepare("SELECT * FROM ISSUEPASS WHERE PassID =:passId");
qry.bindValue(":passId", num);


Member 13740197

Он работает нормально,но у меня возникла проблема, когда я обновляю параметр в той же строке.

query.prepare("обновить ISSUEPASS SET INTIME =? Где PassID = :passId");
запрос.addBindValue(Интайм);
query.bindValue(":passId", num);
Здесь intime-это переменная QString,но я получаю ошибку Sql "несоответствие количества параметров"
Не могли бы вы сказать мне, пожалуйста, решение.

Jochen Arndt

Вы смешиваете два метода привязки значений:
названы обязательными и позиционные параметры.

Это не поддерживается. Используйте один метод:

query.prepare("UPDATE ISSUEPASS SET INTIME =:intime WHERE PassID = :passId");
запрос.bindValue(":Интайм", Деливери, Интайм);
query.bindValue(":passId", num);

ОПЕРАЦИОННАЯ

query.prepare("обновить ISSUEPASS SET INTIME = ? Где PassID = ?);
запрос.addBindValue(Интайм);
запрос.addBindValue(чис);

Member 13740197

Большое вам спасибо за ваш ответ