Member 13740197 Ответов: 1

Как получить данные между двумя датами из базы данных sqlite в QT creator


У меня есть проблема при извлечении данных из sqlitedb.Мне нужно получить данные между двумя датами.Но я не получаю данных.

запрос.подготовить("выберите PassID,начальная дата,конечная дата,Интайм,OUTTIME от ISSUEPASS где начальная дата между ? И что же ?");
запрос.addBindValue(дата2);
запрос.addBindValue(дата3);

Здесь date2 , date3 и STARTDATE являются объектами QDate

пока(запрос.далее)
{
qDebug() << query.value(0).toString().toAscii().data();
qDebug() << query.value(1).toString().toAscii().data();
qDebug() << query.value(2).toString().toAscii().data();
qDebug() << query.value(3).toString().toAscii().data();
qDebug() << query.value(4).toString().toAscii().data();
}

Здесь ничего не печатается,не могли бы вы, пожалуйста, предоставить решение.

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

запрос.подготовить("выберите PassID,начальная дата,конечная дата,Интайм,OUTTIME от ISSUEPASS где начальная дата между ? И что же ?");
запрос.addBindValue(дата2);
запрос.addBindValue(дата3);

пока(запрос.далее)
{
qDebug() << query.value(0).toString().toAscii().data();
qDebug() << query.value(1).toString().toAscii().data();
qDebug() << query.value(2).toString().toAscii().data();
qDebug() << query.value(3).toString().toAscii().data();
qDebug() << query.value(4).toString().toAscii().data();
}

1 Ответов

Рейтинг:
7

Jochen Arndt

SQLite обрабатывает даты и время по-другому, чем другие базы данных. Он не имеет определенных классов хранения, но хранит их как TEXT, REAL, или INTEGER (видеть Типы Данных В SQLite Версии 3[^]).

Вы должны передать данные в соответствии с используемым классом хранения и/или использовать один из следующих классов хранения. Язык Запросов SQLite: Функции Даты И Времени[^].

Непроверенный пример:

query.prepare("SELECT PassID,STARTDATE,ENDDATE,INTIME,OUTTIME FROM ISSUEPASS WHERE date(STARTDATE) BETWEEN ? AND ?");
query.addBindValue(date2.toString(Qt::ISODate));
query.addBindValue(date3.toString(Qt::ISODate));


Member 13740197

Это не работает.При выполнении запроса он вводится, но не входит в
пока(запрос.далее).Не могли бы вы сказать мне, пожалуйста, решение.

Jochen Arndt

Итак, вы вызвали query.exec() (потому что он не показан в вашем фрагменте кода)?

Если это так и query.next() имеет значение false, то соответствующий набор записей отсутствует.