|
|
|
| Доброго всем.
Не могу понять, почему функция DatePart выдает не верное значение из извлекаемой даты.
Необходимо вытащить год из, допустим 09.09.2010
пишу DatePart("yyyy";IsDate([DateDoc]))
выдает 1899 год....
гы.
Где трабла? | |
|
| |
|
|
|
|
Функция IsDate возвращает True, если выражение принадлежит к типу даты или допускает преобразование к допустимому значению даты; в противном случае возвращается False
|
| |
|
| |
|
|
|
| Так это я знаю.
Но ее как раз и рекомендуется использовать для проверки правильности представления даты как таковой.
Без нее, выражение DatePart("yyyy";[DateDoc]) выдает ошибку. | |
|
| |
|
|
|
| Вот, всё таки надо было ссылаться не на поле DateDoc в отчете (хотя почему нет?), а непосредственно на субформу открытой формы, на основе коей делается отчет
=DatePart("yyyy";[Forms]![frm_Reg_Archivarius]![Sfrm_Reg_Archivarius]!DateDoc) | |
|
| |
|
|
|
|
|
Тем же самым, так же выдает ошибку. | |
|
| |
|
|
|
| а вот у этого какой формат поля
[Forms]![frm_Reg_Archivarius]![Sfrm_Reg_Archivarius]!DateDoc
для Year() нужна дата | |
|
| |
|
|
|
|
а вот у этого какой формат поля
[Forms]![frm_Reg_Archivarius]![Sfrm_Reg_Archivarius]!DateDoc
|
- краткий формат даты. | |
|
| |
|
|
|
| MsgBox IIf(IsDate(dateDoc), DatePart("yyyy", CVDate(dateDoc)), "")
MsgBox Year(CVDate(dateDoc))
Оба варианта работают %) | |
|
| |
|
|
|
|
|
IsDate возвращает тебе не дату а TRUE - а какой год у TRUE я не знаю.
|
в справочнике и пишут, что всегда желательно проверять данные с помощью IsDate, особенно в выражениях и функциях, но и без нее Year или Month выдают ошибку | |
|
| |
|
|
|
| скорее всего поле равно 01.01.10 - и акс берет его как строку. попробу сделай Mid и собери к виду 01/01/2010 - причем месяц/день/год. или Format(Date, "mm\/dd\/yyyy") | |
|
| |
|
11 Кб. |
|
| На сайте есть много примеров по работе с датой. Если конкретно интересует DatePart, то вот краткий примерчик. Может поможет. | |
|
| |
|
|
|
| BuildCriteria см.help - очень полезная вещь | |
|
| |
|
|
|
|
DatePart("yyyy";iif(IsDate([DateDoc]);cDate([DateDoc]);null))
|
тогда если DateDoc - формата даты, то вернет год. Иначе null | |
|
| |
|
|
|
| я тупо написал datepart("yyyy", TRUE) - получил 1899, написал False - таже фигня. оно обрабатыевает даже так i = DatePart("yyyy", 7879) - перегоняет из цифры, а вот на строку выдает ошибку. у него видимо строка получается не взирая на то что формат установлен дата. | |
|
| |
|
|
|
| Таблица1
datadoc - текстовое поле
01.01.09
10.11.2010
dasdadadfad
SELECT Таблица1.datadoc, IIf(IsDate([datadoc]),Year([datadoc]),"НЕДАТА") AS Выражение2
FROM Таблица1;
|
Результат
datadoc Выражение2
01.01.09 2009
10.11.2010 2010
dasdadadfad НЕДАТА
У ЧЁМ ПРОБЛЕМА? что-то я в толк не возьму.
Или надо именно datepart? | |
|
| |
|
|
|
|
Таблица1
datadoc - текстовое поле
01.01.09
10.11.2010
dasdadadfad
SELECT Таблица1.datadoc, IIf(IsDate([datadoc]),Year([datadoc]),"НЕДАТА") AS Выражение2
FROM Таблица1;
Результат
datadoc Выражение2
01.01.09 2009
10.11.2010 2010
dasdadadfad НЕДАТА
У ЧЁМ ПРОБЛЕМА? что-то я в толк не возьму.
Или надо именно datepart?
|
проблема в том, что я это пытаюсь сделать в обычном поле в отчете...
поле из таблицы с форматом дата.
где затыка так и не наешл | |
|
| |
|
|
|
| странно у меня в отчетах и месяцы и годы и числа - все работает....простыми year,month etc. Тем более если поле date | |
|
| |
|
|
|
|
я тупо написал datepart("yyyy", TRUE) - получил 1899, написал False - таже фигня. оно обрабатыевает даже так i = DatePart("yyyy", 7879) - перегоняет из цифры, а вот на строку выдает ошибку. у него видимо строка получается не взирая на то что формат установлен дата.
|
во-во, та же фигня!!! | |
|
| |
|
|
|
| у акса наблюдается кривоватость в отношении дат нашего формата - даже если поле дата он толи не понимает наших разделителей либо формата не нравится - ему нужно преобразовывать # мм/дд/гг # - я с датами всегда Format пользуюсь или DateSerial | |
|
| |
|
|
|
|
я тупо написал datepart("yyyy", TRUE) - получил 1899, написал False - таже фигня. оно обрабатыевает даже так i = DatePart("yyyy", 7879) - перегоняет из цифры, а вот на строку выдает ошибку. у него видимо строка получается не взирая на то что формат установлен дата.
|
тогда немного теории.
В Access дата представляется в виде числа дней, прошедших с определенной даты (если не ошибаюсь, то с 30/12/1899).
Целая часть - дни, дробная - часы (количество часов / 24)
True = -1
False = 0
т.е. datepart("yyyy", TRUE) что делает:
1. Преобразует TRUE к дате, а именно 29/12/1899
2. Берет от полученной даты год, т.е. 1899
ЗЫ. На строку тоже может получится год при условии, что строка задается в формате даты типа "31/12/1908" | |
|
| |