powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / фильтр по дате
16 сообщений из 16, страница 1 из 1
фильтр по дате
    #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
фильтр по дате
    #33189745
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы что, прям вот так и вводите {^2001.01.01}, со скобами и пр.?
...
Рейтинг: 0 / 0
фильтр по дате
    #33189749
Проходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем-то дата в фигурных скобках специально придумана для НЕЗАВИСИМОСТИ от представления даты в системе и всегда должена содержать год, месяц и день только в таком порядке. Формат German - dd.mm.yyyy без фигурных скобок и крышки.
...
Рейтинг: 0 / 0
фильтр по дате
    #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
фильтр по дате
    #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
фильтр по дате
    #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
фильтр по дате
    #33189835
k_sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To AleksMed:
Спасибо. Работает.
Что-то я перемудрила. :)
...
Рейтинг: 0 / 0
фильтр по дате
    #33189844
Проходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А теперь объясни для чего ты дату конвертируешь в строку (DTOC) если потом опять первращаешь ее в дату с помощью фигурных скобок? Что-то ты не так понял.
...
Рейтинг: 0 / 0
фильтр по дате
    #33189851
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да тут тоже намудрил.
Сейчас еще раз перечитал, вроде все варианты рабочие.
...
Рейтинг: 0 / 0
фильтр по дате
    #33189872
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 проходящий
Это я выдрал из старого проекта. А сейчас думаю, и вправду зачем?
...
Рейтинг: 0 / 0
фильтр по дате
    #33189894
k_sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Остановилась на варианте
Код: plaintext
flt_zakaz = flt_zakaz + '.and. between(data_zak,fltForm.txtData_b_zak.Value,fltForm.txtData_e_zak.Value)'
Спасибо за поддержку.
...
Рейтинг: 0 / 0
фильтр по дате
    #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
фильтр по дате
    #33190086
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, можно, НО для RV, например, к MS SQL. (VFP7)
...
Рейтинг: 0 / 0
фильтр по дате
    #33190092
Проходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И к фоксу тоже.
...
Рейтинг: 0 / 0
фильтр по дате
    #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
фильтр по дате
    #33191740
k_sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To Igor Korolyov :
Спасибо огромное. Опыта у меня маловато. И на индексные грабли еще не наступала. Сделала, как Вы написали.

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


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