powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Alias как параметр в процедуру
15 сообщений из 15, страница 1 из 1
Alias как параметр в процедуру
    #33543084
Guest_125
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Передаю в процедуру имя 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
Alias как параметр в процедуру
    #33543111
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
? &c_alias..field1
С уважением, Алексей
...
Рейтинг: 0 / 0
Alias как параметр в процедуру
    #33543149
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

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

А почему такая патетика!
В чем тут макроподстановка уступает EVALUATE?
Если вы имеет в виду скорость, то да, уступает, но при написании этого кода в теле процедуры различие будет нивелироваться за счет того, что время этой команды пренебрежительно мало по сравнению с общим временем вызова и выполнения процедуры.
С уважением, Алексей.
...
Рейтинг: 0 / 0
Alias как параметр в процедуру
    #33543317
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На цикле в 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
Alias как параметр в процедуру
    #33543459
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то, это все ерунда. Т.е., конечно, замедление есть. Но, как мне кажется, разница в 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
Alias как параметр в процедуру
    #33543473
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, это верно, но придеться добавить несколько команд в функцию и тогда сравнивать скорости:
Код: plaintext
1.
2.
3.
4.
5.
m.lcAliasOld = ALIAS()
...
IF !EMPTY(m.lcAliasOld)
    SELECT(m.lcAliasOld)
ENDIF
...
С уважением, Алексей
...
Рейтинг: 0 / 0
Alias как параметр в процедуру
    #33543533
student///
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Alias как параметр в процедуру
    #33543546
Недоходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 student///
Так и запускаешь
...
Рейтинг: 0 / 0
Alias как параметр в процедуру
    #33543580
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
...
Рейтинг: 0 / 0
Alias как параметр в процедуру
    #33543770
student///
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Alias как параметр в процедуру
    #33544221
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
можно.

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

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

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

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


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


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