powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Функции EVALUATE() не всё подвластно?
8 сообщений из 8, страница 1 из 1
Функции EVALUATE() не всё подвластно?
    #37513813
Gost76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гляньте, пожалуйста, на проблемку (VFP7)
- вот так:
cmd0="CREATE TABLE vyhod_new (fio(c80), passport c(10), adr c(58))"
&cmd0
работает,
а вот так:
cmd0="CREATE TABLE vyhod_new (fio(c80),passport c(10),adr c(58))"
EVALUATE(cmd0)
выдаётся Syntax error :(
А написано ж в хэлпе, что EVALUATE() хавает любое валидное Fox-выражение... И что, дескать, предпочтительнее использовать именно EVALUATE() вместо макроподстановок... :(
А в переменной cmd0 - точно содержится валидное выражение, иначе оно и через макроподстановку не выполнялось бы.
Или я чегой-то недопонял?
...
Рейтинг: 0 / 0
Функции EVALUATE() не всё подвластно?
    #37513822
Gost77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gost76Гляньте, пожалуйста, на проблемку (VFP7)
- вот так:
cmd0="CREATE TABLE vyhod_new (fio(c80), passport c(10), adr c(58))"
&cmd0
работает,
а вот так:
cmd0="CREATE TABLE vyhod_new (fio(c80),passport c(10),adr c(58))"
EVALUATE(cmd0)
выдаётся Syntax error :(
А написано ж в хэлпе, что EVALUATE() хавает любое валидное Fox-выражение... И что, дескать, предпочтительнее использовать именно EVALUATE() вместо макроподстановок... :(
А в переменной cmd0 - точно содержится валидное выражение, иначе оно и через макроподстановку не выполнялось бы.
Или я чегой-то недопонял?
И какой результат вычисления ожидается при Evaluate для "Create Table"? Теплое с мягким путаете :-)
...
Рейтинг: 0 / 0
Функции EVALUATE() не всё подвластно?
    #37513832
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EVALUATE() вычисляет выражение, а не выполняет команды. В твоем случае возможна только макроподстановка.
Gost76А написано ж в хэлпе, что EVALUATE() хавает любое валидное Fox-выражение... И что, дескать, предпочтительнее использовать именно EVALUATE() вместо макроподстановок... :(
Предпочтительно только потому что макроподстановка медленнее выполняется.
Лучше по возможности не использовать ни то, ни другое.
...
Рейтинг: 0 / 0
Функции EVALUATE() не всё подвластно?
    #37515050
Gost76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To Gost77:
Спасибо за участие, но разве не логично предполагать, что если уж хэлпом предлагается использовать EVALUATE() вместо макроподстановки, то, очевидно, что сей предлагаемый вариант долже полностью охватывать функциональность макроподстановки? Иначе - нЕзачем его и предлагать.

To Dima T:
Большое спасибо! Вот в таком изложении - всё понятно.
...
Рейтинг: 0 / 0
Функции EVALUATE() не всё подвластно?
    #37515146
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Причина, по которой, по возможности, следует избегать макроподстановок не вполне очевидная. И скорость это всего-лишь одна из причин. Причем, сама по себе, не такая уж и важная. Тут, скорее, комплекс причин, которые в двух словах не опишешь. Если интересуют подробности, то можно посмотреть здесь

Макроподстановка
...
Рейтинг: 0 / 0
Функции EVALUATE() не всё подвластно?
    #37515292
Фотография neznajka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри, писал под гостевым ником Gost76.
Спасибо Вам за полезнейшую статью, ВладимирМ!
Почерпнул оттуда много нужного. Я как раз и стараюсь избегать макроподстановок. Использую их, действительно, как "средство исполнения кода, окончательный синтаксис которого формируется в процессе его исполнения" в том случае, когда "лекарство хуже болезни" :)
В моей ситуации речь идёт о программе конвертирования исходных данных из текстового и эксельного формата в формат dbf-таблиц. Эту программу приходится постоянно модифицировать из-за того, что предприятия-поставщики исходных данных любят часто вносить непредсказуемые изменения в их формат: то колонки добавят/уберут, то изменят их очерёдность следования, то увеличат/уменьшат их предельную ширину, то... В общем, фантазия - безгранична. Поэтому и приходится некоторые команды (проверки содержимого исходных полей, создания "принимающих" dbf-таблиц, и т.п.) формировать каждый раз заново, ибо нельзя наперёд предсказать, как они должны будут выглядеть для текущего сеанса конвертации :)
Но после прочтения Вашей статьи - я вижу, что смогу ещё уменьшить количество используемых макроподстановок в программе.
Спасибо.
...
Рейтинг: 0 / 0
Функции EVALUATE() не всё подвластно?
    #37515731
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На всякий случай, по поводу создания таблиц есть такая возможность, как создание таблицы на основе предварительно созданного массива определенной структуры

Код: plaintext
CREATE TABLE MyTable FROM ARRAY MyArray

Какова должна быть структура массива MyArray можно посмотреть в описании к функции AFIELDS(). Однако следует заметить, что если создаются свободные таблицы (не включенные в контейнер базы данных), то реально из этого массива будут использоваться только первые 6 столбцов.

На примере исходного вопроса можно сделать так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Local laTableStru( 3 , 6 )
* Первое поле
laTableStru[ 1 , 1 ] = "fio"
laTableStru[ 1 , 2 ] = "C"
laTableStru[ 1 , 3 ] =  80 
laTableStru[ 1 , 4 ] =  0 
laTableStru[ 1 , 5 ] = .F.
laTableStru[ 1 , 6 ] = .F.

* Второе поле
laTableStru[ 2 , 1 ] = "passport"
laTableStru[ 2 , 2 ] = "C"
laTableStru[ 2 , 3 ] =  10 
laTableStru[ 2 , 4 ] =  0 
laTableStru[ 2 , 5 ] = .F.
laTableStru[ 2 , 6 ] = .F.

* Третье поле
laTableStru[ 3 , 1 ] = "adr"
laTableStru[ 3 , 2 ] = "C"
laTableStru[ 3 , 3 ] =  58 
laTableStru[ 3 , 4 ] =  0 
laTableStru[ 3 , 5 ] = .F.
laTableStru[ 3 , 6 ] = .F.

* Собственно создание таблицы
CREATE TABLE vyhod_new FROM ARRAY laTableStru
...
Рейтинг: 0 / 0
Функции EVALUATE() не всё подвластно?
    #37516140
Фотография neznajka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Благодарю Вас, ВладимирМ - я как раз только что и пробовал варианты применения команд CREATE TABLE ... FROM ARRAY ... и CREATE ... FROM myTable, ведь таблицу myTable тоже можно создавать и наполнять по своему усмотрению. В принципе - оба вирианта избавляют от макроподстановки.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Функции EVALUATE() не всё подвластно?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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