Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 in (15,36897,56489) vs in (Select ...) ?  [new]
SRG
Member

Откуда: Архангельск
Сообщений: 59
Для одного 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
4 авг 04, 10:46    [857218]     Ответить | Цитировать Сообщить модератору
 Re: in (15,36897,56489) vs in (Select ...) ?  [new]
Темный
Member

Откуда:
Сообщений: 11941
"select * from t_Y where fYID in (funYID_list(" & forms!foX!fXID & "))"
4 авг 04, 10:52    [857243]     Ответить | Цитировать Сообщить модератору
 re: funYID_list(" & forms!foX!fXID & "))"  [new]
SRG
Member

Откуда: Архангельск
Сообщений: 59
Не. Не работает:

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 записей
4 авг 04, 11:23    [857434]     Ответить | Цитировать Сообщить модератору
 Re: in (15,36897,56489) vs in (Select ...) ?  [new]
paparome
Member

Откуда: Москва
Сообщений: 4312
автор
... в первом случае нужно изменять form.RecordSource, а во втором всего лишь вызвать form.Requery ...


И там и там одна строка (при условии, что у вас уже функция отписана).
Чем вам не нравиться подменять RecordSource - я всегда так деляю!
me.recordsource = "Select * From ... Where id in (" & my_func1(me.xid) & ")"
+
Разделять надо запятыми, а не ; (вот!!!)
4 авг 04, 11:29    [857467]     Ответить | Цитировать Сообщить модератору
 Re: Чем вам не нравиться подменять RecordSource  [new]
SRG
Member

Откуда: Архангельск
Сообщений: 59
1. Тем, что .Requery выполняется быстрее - не тратится время на разбор SQL инструкции (парсинг, оптимизацию всяческую и т.д. ...) - эт мы проходили :)
2. при вызове me.recordsource ="..." сбрасываются свойства .filter (.filteron) и .orderby (.orderbyon). Для того, чтоб их снова установить, тратим опять же время (см.п.1)

Насчет "Разделять надо запятыми, а не ; (вот!!!)" - Да я не спорю. Просто у меня в настройках системы стоит разделитель ";", а строку "13;..." я скопировал не из кода, а из бланка в конструкторе запросов :)
4 авг 04, 12:02    [857632]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить