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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как правильно вставить дату в таблицу?  (Прочитано 7381 раз)
Alex_C
Гость
« : Апрель 27, 2012, 22:01 »

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

QLocale::dateFormat

Нет?
Записан
Alex_C
Гость
« Ответ #2 : Апрель 28, 2012, 08:06 »

QLocale::dateFormat

Нет?

Нет. Если допустим в качестве базы под виндой использовать MS Access, то можно получить весьма непредсказуемый результат. Необходимо обязательно указывать тип данных.
Записан
Alex_C
Гость
« Ответ #3 : Апрель 28, 2012, 09:09 »

Не знаю на сколько правильно, но с SQLite работает так:

Код:

    QDate m_Date;

    QVariant d(m_Date));
    logQuery->bindValue(1, d);
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #4 : Апрель 28, 2012, 09:13 »

Я не мудрствуя лукаво храню тупо в integer: uint QDateTime::toTime_t () const Улыбающийся
Если для QDate: int QDate::toJulianDay () const

« Последнее редактирование: Апрель 28, 2012, 09:19 от Kurles » Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
Alex_C
Гость
« Ответ #5 : Апрель 28, 2012, 16:01 »

Честно говоря не понял. Формат DateTime - это double (имеется ввиду в системе.) И при попытке вставить int допустим в тот же Эксесс получаем ошибку.
Записан
Bepec
Гость
« Ответ #6 : Апрель 28, 2012, 17:09 »

В системе дататайм это большооооое количество секунд с 1901 года, насколько я помню Подмигивающий Так что спокойно вписывается в long/int.
Записан
Alex_C
Гость
« Ответ #7 : Апрель 28, 2012, 20:41 »

А ты попробуй?
Для остальных - весьма принципиальная вещь. В общем -все решил. Не хочу тут ехидных замечаний. Кому интересно - пишите на емайл.
Записан
Странник
Гость
« Ответ #8 : Апрель 29, 2012, 00:42 »

тешил себя надеждой, что ISO 8601 все хавает. заблуждался?
Записан
Alex_C
Гость
« Ответ #9 : Май 01, 2012, 10:01 »

В системе дататайм это большооооое количество секунд с 1901 года, насколько я помню Подмигивающий Так что спокойно вписывается в long/int.

В системе дататайм - это дробное число, где целая часть - число дней с 31 декабря 1899 года. Дробная часть - это часы, минуты, секунды. Одна секунда равна 1/(24часа*60минут*60секунд) .
Поясню еще раз проблему с которой я столкнулся конкретно применительно к Эксесу - поле в Эксесе указано как дата-тайм. Но если туда просто вставить дробное число, соответствующее нужной дате, то по каким то одним разработчикам Эксеса известным принципам оно преобразуется в какую то странную дату-время. Чтоб такого не произошло, нужно явно указывать , что это формат даты-времени.
Вот собственно такая вот проблема.
Записан
RVZ
Гость
« Ответ #10 : Май 03, 2012, 15:52 »

Вставляй как строковые выражения! (И ВООБЩЕ ЧТО БЫ С БАЗАМИ АКСЕСА РАБОТАТЬ VBA есть... так сказать пидалям пидальное)
Записан
Alex_C
Гость
« Ответ #11 : Май 03, 2012, 17:37 »

Вставляй как строковые выражения!

Вот здесь хотелось бы пояснения. Во всех учебниках по программированию строго-на строго написано - при вставке данных типа времени не использовать текстовые значения, т.к. это может привести к ошибке - региональные стандарты даты в системе и в программе могут не совпадать. Собственно по этому вопрос и возник - вроде как тестовые данные даты-времени вставлять всегда считал не правильно.
Записан
RVZ
Гость
« Ответ #12 : Май 04, 2012, 10:38 »

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


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