Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Проблема с датами в фильтре грида Petrovicha  [new]
АленаШ
Member

Откуда:
Сообщений: 35
На форме грид Petrovicha (из решений с форума FoxPro Club), есть поля Date.
Настройки даты в программе SET DATE TO GERMAN, SET CENTURY ON.

Использую свойства грида - фильтрация по таблице.
Если фильтрую записи в гриде только по одному полю даты - все ок.
Если фильтрую по таблице, т.е. по нескольким полям, одно из них - дата, то вылетает ошибка:

Ambiguous date/datetime constant. Use the format {^yyyy-mm-dd...

Подскажите, может, кто сталкивался, что можно сделать.
18 сен 08, 08:14    [6198332]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с датами в фильтре грида Petrovicha  [new]
Sergey Sizov.
Guest
АленаШ
На форме грид Petrovicha (из решений с форума FoxPro Club), есть поля Date.
Настройки даты в программе SET DATE TO GERMAN, SET CENTURY ON.

Использую свойства грида - фильтрация по таблице.
Если фильтрую записи в гриде только по одному полю даты - все ок.
Если фильтрую по таблице, т.е. по нескольким полям, одно из них - дата, то вылетает ошибка:

Ambiguous date/datetime constant. Use the format {^yyyy-mm-dd...

Подскажите, может, кто сталкивался, что можно сделать.

Перевести текст ошибки с английского на русский и выполнить рекомендованное, то есть использовать не зависящий от настроек среды способ задания дат в виде {^yyyy-mm-dd}.
18 сен 08, 09:29    [6198453]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с датами в фильтре грида Petrovicha  [new]
АленаШ
Member

Откуда:
Сообщений: 35
Почему же все такие злые. Перевела я все. Выдается табличка со всеми значениями введенных дат
10.09.2008
11.09.2008
23.09.2008
и комббоксы напротив каждой даты. Остается только выставить галочки, какие даты взять для фильтра. Так где устанавливать формат, независящий от настроек среды. Вот не понимаю пока и все. А если не хотите отвечать, так и ерничать не надо. Извините.
18 сен 08, 09:45    [6198532]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с датами в фильтре грида Petrovicha  [new]
гость.....
Guest
Скорее всего, в классе где то данные введены/подставляются в виде {}
попробуй по поиску в классе поискать скобку {
заменить на функцию DAte(), тогда будет без разницы, формат даты.
18 сен 08, 09:55    [6198570]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с датами в фильтре грида Petrovicha  [new]
АленаШ
Member

Откуда:
Сообщений: 35
гость.....
Скорее всего, в классе где то данные введены/подставляются в виде {}
попробуй по поиску в классе поискать скобку {
заменить на функцию DAte(), тогда будет без разницы, формат даты.



Спасибо, Гость, за совет, поискала и конечно же нашла. Просто не сталкивалась с этим, думала, есть возможность перенастроить без правки класса.
Было :
lcFilterStr = lcFilterStr + ' or ' + lcFieldName + ' = {' + DTOC(&lcrFilterValues..Filter_Val) + '}'

Стало:
lcFilterStr = lcFilterStr + ' or ' + lcFieldName + ' = {^' +ALLTRIM(str(YEAR(&lcrFilterValues..Filter_Val))) + IIF(MONTH(&lcrFilterValues..Filter_Val)<10,'-0','-') + ALLTRIM(STR(MONTH(&lcrFilterValues..Filter_Val))) +IIF(day(&lcrFilterValues..Filter_Val)<10,'-0','-') + ALLTRIM(STR(DAY(&lcrFilterValues..Filter_Val))) + '}'

&lcrFilterValues..Filter_Val - это и есть моя дата {21.01.2008}. Теперь фильтр будет выглядеть так:

'имя поля' = {^2008-01-21}

Может кому-то пригодится, не все же сразу такие умные получаются.
18 сен 08, 19:33    [6202295]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с датами в фильтре грида Petrovicha  [new]
гость...
Guest
предлагаю еще один вариант:
lcDateSet=SET("Date") &&запоминаем текущие настройки формата даты
SET DATE YMD &&установим нужный для нас формат
lcFilterStr = lcFilterStr + ' or ' + lcFieldName + ' = {' + DTOC(&lcrFilterValues..Filter_Val) + '}'
SET DATE &lcDateSet &&возвращаем формат даты в исходное состояние
19 сен 08, 10:12    [6203680]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с датами в фильтре грида Petrovicha  [new]
Dima T
Member

Откуда:
Сообщений: 15291
Вот это:
АленаШ
IIF(MONTH(&lcrFilterValues..Filter_Val)<10,'-0','-') + ALLTRIM(STR(MONTH(&lcrFilterValues..Filter_Val)))


короче можно написать:
PADL(ALLTRIM(STR(MONTH(&lcrFilterValues..Filter_Val))), 2, '0')

или разом заменить все пробелы на '0'
... + chrtran("{^"+str(year(&lcrFilterValues..Filter_Val),4)+"-"+str(month(&lcrFilterValues..Filter_Val),2)+"-"+str(day(&lcrFilterValues..Filter_Val),2)+"}"," ","0") + ...

А еще проше один раз сделать свою функцию для преобразования и потом везде ее использовать:
func date2str
para tdDate
return chrtran("{^"+str(year(tdDate),4)+"-"+str(month(tdDate),2)+"-"+str(day(tdDate),2)+"}"," ","0")
19 сен 08, 10:25    [6203797]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с датами в фильтре грида Petrovicha  [new]
гость...
Guest
чтобы не пучкаться с этими IIF()можно сделать проще ;)
ldCurDate=DATE()
? STRTRAN(STR(YEAR(ldCurDate),4,0)+'-'+STR(month(ldCurDate),2,0)+'-'+STR(day(ldCurDate),2,0),' ','0')
19 сен 08, 10:27    [6203815]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить