Самопроизвольноая отработка функции при прокрутке формы

AVKr
Дата: 15.09.2005 12:38:27
mdb. Access-2000.
---
Вводная:

Есть форма с полями - параметрами поиска. В ней подчиненная, в которой отображаются результаты поиска. Результаты строятся постоянной инструкцией SELECT... FROM плюс WHERE, которое собирается из заданных пользователем параметров. В инструкции SELECT одно из полей рассчитывается собственной пользовательской функцией fnAAA, которая находит в связанной (один-к-многим) таблице записи и выдает нужные значения из найденных записей через запятую.

---

Теперь проблема, которую обнаружил случайно, но решить пока не могу.

При запуске поиска срабатывает SELECT с указанным WHERE, но fnAAA срабатывает столько раз, сколько записей во всей таблице (т.е. не ограничиваясь инструкцией WHERE). Мало того, при прокрутке подчиненной формы слева направо эта сволочь опять срабатывает n раз подряд. И этого мало. Даже если просто водить мышкой по колонке с результатми работы с функции, она срабатывает снова и снова.

Это нормально? Я, честно говоря, в легком недоумении. Функция немного тяжеловата и это непроизвольное срабатывание мне, мягко говоря, не нравится.
вадя
Дата: 15.09.2005 12:46:55
похоже, у тебя есть еще какието завязки с обновление формы.

если есть .Recalk то постарайся от него избавиться.

постарайся правильнее построить логигу такой формы.
AVKr
Дата: 15.09.2005 13:24:27
вадя
похоже, у тебя есть еще какието завязки с обновление формы.
если есть .Recalk то постарайся от него избавиться.
постарайся правильнее построить логигу такой формы.



Так логики особой еще нет. Cостряпал примитивную форму, чтобы посмотреть как новая функция будет работать. Даже свойства форм по умолчанию не менял. Recalk-а, requery и т.п. - нет. Нажал кнопку - сработало. Отображение результатов - через form.recordsource = "SELECT...FROM...WHERE"
RVB
Дата: 15.09.2005 13:56:39
AVKr

Функция немного тяжеловата и это непроизвольное срабатывание мне, мягко говоря, не нравится.

Если действительно тормоза, создавайте (временную) таблицу с результатами работы ф-ии. А нет так нет.
вадя
Дата: 15.09.2005 14:06:36
1)
автор
При запуске поиска срабатывает SELECT с указанным WHERE, но
fnAAA срабатывает столько раз, сколько записей во всей таблице (т.е. не ограничиваясь инструкцией WHERE).



WHERE после того как произошел вывод всех данных соответственно для каждого данного и срабатывает

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

2)
автор
Мало того, при прокрутке подчиненной формы слева направо эта сволочь опять срабатывает n раз подряд. И этого мало. Даже если просто водить мышкой по колонке с результатми работы с функции, она срабатывает снова и снова.


измени первое потом это проверим
AVKr
Дата: 15.09.2005 14:24:28
RVB
AVKr

Функция немного тяжеловата и это непроизвольное срабатывание мне, мягко говоря, не нравится.

Если действительно тормоза, создавайте (временную) таблицу с результатами работы ф-ии. А нет так нет.


Тормозов пока нет, т.к. записей целых три :)) Но по общей логике - выполнение персональных запросов для каждой отобранной записи - дело небыстрое. На это, правда, я вынужден был пойти. Но многократная отрботка этих запросов, причем без видимой причины - это перебор! Вот с ним-то и борюсь.
AVKr
Дата: 15.09.2005 14:25:23
вадя
1)
автор
При запуске поиска срабатывает SELECT с указанным WHERE, но
fnAAA срабатывает столько раз, сколько записей во всей таблице (т.е. не ограничиваясь инструкцией WHERE).



WHERE после того как произошел вывод всех данных соответственно для каждого данного и срабатывает

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

2)
автор
Мало того, при прокрутке подчиненной формы слева направо эта сволочь опять срабатывает n раз подряд. И этого мало. Даже если просто водить мышкой по колонке с результатми работы с функции, она срабатывает снова и снова.


измени первое потом это проверим



ОК, попробую!
NG
Дата: 15.09.2005 15:36:11
Если в WHERE запроса стоит функция с параметрами, то она и должна вызываться в каждой записи. Если функция без параметров, то отработает только один раз.
Следствие: пусть ваша функция вернет строку, которую Вы подставите в условие WHERE и подставите готовую SQL-строку в источник записей формы, и тогда функция отработает только один раз.
Тоесть вместо
SRC vba]
S = "SELECT ...FROM ... WHERE [Field1]=fnAAA(, , ,)"
Me!SubForm.RecordSource = S
Me!SubForm.Requery
[/src]Надо сделать
Dim S as String
    S = "SELECT ...FROM ... WHERE [Field1]=" & fnAAA(, , ,)
    Me!SubForm.RecordSource = S
    Me!SubForm.Requery