Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > QDate


Автор: dix75 11.5.2012, 22:58
Доброй ночи!

Не совсем понятно каким образом можно добавить день в базу данных?

Код

CREATE TABLE Days (date_id DATE PRIMARY KEY NOT NULL UNIQUE, name TEXT,    description TEXT);


Код

QSqlQuery query;
QDate date = QDate::currentDate();
query.exec(QString("INSERT INTO Days(date_id, name) VALUES('%1', 'data');").arg(date));

так не компилиться

Код

QSqlQuery query;
QDate date = QDate::currentDate();
query.exec(QString("INSERT INTO Days(date_id, name) VALUES('%1', 'data');").arg(date.toString()));

так в виде строки зависит наверное от локали. Добавляется NULL

Код

QSqlQuery query;
QDate date = QDate::currentDate();
query.exec(QString("INSERT INTO Days(date_id, name) VALUES('%1', 'data');").arg(date.toJulianDay()));

Так отпадает надобновсть в поле DATE в базе данных.

Не пойку как?
Вопрос  решен

Код

QDate date = QDate::currentDate();
query.prepare("INSERT INTO Days(date_id, name) VALUES(?, 'data');");
query.addBindValue(date);
query.exec();

Автор: Amp 11.5.2012, 23:09
У QSqlQuery есть плэйсхолдеры и bindValue. И еще, у тебя же не sqlite?

Автор: dix75 11.5.2012, 23:10
Цитата(Amp @  11.5.2012,  23:09 Найти цитируемый пост)
И еще, у тебя же не sqlite?

Чем плох Sqlite?

Автор: borisbn 12.5.2012, 08:23
Кстати, господа, хочу поделиться граблями, на которые недавно наступил: если в запросе один плейсхолдер участвует дважды (вернее - более одного раза) например:
Код
SELECT * from table where start_date = :DATE_PARAM and end_date = :DATE_PARAM

, то
Код
bindValue( ":DATE_PARAM", QDate::currentDate() )

не работает. До версии 4.8.0 это был баг, а в 4.8.0 они это удосужились описать. Теперь это - фича)))

Автор: Amp 12.5.2012, 11:51
Цитата(dix75 @  11.5.2012,  23:10 Найти цитируемый пост)
Чем плох Sqlite? 

Там нет типа для хранения даты/времени. Либо текстом, либо числами.

Автор: borisbn 12.5.2012, 11:53
Цитата(Amp @  12.5.2012,  11:51 Найти цитируемый пост)
Там нет типа для хранения даты/времени. Либо текстом, либо числами. 

как нет??? а это
user posted image

Автор: Amp 12.5.2012, 12:30
Цитата(borisbn @  12.5.2012,  11:53 Найти цитируемый пост)
как нет??? а это

http://sqlite.org/datatype3.html

Автор: borisbn 12.5.2012, 16:50
Amp, то, что во "внутренностях" нет типа для даты не значит же, что я не могу его использовать, если API позволяет.
Вот табличка по той же ссылке
user posted image
вот функции для записи даты/времени - http://sqlite.org/lang_datefunc.html

Автор: Amp 13.5.2012, 18:23
borisbn, понятно, что их можно использовать, просто приходится совершать некоторые дополнительные телодвижения при составлении запросов. Не помню только разруливает ли qt-драйвер к sqlite это все или нет.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)