Название: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: 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. Подскажите в чем проблема, как исправить ? Заранее спасибо. Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: lit-uriy от Май 25, 2008, 14:03 В Асистенте написано, что поумолчанию Qt'я возвращает строку. Ты сам должен приводить к нужному типу.
Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: andrew_121 от Май 25, 2008, 14:44 Подскажите плиз, как ?
SELECT Date, Name, Count, Tsena FROM Sklad WHERE Date < '1.6.2008' Т.е. после запроса, мне нужно приводить Date в QDate, и на основании этого, принимать решение: Подходит - Не подходит ? А в запросе этого некак нельзя сделать ? Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: lit-uriy от Май 25, 2008, 14:56 читай Асистент: Навигация по результирующей выборке (http://crossplatform.ru/documentation/qtdoc4.3/qtsql.php#navigating-the-result-set)
Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: andrew_121 от Май 25, 2008, 16:08 читай Асистент: Навигация по результирующей выборке (http://crossplatform.ru/documentation/qtdoc4.3/qtsql.php#navigating-the-result-set) Прочитал. Нечего нового не узнал. В чем подвох ? Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: lit-uriy от Май 25, 2008, 16:17 Ну это просто капец какой-то, там черным по белому написано:
Цитировать Функция QSqlQuery::value() возвращает значение типа QVariant, который может хранить значения различных типов C++ и ядра Qt, такие как int, QString и QByteArray. Различные типы значений базы данных автоматически приводятся к ближайшему эквиваленту в Qt. В предыдущем примере кода мы вызывали QVariant::toString() и QVariant::toInt(), чтобы конвертировать возвращенное значение в QString и int соответственно. Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: andrew_121 от Май 25, 2008, 16:23 Ну это просто капец какой-то, там черным по белому написано: Цитировать Функция QSqlQuery::value() возвращает значение типа QVariant, который может хранить значения различных типов C++ и ядра Qt, такие как int, QString и QByteArray. Различные типы значений базы данных автоматически приводятся к ближайшему эквиваленту в Qt. В предыдущем примере кода мы вызывали QVariant::toString() и QVariant::toInt(), чтобы конвертировать возвращенное значение в QString и int соответственно. Ну ешкин кот. Вопрос в том: Можно ли SQL запросом заставить правильно понимать QDate ? Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: lit-uriy от Май 25, 2008, 16:29 "SQLite doesn't have a type-system like other databases, so Qt will interpret fields as strings."
Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: BRE от Май 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 ); или как??? Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: Вячеслав от Май 25, 2008, 17:10 возьми нормальный сервер и не компостируй себе мозг ..... sqLite не даром так назван .....
Щаз альтернатив - много ... навскидку мускул и птиц (firebird) у второго вообще прозрачно - хош embed вариант ,хош нормальный клиент с нормальным сервером (а embed позволяет и к нормальному сервку цепляться) + возможность писать хранимки и тригера .... Вообщем -"мадам, Вам шашечки или ехать?" (c) не помню ;) Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: andrew_121 от Май 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 ); или как??? Первый вариант. Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: BRE от Май 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 ); или как??? Первый вариант. Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: andrew_121 от Май 25, 2008, 17:28 возьми нормальный сервер и не компостируй себе мозг ..... sqLite не даром так назван ..... Щаз альтернатив - много ... навскидку мускул и птиц (firebird) у второго вообще прозрачно - хош embed вариант ,хош нормальный клиент с нормальным сервером (а embed позволяет и к нормальному сервку цепляться) + возможность писать хранимки и тригера .... Вообщем -"мадам, Вам шашечки или ехать?" (c) не помню ;) Я с базами, месяц как знаком... И чем база от базы отличается, не знаю !!! Можно ссылочки на рекомендуемые Вами базы, и на доки тож... Спасибо. Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: andrew_121 от Май 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 ); или как??? Первый вариант. Ну как они расположены в базе на самом деле - незнаю! Но выводятся как - день.месяц.год. Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: BRE от Май 25, 2008, 17:34 Ну как они расположены в базе на самом деле - незнаю! Попробуй второй вариант...Но выводятся как - день.месяц.год. Драйвер сам переведет дату в необходимый формат. Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: andrew_121 от Май 25, 2008, 17:58 Ну как они расположены в базе на самом деле - незнаю! Попробуй второй вариант...Но выводятся как - день.месяц.год. Драйвер сам переведет дату в необходимый формат. SELECT Date, Name FROM Prihod WHERE Date < :Date Сообщает: Parameter count mismatch Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: BRE от Май 25, 2008, 18:03 Попробовал: Код покажи.SELECT Date, Name FROM Prihod WHERE Date < :Date Сообщает: Parameter count mismatch Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: lit-uriy от Май 25, 2008, 18:06 Цитировать Ну как они расположены в базе на самом деле - незнаю! Посмотреть можно с помощью %QTDIR%\demos\sqlbrowser , там же можно с запросами поэксперементировать.Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: niXman от Май 25, 2008, 21:28 Попробовал: Код покажи.SELECT Date, Name FROM Prihod WHERE Date < :Date Сообщает: Parameter count mismatch Я посылаю запрос, используя "qsqlbrouser" Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: niXman от Май 25, 2008, 21:31 Цитировать Ну как они расположены в базе на самом деле - незнаю! Посмотреть можно с помощью %QTDIR%\demos\sqlbrowser , там же можно с запросами поэксперементировать.Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: Вячеслав от Май 25, 2008, 22:03 возьми нормальный сервер и не компостируй себе мозг ..... sqLite не даром так назван ..... Щаз альтернатив - много ... навскидку мускул и птиц (firebird) у второго вообще прозрачно - хош embed вариант ,хош нормальный клиент с нормальным сервером (а embed позволяет и к нормальному сервку цепляться) + возможность писать хранимки и тригера .... Вообщем -"мадам, Вам шашечки или ехать?" (c) не помню ;) Я с базами, месяц как знаком... И чем база от базы отличается, не знаю !!! Можно ссылочки на рекомендуемые Вами базы, и на доки тож... Спасибо. мускул - http://www.mysql.ru/ по птицу можешь меня пинать ;) чем смогу- помогу ..... Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: ритт от Май 25, 2008, 22:13 обязательно пинай...поможет...
мне он тоже помочь обещал /* месяца четыре назад(?) */ :) Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: lit-uriy от Май 25, 2008, 22:35 Оным и пользуюсь. ты не в нем ли пыташся QDate получить?запрос с параметром (SELECT Date, Name FROM Prihod WHERE Date < :Date) можно делать только в коде программы, а не в инструментах типа sqlbrowser Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: lit-uriy от Май 25, 2008, 22:47 Для приведения типа в самом запросе, не в коде программы, тебе нужен CAST, вообще есть скудноватая справка по QSQLITE на русском (http://sb-news.net/sqlite.php?page=21)
Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: niXman от Май 26, 2008, 01:29 Оным и пользуюсь. ты не в нем ли пыташся QDate получить?запрос с параметром (SELECT Date, Name FROM Prihod WHERE Date < :Date) можно делать только в коде программы, а не в инструментах типа sqlbrowser Упс...спасибо...поправили. Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: niXman от Май 26, 2008, 01:32 "по птицу можешь меня пинать чем смогу- помогу ....." - А кто такой "птиц" ? ???
Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: lit-uriy от Май 26, 2008, 01:33 Firebird (http://www.firebirdsql.org/) (буквально "Огнная птица" или по русски "Жарптица"), наследник Interbase, но бесплатный
Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: niXman от Май 26, 2008, 11:44 Мля, а в чем разница между оными ?
И зачем их столько наплодили ? А синтаксис запросов одинаковый ? И какой мне порекомендуете ? Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: lit-uriy от Май 26, 2008, 13:17 1. Попробую в двух словах объяснить:
* SQLite - маленькая, встраиваемая СУБД, т.е. внутри твоей программы вся логика работы СУБД. В качестве БД использует специальный файл, который можно свободно переносить с машины на машину. Применяется для хранения небольшого кол-ва данных, например настройки программ. * MySQL - небольшая СУБД, может работать и как встраиваемая, но обычно в режиме клиент-сервер. Используется многими сайтами для хранения настроек, авторизационную информацию. Файл БД подобен предудущей. * Firebird - СУБД среднего уровня, работает как клиент-сервер, достаточно быстрая расчитана на большой объем данных. На фарширована основательно возможностями. Файл БД подобен предудущей. * Oracle - видимо самая матерая СУБД. Клиент-серверная. Используется при гигантских объемах данных. Файла БД как такового нет, для переноса БД требуется специальна процедура. Можно назвать стационарной. * PostgreSQL - некая пародия на Oracle но дармовая. 2. Цели разные. 3. Ну приблизительно, по крайней мере пока запросы простые. 4. Цель какая? Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: niXman от Май 26, 2008, 13:31 Цель, вот какая:
Программа - типа мини клон 1С. В базе храняться таблицы - Приходы, расходы, перемещения, уценки, реализации. Вот для этих целей база и нужна... Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: ритт от Май 26, 2008, 14:19 2 лит-юрий,
в списке выше я бы поменял местами * мускуль и птица - т.к. мускуль и шустрее, и рассчитан на работу с бОльшими объёмами данных; * постгре и оракл - по тем же причинам...и не стал бы называть постгре "пародией"...непрофессионально как-то... никсман, для твоих целей птиц или мускуль - самое то Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: niXman от Май 26, 2008, 17:17 Делема мля...
Вот размышляю: Может потратить время, и ознакомиться с FireBird ? Или вместо запросов: SELECT Date, Name FROM Prihod WHERE Date < '1.6.2008' использовать: SELECT Date, Name FROM Prihod и в цикле проверять условие по дате ? Второй способ кажеться реальней, и быстрей !!! Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: BRE от Май 26, 2008, 17:37 Делема мля... Не нужно делать у себя то, что может сделать база данных лучше. :)Вот размышляю: Может потратить время, и ознакомиться с FireBird ? Или вместо запросов: SELECT Date, Name FROM Prihod WHERE Date < '1.6.2008' использовать: SELECT Date, Name FROM Prihod и в цикле проверять условие по дате ? Второй способ кажеться реальней, и быстрей !!! Ради интереса, залез в SQL Browser, попробовал вот так, вроде работает: select * from prihod where date < '01.06.2008'; Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: lit-uriy от Май 26, 2008, 18:06 в принципе, я думаю проверить как вводить дату можно так:
SELECT MAX(Date) FROM Prihod должно вернуть максимальную дату, посмотри как ее возвращает СУБД, и скорми ей в таком же формате свой запрос Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: Вячеслав от Май 26, 2008, 18:35 Делема мля... 1) для начала почитать доку по sqlВот размышляю: Может потратить время, и ознакомиться с FireBird ? Или вместо запросов: SELECT Date, Name FROM Prihod WHERE Date < '1.6.2008' использовать: SELECT Date, Name FROM Prihod и в цикле проверять условие по дате ? Второй способ кажеться реальней, и быстрей !!! 2) прикинуть чего надо от бд 3) если приложение _не_ карманное - брать птица или мускул ( отличия между ними не в объеме хранимой инфы( кстати при больших объемах => 2Gb птиц стабильние IMHO), а в реализации движка - птиц версионник,мускул - блокировочник -> соответственно чуть разные подходы к програмированию "тяжелых" запросов 4) есть еще куча серверов БД - DB2,Informix,M$Sql,ASA и тд - выбор бааальшой - только не уподобляйся 1С с их "эротическим скринсавером" - платформой 1с ,которая якобы использует sql. Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: Вячеслав от Май 26, 2008, 18:37 обязательно пинай...поможет... мне он тоже помочь обещал /* месяца четыре назад(?) */ :) Ну нет меня щаз на постоянном месте обитания :( Жена уже не рычит, а грозиться прибить(начальство ;) - скоро возвернусь ..... Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: niXman от Май 26, 2008, 23:30 обязательно пинай...поможет... мне он тоже помочь обещал /* месяца четыре назад(?) */ :) Ну нет меня щаз на постоянном месте обитания :( Жена уже не рычит, а грозиться прибить(начальство ;) - скоро возвернусь ..... Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: ритт от Май 27, 2008, 01:22 самое время заняться изучением скл :)
Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: niXman от Май 27, 2008, 01:57 Прога почти готова. Осталось только отчеты по датам реализовать. Нужно сдать, сроки просквозил... :-[
Потом займусь...понял что SQLITE - не лучший вариант. Потом прогу поправлю...ведь развивать придется. Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: Вячеслав от Май 27, 2008, 09:36 Хм а собственно чего править-то ? если использован raw-sql(без привязок к конкретному серверу) - то просто создаешь новую БД и правишь соединение ;)
Кстати , интересно between по датам в лайте починили ? PS Лайт вещь хорошая когда нужно что-то очеь маааленькое,но нет желание заморачиваться с экзотикой типа rdm,bdb ... etc ....Но из-за хранения даннных в нетипизированном виде - он изначально проигрывает спецам ;) Название: Re: Qt-4.4.0, Драйвер - QSQLITE, Проблема с QDate. Отправлено: sergun1604 от Июнь 07, 2011, 09:43 зря вы так sqlite для настройки проги - смех
просто дело привычки привыкли работать с мускулом да с бердом так и рекомендуете sqlite - сила легковесная встраиваемая реляционная база данных. Исходный код библиотеки передан в общественное достояние. В 2005 году проект получил награду Google-O’Reilly Open Source Awards[2]. максимальный размер файла базы данных составляет примерно 32 ТБ (35'184'372'056'064 Б). - мало? Простота и удобство встраивания SQLite привели к тому, что библиотека используется в браузерах, музыкальных плеерах и многих других программах. Фреймворк Qt; Mozilla Firefox Mozilla Thunderbird Skype Многие программы поддерживают SQLite в качестве формата хранения данных 1С:Предприятие 7.7 я с датой решил так Код: QString data = ui->dateEdit->date().toString("yyyy-MM-dd"); Код: model->setQuery("SELECT id, strftime('%d.%m.%Y', data), name, num, sumo FROM arhiv WHERE arhiv.vid=3 ORDER BY data"); Если бы Ли́нус Бенедикт То́рвальдс не рыл так глубоко сейчас не было бы самой классной ОС линукс |