Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / in (15,36897,56489) vs in (Select ...) ? / 5 сообщений из 5, страница 1 из 1
04.08.2004, 10:46:24
    #32634491
SRG
SRG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
in (15,36897,56489) vs in (Select ...) ?
Для одного fXID :

1. select * from t_Y where fYID in (15,36897,56489)

2. select * from t_Y where fYID in (Select fYID from t_X where fXID = forms!foX!fXID)

Первый запрос выполняется быстрее, чем второй. Но если я подставлю строку в RecordSource формы, то при изменении fXID для обновления формы в первом случае нужно изменять form.RecordSource, а во втором всего лишь вызвать form.Requery. Я написал функцию funYID_list(lngXID as long), которая БЫСТРО возвращает список значений для поля fYID, разделенный запятыми. Пытаюсь её подставить в SQL:
select * from t_Y where fYID in (funYID_list(forms!foX!fXID))

НО... То ли лыжи не едут ... :(
Подскажите, можно ли ВООБЩЕ в запрос подставить функцию или поле с перечислением. Или как еще можно выкрутиться?

ЗЫ:Изменять каждый раз form.RecordSource очень не хочется .
А97
...
Рейтинг: 0 / 0
04.08.2004, 10:52:10
    #32634509
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
in (15,36897,56489) vs in (Select ...) ?
"select * from t_Y where fYID in (funYID_list(" & forms!foX!fXID & "))"
...
Рейтинг: 0 / 0
04.08.2004, 11:23:18
    #32634614
SRG
SRG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
in (15,36897,56489) vs in (Select ...) ?
Не. Не работает:

forms!foX!fXID =13
"funYID_list(" & forms!foX!fXID & ")"=funYID_list(13)="13;27644;58132"

запрос In (13;27644;58132) возвращает 9 записей
запрос in(funYID_list(" & forms!foX!fXID & "))" возвращает 0 записей
...
Рейтинг: 0 / 0
04.08.2004, 11:29:22
    #32634629
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
in (15,36897,56489) vs in (Select ...) ?
автор... в первом случае нужно изменять form.RecordSource, а во втором всего лишь вызвать form.Requery ...

И там и там одна строка (при условии, что у вас уже функция отписана).
Чем вам не нравиться подменять RecordSource - я всегда так деляю!
Код: plaintext
me.recordsource = "Select * From ... Where id in (" & my_func1(me.xid) & ")"
+
Разделять надо запятыми , а не ; (вот!!!)
...
Рейтинг: 0 / 0
04.08.2004, 12:02:11
    #32634722
SRG
SRG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
in (15,36897,56489) vs in (Select ...) ?
1. Тем, что .Requery выполняется быстрее - не тратится время на разбор SQL инструкции (парсинг, оптимизацию всяческую и т.д. ...) - эт мы проходили :)
2. при вызове me.recordsource ="..." сбрасываются свойства .filter (.filteron) и .orderby (.orderbyon). Для того, чтоб их снова установить, тратим опять же время (см.п.1)

Насчет "Разделять надо запятыми, а не ; (вот!!!)" - Да я не спорю. Просто у меня в настройках системы стоит разделитель ";", а строку "13;..." я скопировал не из кода, а из бланка в конструкторе запросов :)
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / in (15,36897,56489) vs in (Select ...) ? / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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