Russian Qt Forum

Qt => Базы данных => Тема начата: Alex_C от Апрель 27, 2012, 22:01



Название: Как правильно вставить дату в таблицу?
Отправлено: Alex_C от Апрель 27, 2012, 22:01
Есть дата формата QDate. Как ее правильно (читай не зависимо от региональных стандартов) вставить в поле DateTime используя bindValue? В Дельфи для таких целей можно было указать тип данных, дабы избежать "неоднозначности".


Название: Re: Как правильно вставить дату в таблицу?
Отправлено: alexis031182 от Апрель 27, 2012, 22:20
QLocale::dateFormat

Нет?


Название: Re: Как правильно вставить дату в таблицу?
Отправлено: Alex_C от Апрель 28, 2012, 08:06
QLocale::dateFormat

Нет?

Нет. Если допустим в качестве базы под виндой использовать MS Access, то можно получить весьма непредсказуемый результат. Необходимо обязательно указывать тип данных.


Название: Re: Как правильно вставить дату в таблицу?
Отправлено: Alex_C от Апрель 28, 2012, 09:09
Не знаю на сколько правильно, но с SQLite работает так:

Код:

    QDate m_Date;

    QVariant d(m_Date));
    logQuery->bindValue(1, d);


Название: Re: Как правильно вставить дату в таблицу?
Отправлено: Kurles от Апрель 28, 2012, 09:13
Я не мудрствуя лукаво храню тупо в integer: uint QDateTime::toTime_t () const :)
Если для QDate: int QDate::toJulianDay () const



Название: Re: Как правильно вставить дату в таблицу?
Отправлено: Alex_C от Апрель 28, 2012, 16:01
Честно говоря не понял. Формат DateTime - это double (имеется ввиду в системе.) И при попытке вставить int допустим в тот же Эксесс получаем ошибку.


Название: Re: Как правильно вставить дату в таблицу?
Отправлено: Bepec от Апрель 28, 2012, 17:09
В системе дататайм это большооооое количество секунд с 1901 года, насколько я помню ;) Так что спокойно вписывается в long/int.


Название: Re: Как правильно вставить дату в таблицу?
Отправлено: Alex_C от Апрель 28, 2012, 20:41
А ты попробуй?
Для остальных - весьма принципиальная вещь. В общем -все решил. Не хочу тут ехидных замечаний. Кому интересно - пишите на емайл.


Название: Re: Как правильно вставить дату в таблицу?
Отправлено: Странник от Апрель 29, 2012, 00:42
тешил себя надеждой, что ISO 8601 все хавает. заблуждался?


Название: Re: Как правильно вставить дату в таблицу?
Отправлено: Alex_C от Май 01, 2012, 10:01
В системе дататайм это большооооое количество секунд с 1901 года, насколько я помню ;) Так что спокойно вписывается в long/int.

В системе дататайм - это дробное число, где целая часть - число дней с 31 декабря 1899 года. Дробная часть - это часы, минуты, секунды. Одна секунда равна 1/(24часа*60минут*60секунд) .
Поясню еще раз проблему с которой я столкнулся конкретно применительно к Эксесу - поле в Эксесе указано как дата-тайм. Но если туда просто вставить дробное число, соответствующее нужной дате, то по каким то одним разработчикам Эксеса известным принципам оно преобразуется в какую то странную дату-время. Чтоб такого не произошло, нужно явно указывать , что это формат даты-времени.
Вот собственно такая вот проблема.


Название: Re: Как правильно вставить дату в таблицу?
Отправлено: RVZ от Май 03, 2012, 15:52
Вставляй как строковые выражения! (И ВООБЩЕ ЧТО БЫ С БАЗАМИ АКСЕСА РАБОТАТЬ VBA есть... так сказать пидалям пидальное)


Название: Re: Как правильно вставить дату в таблицу?
Отправлено: Alex_C от Май 03, 2012, 17:37
Вставляй как строковые выражения!

Вот здесь хотелось бы пояснения. Во всех учебниках по программированию строго-на строго написано - при вставке данных типа времени не использовать текстовые значения, т.к. это может привести к ошибке - региональные стандарты даты в системе и в программе могут не совпадать. Собственно по этому вопрос и возник - вроде как тестовые данные даты-времени вставлять всегда считал не правильно.


Название: Re: Как правильно вставить дату в таблицу?
Отправлено: RVZ от Май 04, 2012, 10:38
Вот именно... по этому и не используются АКСЕСЫ для нормальных проектов (... это Г.калькулятор) в реальных движках вопрос решается преобразованием типов CONVERT(...) (КАК ВООБЩЕ БЕЗ ХРАНИМЫХ ПРОЦЕДУР РАБОТАТЬ!!!!  ??? )
.... в общем не знаю чем помочь  :'(