Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Спрогнозировать, сколько раз отработает пользовательская процедура / 10 сообщений из 10, страница 1 из 1
21.07.2008, 00:21
    #35441473
Валентин Н.Карелин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спрогнозировать, сколько раз отработает пользовательская процедура
Как определить сколько раз отработает пользовательская UDF-процедура, являющаяся полем sql-запроса по, например, трём свободным таблицам. Т.е., в запросе:

Select ..., UDF(a1, ..., an) As Поле1 From Table1, Table2, Table3 Into Cursor Курсор1

Можно, конечно, вставить счётчик в процедуру. И он покажет, сколько раз отработала процедура. Но СКОЛЬКО надо знать ДО выполнения выборки. Как это можно расчитать для N-таблиц? Есть ли здесь зависимость?
...
Рейтинг: 0 / 0
21.07.2008, 08:26
    #35441585
Hel!Riser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спрогнозировать, сколько раз отработает пользовательская процедура
ну максимум - это декартово произведение таблиц. Умножить кол-во записей всех 3-х и получится экстремум
...
Рейтинг: 0 / 0
21.07.2008, 08:58
    #35441604
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спрогнозировать, сколько раз отработает пользовательская процедура
Hel!Riserну максимум - это декартово произведение таблиц. Умножить кол-во записей всех 3-х и получится экстремум

НЕ ПРАВИЛЬНО

Умножить кол-во записей всех 3-х + 1
...
Рейтинг: 0 / 0
21.07.2008, 10:31
    #35441755
Валентин Н.Карелин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спрогнозировать, сколько раз отработает пользовательская процедура
PaulWist
Умножить кол-во записей всех 3-х + 1

Не всё так просто... Я вставлял счётчик и получалось, что количество вызовов немногим больше количества записей основной таблицы! Но, к сожалению, мне надо знать это количество до начала Select!
...
Рейтинг: 0 / 0
21.07.2008, 10:40
    #35441773
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спрогнозировать, сколько раз отработает пользовательская процедура
А проверить

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE CURSOR t1 (f1 int)
CREATE CURSOR t2 (f1 int)
CREATE CURSOR t3 (f1 int)

INSERT INTO t1 VALUES ( 1 )

INSERT INTO t2 VALUES ( 2 )
INSERT INTO t2 VALUES ( 2 )

INSERT INTO t3 VALUES ( 3 )
INSERT INTO t3 VALUES ( 4 )
INSERT INTO t3 VALUES ( 3 )

a =  0 

SELECT stest(), * FROM t1, t2, t3 


FUNCTION stest
a = a +  1 
RETURN a
ENDFUNC 

Обращаю внимание, что записей 6 шт, НО счетчик насчитал 7 обращений.
...
Рейтинг: 0 / 0
21.07.2008, 11:12
    #35441863
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спрогнозировать, сколько раз отработает пользовательская процедура
Валентин Н.КарелинНо, к сожалению, мне надо знать это количество до начала Select!
Советую "в консерватории что-то подправить" (с). В смысле, изменить способ решения таким образом, чтобы этого не требовалось.

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

Если бы Вы описали что именно надо сделать, а не тот способ, которым Вы это решаете, то, возможно, Вам подсказали бы более простое решение.
...
Рейтинг: 0 / 0
21.07.2008, 15:17
    #35442642
Валентин Н.Карелин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спрогнозировать, сколько раз отработает пользовательская процедура
ВладимирМЕсли бы Вы описали что именно надо сделать, а не тот способ, которым Вы это решаете, то, возможно, Вам подсказали бы более простое решение.

Да сделать надо вещь, вроде, элементарную. Самый простой вариант - при выборке используются несколько таблиц, одна основная, к ней подвязываются 6-10 справочных.

При большом объёме основной таблицы фокс на Select "замораживается" и "размораживается" после его отработки. Возникает эффект "зависания". Чтобы не пугать юзера я в Select зашиваю через UDF-процедуру ActiveX ProgressBar. Всё красиво, юзер любуется "бегущим" прогрессом выборки и легко может оценить время ожидания.

Но оказывается, что визуально прогресс не всегда "добегает" до конца выборки, хуже того, иногда он "забегает" за ProgressBar.Мах и тут выдаётся сообщение об ошибке.

Вот мне и надо оценить свойство ProgressBar.Мах до начала Select . Помнится в добрые времена господства FoxPro 2.0-2.6 такой системный счётчик на Select работал (в сиреневом окне). Значит, как то ProgressBar.Мах можно точно расчитать
...
Рейтинг: 0 / 0
21.07.2008, 15:31
    #35442679
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спрогнозировать, сколько раз отработает пользовательская процедура
Валентин Н.Карелин... Помнится в добрые времена господства FoxPro 2.0-2.6 такой системный счётчик на Select работал (в сиреневом окне)
Так фоксовый прогресбар должен появиться:
Код: plaintext
1.
2.
3.
SET TALK ON
SELECT ...
SET TALK OFF

Или можно AVI-шку какую крутить, чтоб у юзера мыслей о зависании проги не было.

Сколько времени уходит на сам вызов функции не мерил? Запусти свой SELECT c UDF() и без. Может оно того не стоит?
...
Рейтинг: 0 / 0
21.07.2008, 15:36
    #35442695
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спрогнозировать, сколько раз отработает пользовательская процедура
Валентин Н.Карелин
Да сделать надо вещь, вроде, элементарную. Самый простой вариант - при выборке используются несколько таблиц, одна основная, к ней подвязываются 6-10 справочных.

При большом объёме основной таблицы фокс на Select "замораживается" и "размораживается" после его отработки. Возникает эффект "зависания". Чтобы не пугать юзера я в Select зашиваю через UDF-процедуру ActiveX ProgressBar. Всё красиво, юзер любуется "бегущим" прогрессом выборки и легко может оценить время ожидания.


1. Что говорит ф-ия sys(3054) на select
2. Какой обьем результирующего курсора
...
Рейтинг: 0 / 0
21.07.2008, 15:54
    #35442762
Спрогнозировать, сколько раз отработает пользовательская процедура
Валентин Н.Карелин иногда он "забегает" за ProgressBar.Мах и тут выдаётся сообщение об ошибке.
Что же это он такой неустойчивый-то? Это прогресс-бару надо мозги вправлять, а не пытаться вычислить количество записей, которое еще только будет получено. Хотите в пророка поиграть, будущее по-предсказывать? Программирование вроде как к прикладной математике относится, то есть точная наука, а не гадание.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Спрогнозировать, сколько раз отработает пользовательская процедура / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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