Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / фильтр по дате / 16 сообщений из 16, страница 1 из 1
28.07.2005, 15:36:49
    #33189726
k_sv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фильтр по дате
Добрый день. Вопрос новичка. У меня такая ситуация.
Есть представление
Код: plaintext
1.
create sql view look_zak as SELECT ... ;
 FROM  .... WHERE &?flt_zakaz

Это отображается гриде формы. В другой форме устанавливается фильтр.
Если flt_zakaz='{^2001.01.01}' , то все нормально. А вот если формат GERMAN
flt_zakaz='{^01.01.2001}' , то ошибка Ambiguous Date/DateTime constant (Error 2032).
В форме фильтра дата вводится в формате GERMAN, и хотелось бы формировать фильтр прямо из этих полей. А SQL не понимает так.
Как можно выйти из этой ситуации?
...
Рейтинг: 0 / 0
28.07.2005, 15:43:15
    #33189745
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фильтр по дате
Вы что, прям вот так и вводите {^2001.01.01}, со скобами и пр.?
...
Рейтинг: 0 / 0
28.07.2005, 15:44:38
    #33189749
Проходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фильтр по дате
В общем-то дата в фигурных скобках специально придумана для НЕЗАВИСИМОСТИ от представления даты в системе и всегда должена содержать год, месяц и день только в таком порядке. Формат German - dd.mm.yyyy без фигурных скобок и крышки.
...
Рейтинг: 0 / 0
28.07.2005, 15:57:09
    #33189792
k_sv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фильтр по дате
To AleksMed:
Куда ввожу?
Вот фрагмент формирования фильтра:
Код: plaintext
1.
flt_zakaz = flt_zakaz + '.and. data_zak >= {^'+ dtoc(fltForm.txtData_b_zak.Value) + '}' + ;
	 '.and. data_zak <= {^'+ dtoc(fltForm.txtData_e_zak.Value) +'}'
...
Рейтинг: 0 / 0
28.07.2005, 16:00:37
    #33189807
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фильтр по дате
flt_zakaz = flt_zakaz + '.and. data_zak >= fltForm.txtData_b_zak.Value + .and. data_zak <= fltForm.txtData_e_zak.Value'
или
flt_zakaz = flt_zakaz + '.and. between(data_zak,fltForm.txtData_b_zak.Value,fltForm.txtData_e_zak.Value)'
...
Рейтинг: 0 / 0
28.07.2005, 16:07:23
    #33189830
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фильтр по дате
Предыдущее не верно.
flt_zakaz = flt_zakaz + '.and. data_zak >= CTOD('+DTOC(fltForm.txtData_b_zak.Value) + ') .and. data_zak <= CTOD('+DTOC(fltForm.txtData_e_zak.Value)+')'

для второго тоже нужно через DTOC()&CTOD()
...
Рейтинг: 0 / 0
28.07.2005, 16:08:34
    #33189835
k_sv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фильтр по дате
To AleksMed:
Спасибо. Работает.
Что-то я перемудрила. :)
...
Рейтинг: 0 / 0
28.07.2005, 16:10:08
    #33189844
Проходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фильтр по дате
А теперь объясни для чего ты дату конвертируешь в строку (DTOC) если потом опять первращаешь ее в дату с помощью фигурных скобок? Что-то ты не так понял.
...
Рейтинг: 0 / 0
28.07.2005, 16:12:14
    #33189851
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фильтр по дате
Да тут тоже намудрил.
Сейчас еще раз перечитал, вроде все варианты рабочие.
...
Рейтинг: 0 / 0
28.07.2005, 16:17:31
    #33189872
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фильтр по дате
2 проходящий
Это я выдрал из старого проекта. А сейчас думаю, и вправду зачем?
...
Рейтинг: 0 / 0
28.07.2005, 16:22:07
    #33189894
k_sv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фильтр по дате
Остановилась на варианте
Код: plaintext
flt_zakaz = flt_zakaz + '.and. between(data_zak,fltForm.txtData_b_zak.Value,fltForm.txtData_e_zak.Value)'
Спасибо за поддержку.
...
Рейтинг: 0 / 0
28.07.2005, 17:07:03
    #33190073
Проходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фильтр по дате
А есть еще один вариант:

вместо
Код: plaintext
between(data_zak,fltForm.txtData_b_zak.Value,fltForm.txtData_e_zak.Value)
использовать
Код: plaintext
data_zak between fltForm.txtData_b_zak.Value and fltForm.txtData_e_zak.Value
...
Рейтинг: 0 / 0
28.07.2005, 17:11:43
    #33190086
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фильтр по дате
Да, можно, НО для RV, например, к MS SQL. (VFP7)
...
Рейтинг: 0 / 0
28.07.2005, 17:13:56
    #33190092
Проходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фильтр по дате
И к фоксу тоже.
...
Рейтинг: 0 / 0
29.07.2005, 01:31:38
    #33190534
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фильтр по дате
Hi All!

Не стоит в условиях для SQL запроса использовать ссылки на объекты формы.
Впрочем ссылки типа fltForm... вообще стоит использовать только при условии
что переменная fltForm была ВРУЧНУЮ создана как PUBLIC.
Т.к. запрос к фоксовой таблице, то лучше в переменную условия ставить
[ AND DTOS(data_zak) BETWEEN "] + DTOS(fltForm.txtData_b_zak.Value) + [" AND
"] + DTOS(fltForm.txtData_e_zak.Value) + ["]
Это не зависит от SET DATE и прочего, за противоречит SET STRICTDATE, не
содержит ссылок на объекты (только константы). и будет оптимизировано, если
имеется индекс по DTOS(data_zak) - а индекс по полям типа даты БЕЗ DTOS() -
это IMHO совсем неправильно.

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
29.07.2005, 14:17:46
    #33191740
k_sv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фильтр по дате
To Igor Korolyov :
Спасибо огромное. Опыта у меня маловато. И на индексные грабли еще не наступала. Сделала, как Вы написали.

Еще раз всем спасибо.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / фильтр по дате / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]