Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Странное поведение поля в Access [D7, XP]


Страницы:   1 2

DimonS ©   (2009-08-03 09:29:00) 

Ну может и не поля...
В общем, есть элементарный кусок кода:

ADOCommand1.CommandText:='update PathForms set TimeFact1=:TF1 where ...';
ADOCommand1.Parameters.ParamValues['TF1']:=TimeFact1;
ADOCommand1.Execute;


Переменная TimeFact1 объявлена как TDateTime, значение, например, 40025,875.
Поле в таблице имеет формат Дата/Время.

В общем, при выполнении кода в таблицу вставляется только значение даты, время отсеивается.
В чем может быть причина?
В режиме отладки при присвоении параметру значения переменной TimeFact1 переменная не округлена до целого числа, с временем.
Если поменять код на такой:
ADOCommand1.Parameters.ParamValues['TF1']:=Date+Time;
то записывается и дата и время в табличку, так что формат поля нормальный. Проблема именно при присвоении значения переменной.


Anatoly Podgoretsky   (2009-08-04 10:27:00) [21]


> ADOCommand1.Parameters.ParamByName('TF1').Value

И какое значение это имеет после присвоения?


Dennis I. Komarov   (2009-08-04 10:26:00) [22]


> Какая еще запятая у NOW

временАя


Anatoly Podgoretsky   (2009-08-04 10:24:00) [23]

> DimonS  (04.08.2009 10:18:10)  [10]

Какая еще запятая у NOW


DimonS   (2009-08-04 10:18:00) [24]


> Anatoly Podgoretsky ©   (04.08.09 09:55) [9]


Аналогично. Только дата.
Возникла мысль, что может это как-то связано с региональными стандартами и запятая не принимается? Хотя все по дефолту стоит, ничего не менялось.


Anatoly Podgoretsky   (2009-08-04 09:55:00) [25]

ADOCommand1.Parameters.ParamByName('TF1').Value := NOW;


DimonS   (2009-08-04 09:42:00) [26]


> sniknik ©   (04.08.09 09:15) [7]

Понял, про что спрашивал.
Да, с Now записывает тоже только дату.
Если использовать Date+Time, то записывается нормально.
Если использовать такую конструкцию:
ADOFind.Parameters.ParamValues['TF1']:=Int(TimeFact1)+Frac(TimeFact1);
то тоже записывается нормально.

Так вот...


sniknik   (2009-08-04 09:15:00) [27]

> А кто сказал, что мне нужен Now()?
тубе нужна причина? тогда делай тесты и сообщай результат. или можно просто поболтать об этом (а лучше сразу закрыть тему, и вообще взять за правило закрывать ветки тех кто не отвечает на уточняющие вопросы... было бы неплохо).

про Now, я уверен что он возвращает, про TimeFact1 мне неизвестно ничего... даже не приведено его объявление. только твои слова о "чудесах" с ним.

> выдает тот же результат...
а чего ты ожидал? это же тоже самое просто более привычная форма. вот если бы там стояло Now как я писал и был бы тот же результат, это было бы чудом.


Anatoly Podgoretsky   (2009-08-04 08:52:00) [28]

> DimonS  (04.08.2009 08:30:05)  [5]

Так все таки, что с NOW


DimonS   (2009-08-04 08:30:00) [29]


> sniknik ©   (04.08.09 07:56) [4]

А кто сказал, что мне нужен Now()?
Нужно занести конкретную дату и конкретное время.


> ADOCommand1.Parameters.ParamByName('TF1').Value:= TimeFact1;

выдает тот же результат...


sniknik   (2009-08-04 07:56:00) [30]

> Если поменять код на такой:
> ADOCommand1.Parameters.ParamValues['TF1']:=Date+Time;
а если на такой?
ADOCommand1.Parameters.ParamValues['TF1']:= Now();
или, что привычнее, на такой
ADOCommand1.Parameters.ParamByName('TF1').Value:= Now();
?


DimonS   (2009-08-04 02:14:00) [31]

Проверил сейчас командой
ShowMessage(DateTimeToStr(TimeFact1));
Выводится '31.07.2009 21:00:00'

Вот. Куда еще копать - ума не приложу. Раскладывать число по-отдельности на дату и время и плюсовать? Вариант, записывает нормально. Но это же не выход, нерационально лишние вычисления делать.


DimonS   (2009-08-04 01:43:00) [32]


> Anatoly Podgoretsky ©   (03.08.09 11:20) [1]
> > DimonS  (03.08.2009 09:29:00)  [0]
>
> Все таки TimeFact1 без времени. Не надо проверять в отладчике,
>  используй или метку или ShowMessage


В том-то и дело, что и ShowMessage показывает, что со временем переменная. Проверял по такому коду:

ShowMessage(FloatTostr(TimeFact1));
ADOCommand1.Parameters.ParamValues['TF1']:=TimeFact1;


Выводит то же число: 40025,875.


Anatoly Podgoretsky   (2009-08-03 11:20:00) [33]

> DimonS  (03.08.2009 09:29:00)  [0]

Все таки TimeFact1 без времени. Не надо проверять в отладчике, используй или метку или ShowMessage


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо