|
|
|
Спрогнозировать, сколько раз отработает пользовательская процедура
|
|||
|---|---|---|---|
|
#18+
Как определить сколько раз отработает пользовательская UDF-процедура, являющаяся полем sql-запроса по, например, трём свободным таблицам. Т.е., в запросе: Select ..., UDF(a1, ..., an) As Поле1 From Table1, Table2, Table3 Into Cursor Курсор1 Можно, конечно, вставить счётчик в процедуру. И он покажет, сколько раз отработала процедура. Но СКОЛЬКО надо знать ДО выполнения выборки. Как это можно расчитать для N-таблиц? Есть ли здесь зависимость? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2008, 00:21 |
|
||
|
Спрогнозировать, сколько раз отработает пользовательская процедура
|
|||
|---|---|---|---|
|
#18+
ну максимум - это декартово произведение таблиц. Умножить кол-во записей всех 3-х и получится экстремум ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2008, 08:26 |
|
||
|
Спрогнозировать, сколько раз отработает пользовательская процедура
|
|||
|---|---|---|---|
|
#18+
Hel!Riserну максимум - это декартово произведение таблиц. Умножить кол-во записей всех 3-х и получится экстремум НЕ ПРАВИЛЬНО Умножить кол-во записей всех 3-х + 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2008, 08:58 |
|
||
|
Спрогнозировать, сколько раз отработает пользовательская процедура
|
|||
|---|---|---|---|
|
#18+
PaulWist Умножить кол-во записей всех 3-х + 1 Не всё так просто... Я вставлял счётчик и получалось, что количество вызовов немногим больше количества записей основной таблицы! Но, к сожалению, мне надо знать это количество до начала Select! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2008, 10:31 |
|
||
|
Спрогнозировать, сколько раз отработает пользовательская процедура
|
|||
|---|---|---|---|
|
#18+
А проверить Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Обращаю внимание, что записей 6 шт, НО счетчик насчитал 7 обращений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2008, 10:40 |
|
||
|
Спрогнозировать, сколько раз отработает пользовательская процедура
|
|||
|---|---|---|---|
|
#18+
Валентин Н.КарелинНо, к сожалению, мне надо знать это количество до начала Select! Советую "в консерватории что-то подправить" (с). В смысле, изменить способ решения таким образом, чтобы этого не требовалось. В общем случае, заранее предсказать сколько раз будет вызвана подобная функция - проблематично. Минимум, как и было сказано, произведение общего количества записей всех таблиц источников плюс 1. Но, при определенных условиях, может быть и больше... Если бы Вы описали что именно надо сделать, а не тот способ, которым Вы это решаете, то, возможно, Вам подсказали бы более простое решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2008, 11:12 |
|
||
|
Спрогнозировать, сколько раз отработает пользовательская процедура
|
|||
|---|---|---|---|
|
#18+
ВладимирМЕсли бы Вы описали что именно надо сделать, а не тот способ, которым Вы это решаете, то, возможно, Вам подсказали бы более простое решение. Да сделать надо вещь, вроде, элементарную. Самый простой вариант - при выборке используются несколько таблиц, одна основная, к ней подвязываются 6-10 справочных. При большом объёме основной таблицы фокс на Select "замораживается" и "размораживается" после его отработки. Возникает эффект "зависания". Чтобы не пугать юзера я в Select зашиваю через UDF-процедуру ActiveX ProgressBar. Всё красиво, юзер любуется "бегущим" прогрессом выборки и легко может оценить время ожидания. Но оказывается, что визуально прогресс не всегда "добегает" до конца выборки, хуже того, иногда он "забегает" за ProgressBar.Мах и тут выдаётся сообщение об ошибке. Вот мне и надо оценить свойство ProgressBar.Мах до начала Select . Помнится в добрые времена господства FoxPro 2.0-2.6 такой системный счётчик на Select работал (в сиреневом окне). Значит, как то ProgressBar.Мах можно точно расчитать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2008, 15:17 |
|
||
|
Спрогнозировать, сколько раз отработает пользовательская процедура
|
|||
|---|---|---|---|
|
#18+
Валентин Н.Карелин... Помнится в добрые времена господства FoxPro 2.0-2.6 такой системный счётчик на Select работал (в сиреневом окне) Так фоксовый прогресбар должен появиться: Код: plaintext 1. 2. 3. Или можно AVI-шку какую крутить, чтоб у юзера мыслей о зависании проги не было. Сколько времени уходит на сам вызов функции не мерил? Запусти свой SELECT c UDF() и без. Может оно того не стоит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2008, 15:31 |
|
||
|
Спрогнозировать, сколько раз отработает пользовательская процедура
|
|||
|---|---|---|---|
|
#18+
Валентин Н.Карелин Да сделать надо вещь, вроде, элементарную. Самый простой вариант - при выборке используются несколько таблиц, одна основная, к ней подвязываются 6-10 справочных. При большом объёме основной таблицы фокс на Select "замораживается" и "размораживается" после его отработки. Возникает эффект "зависания". Чтобы не пугать юзера я в Select зашиваю через UDF-процедуру ActiveX ProgressBar. Всё красиво, юзер любуется "бегущим" прогрессом выборки и легко может оценить время ожидания. 1. Что говорит ф-ия sys(3054) на select 2. Какой обьем результирующего курсора ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2008, 15:36 |
|
||
|
Спрогнозировать, сколько раз отработает пользовательская процедура
|
|||
|---|---|---|---|
|
#18+
Валентин Н.Карелин иногда он "забегает" за ProgressBar.Мах и тут выдаётся сообщение об ошибке. Что же это он такой неустойчивый-то? Это прогресс-бару надо мозги вправлять, а не пытаться вычислить количество записей, которое еще только будет получено. Хотите в пророка поиграть, будущее по-предсказывать? Программирование вроде как к прикладной математике относится, то есть точная наука, а не гадание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2008, 15:54 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=35441755&tid=1587503]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
| others: | 240ms |
| total: | 381ms |

| 0 / 0 |
