Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: DatePart
 
 автор: SONAR   (13.09.2010 в 15:02)   личное сообщение
 
 

Доброго всем.
Не могу понять, почему функция DatePart выдает не верное значение из извлекаемой даты.
Необходимо вытащить год из, допустим 09.09.2010
пишу DatePart("yyyy";IsDate([DateDoc]))
выдает 1899 год....
гы.
Где трабла?

  Ответить  
 
 автор: kot_k_k   (13.09.2010 в 15:08)   личное сообщение
 
 


Функция IsDate возвращает True, если выражение принадлежит к типу даты или допускает преобразование к допустимому значению даты; в противном случае возвращается False

  Ответить  
 
 автор: SONAR   (13.09.2010 в 15:11)   личное сообщение
 
 

Так это я знаю.
Но ее как раз и рекомендуется использовать для проверки правильности представления даты как таковой.
Без нее, выражение DatePart("yyyy";[DateDoc]) выдает ошибку.

  Ответить  
 
 автор: SONAR   (13.09.2010 в 15:14)   личное сообщение
 
 

Вот, всё таки надо было ссылаться не на поле DateDoc в отчете (хотя почему нет?), а непосредственно на субформу открытой формы, на основе коей делается отчет

=DatePart("yyyy";[Forms]![frm_Reg_Archivarius]![Sfrm_Reg_Archivarius]!DateDoc)

  Ответить  
 
 автор: snipe   (13.09.2010 в 15:17)   личное сообщение
 
 

чем ВАм Year не нравится

  Ответить  
 
 автор: SONAR   (13.09.2010 в 15:23)   личное сообщение
 
 


чем ВАм Year не нравится



Тем же самым, так же выдает ошибку.

  Ответить  
 
 автор: snipe   (13.09.2010 в 15:25)   личное сообщение
 
 

а вот у этого какой формат поля
[Forms]![frm_Reg_Archivarius]![Sfrm_Reg_Archivarius]!DateDoc

для Year() нужна дата

  Ответить  
 
 автор: SONAR   (13.09.2010 в 15:27)   личное сообщение
 
 


а вот у этого какой формат поля
[Forms]![frm_Reg_Archivarius]![Sfrm_Reg_Archivarius]!DateDoc


- краткий формат даты.

  Ответить  
 
 автор: DeBob   (13.09.2010 в 16:30)   личное сообщение
 
 

MsgBox IIf(IsDate(dateDoc), DatePart("yyyy", CVDate(dateDoc)), "")
MsgBox Year(CVDate(dateDoc))

Оба варианта работают %)

  Ответить  
 
 автор: kot_k_k   (13.09.2010 в 15:15)   личное сообщение
 
 

IsDate возвращает тебе не дату а TRUE - а какой год у TRUE я не знаю.
есть функция Year() - возвращает год.
DateDoc - чему оно равно.

  Ответить  
 
 автор: SONAR   (13.09.2010 в 15:29)   личное сообщение
 
 


IsDate возвращает тебе не дату а TRUE - а какой год у TRUE я не знаю.



в справочнике и пишут, что всегда желательно проверять данные с помощью IsDate, особенно в выражениях и функциях, но и без нее Year или Month выдают ошибку

  Ответить  
 
 автор: kot_k_k   (13.09.2010 в 15:35)   личное сообщение
 
 

скорее всего поле равно 01.01.10 - и акс берет его как строку. попробу сделай Mid и собери к виду 01/01/2010 - причем месяц/день/год. или Format(Date, "mm\/dd\/yyyy")

  Ответить  
 
 автор: Гоблин   (13.09.2010 в 22:32)   личное сообщение
11 Кб.
 
 

На сайте есть много примеров по работе с датой. Если конкретно интересует DatePart, то вот краткий примерчик. Может поможет.

  Ответить  
 
 автор: Дядя Федор   (13.09.2010 в 17:00)   личное сообщение
 
 

BuildCriteria см.help - очень полезная вещь

  Ответить  
 
 автор: ГлазастыйМышь   (14.09.2010 в 10:26)   личное сообщение
 
 


DatePart("yyyy";iif(IsDate([DateDoc]);cDate([DateDoc]);null))


тогда если DateDoc - формата даты, то вернет год. Иначе null

  Ответить  
 
 автор: kot_k_k   (14.09.2010 в 10:33)   личное сообщение
 
 

я тупо написал datepart("yyyy", TRUE) - получил 1899, написал False - таже фигня. оно обрабатыевает даже так i = DatePart("yyyy", 7879) - перегоняет из цифры, а вот на строку выдает ошибку. у него видимо строка получается не взирая на то что формат установлен дата.

  Ответить  
 
 автор: Дядя Федор   (14.09.2010 в 13:16)   личное сообщение
 
 

Таблица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?

  Ответить  
 
 автор: SONAR   (14.09.2010 в 18:01)   личное сообщение
 
 


Таблица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?



проблема в том, что я это пытаюсь сделать в обычном поле в отчете...
поле из таблицы с форматом дата.
где затыка так и не наешл

  Ответить  
 
 автор: Дядя Федор   (15.09.2010 в 08:05)   личное сообщение
 
 

странно у меня в отчетах и месяцы и годы и числа - все работает....простыми year,month etc. Тем более если поле date

  Ответить  
 
 автор: SONAR   (14.09.2010 в 17:58)   личное сообщение
 
 


я тупо написал datepart("yyyy", TRUE) - получил 1899, написал False - таже фигня. оно обрабатыевает даже так i = DatePart("yyyy", 7879) - перегоняет из цифры, а вот на строку выдает ошибку. у него видимо строка получается не взирая на то что формат установлен дата.



во-во, та же фигня!!!

  Ответить  
 
 автор: kot_k_k   (14.09.2010 в 21:36)   личное сообщение
 
 

у акса наблюдается кривоватость в отношении дат нашего формата - даже если поле дата он толи не понимает наших разделителей либо формата не нравится - ему нужно преобразовывать # мм/дд/гг # - я с датами всегда Format пользуюсь или DateSerial

  Ответить  
 
 автор: ГлазастыйМышь   (16.09.2010 в 10:14)   личное сообщение
 
 


я тупо написал 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"

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList