Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Alias как параметр в процедуру / 15 сообщений из 15, страница 1 из 1
14.02.2006, 12:14
    #33543084
Guest_125
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Alias как параметр в процедуру
Передаю в процедуру имя Alias-а. А как теперь в процедуре обратиться к полю ???
Что-то приблезительно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
DO Proc1 WITH "tabl_1"

PROCEDURE Proc1
PARAMETERS m.c_alias
......
* Хочу работать с содержимым записи определенного поля
* ?c_alias.field1
......
ENDPROC
Или это как-то по другому.
...
Рейтинг: 0 / 0
14.02.2006, 12:21
    #33543111
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Alias как параметр в процедуру
? &c_alias..field1
С уважением, Алексей
...
Рейтинг: 0 / 0
14.02.2006, 12:32
    #33543149
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Alias как параметр в процедуру
боже упаси
только не через макроподстановку,
я Вас умоляю, забудьте как страшный сон

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Proc1("tabl_1")

PROCEDURE Proc1
LPARAMETERS tcAlias
local lValue
lValue=evaluate(tcAlias+".Field")
......
ENDPROC

...
Рейтинг: 0 / 0
14.02.2006, 12:39
    #33543186
Guest_125
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Alias как параметр в процедуру
Большое спасибо!!!
...
Рейтинг: 0 / 0
14.02.2006, 12:43
    #33543206
Недоходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Alias как параметр в процедуру
2 alex11100
А какая разница через что?
...
Рейтинг: 0 / 0
14.02.2006, 13:01
    #33543271
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Alias как параметр в процедуру
alex11100боже упаси
только не через макроподстановку,
я Вас умоляю, забудьте как страшный сон

А почему такая патетика!
В чем тут макроподстановка уступает EVALUATE?
Если вы имеет в виду скорость, то да, уступает, но при написании этого кода в теле процедуры различие будет нивелироваться за счет того, что время этой команды пренебрежительно мало по сравнению с общим временем вызова и выполнения процедуры.
С уважением, Алексей.
...
Рейтинг: 0 / 0
14.02.2006, 13:11
    #33543317
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Alias как параметр в процедуру
На цикле в 1000000 (миллион) !!!!
EVALUATE перед & у меня дает выигрыш примерно в 1.6 раза.
Проверьте сами:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
USE IN SELECT("Test1")
CREATE CURSOR Test (F1 INT)
INSERT INTO Test (F1) VALUES ( 1 )

a = ALIAS()
t1 = SECONDS()
FOR i =  1  TO  1000000 
	b = &a..F1
ENDFOR
t2 = SECONDS()
? t2 -t1

t1 = SECONDS()
FOR i =  1  TO  1000000 
	b = EVALUATE(a + ".F1")
ENDFOR
t2 = SECONDS()
? t2 - t1

USE IN SELECT("Test1")
С уважением, Алексей
...
Рейтинг: 0 / 0
14.02.2006, 13:41
    #33543459
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Alias как параметр в процедуру
Вообще-то, это все ерунда. Т.е., конечно, замедление есть. Но, как мне кажется, разница в 1...2 секунду на миллионе операций - это настолько ничтожная задержка, что не стоит из-за этого сильно напрягаться.

Тут вопрос не столько в скорости, сколько в читабельности кода. EVALUATE() "понятнее", чем символ макроподстановки. Конечно, вопрос привычки, но для чтения "с листа" явная функция предпочтительнее одиночного значка, который можно еще и не заметить...

Кроме того, в данном конкретном случае можно все это оформить по другому

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
DO Proc1 WITH "tabl_1"

PROCEDURE Proc1
PARAMETERS m.c_alias
......
* Переключаюсь на указанную рабоучую область
SELECT (m.c_alias)
* Чтение значения поля в текущей рабочей области
* ?field1
......
ENDPROC

Если алиас таблицы не указан явно, то FoxPro предполагает, что речь идет о поле таблицы в текущей рабочей области. А непосредственно перед чтением значения я как раз и сделал явное переключение в нужную рабочую область.

А теперь сравнивайте с макроподстановкой У меня получился выигрыш в скорости на порядок.
...
Рейтинг: 0 / 0
14.02.2006, 13:46
    #33543473
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Alias как параметр в процедуру
Да, это верно, но придеться добавить несколько команд в функцию и тогда сравнивать скорости:
Код: plaintext
1.
2.
3.
4.
5.
m.lcAliasOld = ALIAS()
...
IF !EMPTY(m.lcAliasOld)
    SELECT(m.lcAliasOld)
ENDIF
...
С уважением, Алексей
...
Рейтинг: 0 / 0
14.02.2006, 13:59
    #33543533
student///
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Alias как параметр в процедуру
alex11100боже упаси
только не через макроподстановку,
я Вас умоляю, забудьте как страшный сон

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Proc1("tabl_1")

PROCEDURE Proc1
LPARAMETERS tcAlias
local lValue
lValue=evaluate(tcAlias+".Field")
......
ENDPROC



Алекс, а если мне надо запустить переданную строку?

cSQL = 'SELECT .. FROM...'
&cSQL
как быть?
...
Рейтинг: 0 / 0
14.02.2006, 14:02
    #33543546
Недоходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Alias как параметр в процедуру
2 student///
Так и запускаешь
...
Рейтинг: 0 / 0
14.02.2006, 14:10
    #33543580
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Alias как параметр в процедуру
когда 1 раз пнули - тады не видно

недавно
код с 2 часов до 2 минут получилось
сканили табл и колонки значения вставляли макроподстановкой

лучше так
Код: plaintext
1.
2.
3.
4.
5.
local lcSQLCmd
text to lcSQLCmd textmer noshow
      select from trr where tt=<<allt(str(kk))>>
endtext
&lcSQLCmd
...
Рейтинг: 0 / 0
14.02.2006, 14:59
    #33543770
student///
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Alias как параметр в процедуру
alex11100когда 1 раз пнули - тады не видно

недавно
код с 2 часов до 2 минут получилось
сканили табл и колонки значения вставляли макроподстановкой

лучше так
Код: plaintext
1.
2.
3.
4.
5.
local lcSQLCmd
text to lcSQLCmd textmer noshow
      select from trr where tt=<<allt(str(kk))>>
endtext
&lcSQLCmd


спасибо буду знать.. хотя это хорошо если запрос супердлинный...
вот интересно в таком случае lcSQLCmd можно передать в
строковую Property класса или формы??? или у нее ограничение есть?
...
Рейтинг: 0 / 0
14.02.2006, 16:41
    #33544221
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Alias как параметр в процедуру
можно.

можно даже так

Код: plaintext
1.
2.
3.
text to thisform.SQLCmd textmer noshow
      select from trr where tt=<<allt(str(kk))>>
endtext
...
Рейтинг: 0 / 0
14.02.2006, 17:04
    #33544302
student///
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Alias как параметр в процедуру
alex11100можно.

можно даже так

Код: plaintext
1.
2.
3.
text to thisform.SQLCmd textmer noshow
      select from trr where tt=<<allt(str(kk))>>
endtext


класс - спасибо
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Alias как параметр в процедуру / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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