Russian Qt Forum
Ноябрь 24, 2024, 06:07 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate.  (Прочитано 26894 раз)
andrew_121
Гость
« : Май 25, 2008, 13:34 »

День добрый.
Ситуация следующая:

Создаю таблицу следующим запросом:
CREATE TABLE Prihod (GroupId INT, TovarId INT, Date QDate, Name QString, Count INT, Tsena DOUBLE)

Но при запросе:
SELECT Date, Name, Count, Tsena FROM Prihod WHERE Date < '1.6.2008'

Результат не тот что нужен. Похоже что Date возвращается не как QDate.

Подскажите в чем проблема, как исправить ?

Заранее спасибо.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Май 25, 2008, 14:03 »

В Асистенте написано, что поумолчанию Qt'я возвращает строку. Ты сам должен приводить к нужному типу.
Записан

Юра.
andrew_121
Гость
« Ответ #2 : Май 25, 2008, 14:44 »

Подскажите плиз, как ?

SELECT Date, Name, Count, Tsena FROM Sklad WHERE Date < '1.6.2008'

Т.е. после запроса, мне нужно приводить Date в QDate, и на основании этого, принимать решение: Подходит - Не подходит ?

А в запросе этого некак нельзя сделать ?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Май 25, 2008, 14:56 »

читай Асистент: Навигация по результирующей выборке
Записан

Юра.
andrew_121
Гость
« Ответ #4 : Май 25, 2008, 16:08 »


Прочитал.
Нечего нового не узнал.
В чем подвох ?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Май 25, 2008, 16:17 »

Ну это просто капец какой-то, там черным по белому написано:
Цитировать
Функция QSqlQuery::value() возвращает значение типа QVariant, который может хранить значения различных типов C++ и ядра Qt, такие как int, QString и QByteArray. Различные типы значений базы данных автоматически приводятся к ближайшему эквиваленту в Qt. В предыдущем примере кода мы вызывали QVariant::toString() и QVariant::toInt(), чтобы конвертировать возвращенное значение в QString и int соответственно.
Записан

Юра.
andrew_121
Гость
« Ответ #6 : Май 25, 2008, 16:23 »

Ну это просто капец какой-то, там черным по белому написано:
Цитировать
Функция QSqlQuery::value() возвращает значение типа QVariant, который может хранить значения различных типов C++ и ядра Qt, такие как int, QString и QByteArray. Различные типы значений базы данных автоматически приводятся к ближайшему эквиваленту в Qt. В предыдущем примере кода мы вызывали QVariant::toString() и QVariant::toInt(), чтобы конвертировать возвращенное значение в QString и int соответственно.

Ну ешкин кот.
Вопрос в том: Можно ли SQL запросом заставить правильно понимать QDate ?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #7 : Май 25, 2008, 16:29 »

"SQLite doesn't have a type-system like other databases, so Qt will interpret fields as strings."
Записан

Юра.
BRE
Гость
« Ответ #8 : Май 25, 2008, 16:48 »

Ну ешкин кот.
Вопрос в том: Можно ли SQL запросом заставить правильно понимать QDate ?
Можно.
Вопрос в том как ты формируешь строку запроса?

QSqlQuery q( "SELECT date, number FROM table WHERE date < \'" + date.toString() + "\'" );

или

QSqlQuery q;
q.prepare( "SELECT date, number FROM table WHERE date < :date" );
q.bindValue( ":date", date );

или как???
Записан
Вячеслав
Гость
« Ответ #9 : Май 25, 2008, 17:10 »

возьми нормальный сервер и не компостируй себе мозг ..... sqLite не даром так назван .....
Щаз альтернатив - много ... навскидку мускул и птиц (firebird) у второго вообще прозрачно - хош embed вариант ,хош нормальный  клиент с нормальным сервером (а embed позволяет и к нормальному сервку цепляться) + возможность  писать хранимки и тригера ....
Вообщем -"мадам, Вам шашечки или ехать?" (c) не помню Подмигивающий
Записан
andrew_121
Гость
« Ответ #10 : Май 25, 2008, 17:21 »

Ну ешкин кот.
Вопрос в том: Можно ли SQL запросом заставить правильно понимать QDate ?
Можно.
Вопрос в том как ты формируешь строку запроса?

QSqlQuery q( "SELECT date, number FROM table WHERE date < \'" + date.toString() + "\'" );

или

QSqlQuery q;
q.prepare( "SELECT date, number FROM table WHERE date < :date" );
q.bindValue( ":date", date );

или как???


Первый вариант.
Записан
BRE
Гость
« Ответ #11 : Май 25, 2008, 17:23 »

Ну ешкин кот.
Вопрос в том: Можно ли SQL запросом заставить правильно понимать QDate ?
Можно.
Вопрос в том как ты формируешь строку запроса?

QSqlQuery q( "SELECT date, number FROM table WHERE date < \'" + date.toString() + "\'" );

или

QSqlQuery q;
q.prepare( "SELECT date, number FROM table WHERE date < :date" );
q.bindValue( ":date", date );

или как???


Первый вариант.
А откуда знаешь, что дата храниться как день.месяц.год, а не год.месяц.день например?
Записан
andrew_121
Гость
« Ответ #12 : Май 25, 2008, 17:28 »

возьми нормальный сервер и не компостируй себе мозг ..... sqLite не даром так назван .....
Щаз альтернатив - много ... навскидку мускул и птиц (firebird) у второго вообще прозрачно - хош embed вариант ,хош нормальный  клиент с нормальным сервером (а embed позволяет и к нормальному сервку цепляться) + возможность  писать хранимки и тригера ....
Вообщем -"мадам, Вам шашечки или ехать?" (c) не помню Подмигивающий

Я с базами, месяц как знаком...
И чем база от базы отличается, не знаю !!!

Можно ссылочки на рекомендуемые Вами базы, и на доки тож...

Спасибо.
Записан
andrew_121
Гость
« Ответ #13 : Май 25, 2008, 17:32 »

Ну ешкин кот.
Вопрос в том: Можно ли SQL запросом заставить правильно понимать QDate ?
Можно.
Вопрос в том как ты формируешь строку запроса?

QSqlQuery q( "SELECT date, number FROM table WHERE date < \'" + date.toString() + "\'" );

или

QSqlQuery q;
q.prepare( "SELECT date, number FROM table WHERE date < :date" );
q.bindValue( ":date", date );

или как???


Первый вариант.
А откуда знаешь, что дата храниться как день.месяц.год, а не год.месяц.день например?

Ну как они расположены в базе на самом деле - незнаю!
Но выводятся как - день.месяц.год.
Записан
BRE
Гость
« Ответ #14 : Май 25, 2008, 17:34 »

Ну как они расположены в базе на самом деле - незнаю!
Но выводятся как - день.месяц.год.
Попробуй второй вариант...
Драйвер сам переведет дату в необходимый формат.
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.056 секунд. Запросов: 22.