![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Странное поведение поля в Access [D7, XP]
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