Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Неправильный запрос к SQLite
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Разработка баз данных
tumanovalex
Создана таблица в базе:
CREATE TABLE [Date] (
[dateid] INTEGER  NOT NULL PRIMARY KEY AUTOINCREMENT,
[date] Date  UNIQUE NOT NULL
)

В таблицу записаны данные (смотрел SQLite Admin)
dateid    date
1    15.10.2010
2    16.10.2010
3    19.10.2010
4    21.10.2010

Данные записывались из QDateEdit запросом:
query.prepare("INSERT INTO Date(date) VALUES(?)");
query.addBindValue(ui->dtAdd->date());
if(!query.exec()) {
   QMessageBox::warning(this, "Error", "Unable to insert date");
}

При записи данных из формы я проверяю, записана ли выбранная дата (в моем случае 21.10.2010) из QDateEdit в базу:
QSqlQuery query;
query.prepare("SELECT date FROM Date WHERE date = VALUES(?)");
query.addBindValue(ui->dtAdd->date());
if(!query.exec()) {
   qDebug() << query.lastError().text();
    return;
}

Получаю сообщение: "Parameter count mismatch".
Хотелось бы получить ответы на следующие вопросы:
1. Как можно посмотреть полный текст запроса (после addBindValue). Я поставил точку останова до if(!query.exec()), но выделить текст запроса не смог.
2. Почему мой запрос с проверкой даты выполняется неправильно и как правильно написать запрос, в котором в качестве параметра используется значение QDateEdit?
Не нашел возможности на форуме внедрить свой проект, разместил его на http://zalil.ru/29849040.
Litkevich Yuriy
Цитата(tumanovalex @ 25.10.2010, 0:59) *
1. Как можно посмотреть полный текст запроса (после addBindValue)
если СУБД сама поддерживает подстановку, то никак. Если не поддерживает, то поможет метод QString QSqlQuery::executedQuery () const

Цитата(tumanovalex @ 25.10.2010, 0:59) *
SELECT date FROM Date WHERE date = VALUES(?)
этого ключевого слова в SELECT'е быть не должно

Справка
tumanovalex
Спасибо за ответ. Передел:
      QString qr, dt;
      qr = "SELECT date FROM Date WHERE date = ";
      dt = ui->dtAdd->date().toString("yyyy-MM-dd");
      qr = qr + dt; //     if(!query.exec("SELECT date FROM Date WHERE date = '2010-10-25'")) {
     if(!query.exec(qr)) {
       QMessageBox::warning(this, "Error", "Date not is writed in the base");
       qDebug() << query.lastError();
       return;
     }
     query.first();
     qDebug() << query.next();
     qDebug() << query.value(0);

Получаю сообщение:
false
QSqlQuery::value: not positioned on a valid record
QVariant(, )
Прикрепляю новый вариант проекта
Litkevich Yuriy
Цитата(tumanovalex @ 25.10.2010, 10:35) *
yyyy-MM-dd
а дату в правильном формате указываешь?

И почему решил отказаться от подстановки значений? Заменил бы только VALUES(?), на ? и всё
tumanovalex
1. Так тоже не получилось:
      QSqlQuery query;
      query.prepare("SELECT date FROM Date WHERE date = ?");
      query.addBindValue(ui->dtAdd->date());
      if(!query.exec(qr)) {
       QMessageBox::warning(this, "Error", "Date not is writed in the base");
       qDebug() << query.lastError();
       return;
      }

получаю окно сообщения, а qDebug() выдает:
QSqlQuery::exec: empty query
QSqlError(-1, "", "")
2. Запрос SELECT date FROM Date WHERE date = '2010-10-21' проверял в SQLite Admin, запрос выполнился правильно.
ufna
добавь ' ' к ?, т.к. счас у тебя идет без апострофов запрос
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.