Курсор

Иухенио
Дата: 09.11.2012 14:10:36
Нужна помощь плиз!!! Есть две переменные, одна хранит название таблицы вторая хранит название одного поля из таблицы. В обычном случае мы вытаскиваем значение следующим образом: Table1.Field1.
Возможно ли вытащить значение из этой таблицы и этого поля обратившись через эти две переменные?
AndreTM
Дата: 09.11.2012 14:24:57
cTable='Table1'
cField='Field1'

Если не опасаетесь использовать макроподстановку
?&cTable..&cField

Более правильно
?EVALUATE(cTable+'.'+cField)
Jonny540
Дата: 09.11.2012 14:30:23
Иухенио,

+1
или так:
EVALUATE(cTable+'->'+cField)
Jonny540
Дата: 09.11.2012 14:41:04
AndreTM
[src]Если не опасаетесь использовать макроподстановку
А почему ее надо опасаться? Еще не помню случая, чтобы мп глючила. Другой вопрос, всегда ли оправдано ее использование...
AndreTM
Дата: 09.11.2012 14:49:47
Jonny540
Еще не помню случая, чтобы мп глючила
"Бездумный копипаст приводит к задумчивости" (Ц)
Это как раз с МП в Фоксе очень хорошо соотносится...
Иухенио
Дата: 09.11.2012 14:53:14
Все заработало! Спасибо большое! Очень помогло!
ВладимирМ
Дата: 09.11.2012 14:56:34
По возможности, следует избегать написание кода, в котором имена полей и таблиц хранятся в переменных. Не стоит стремиться писать универсальный код "на все случаи жизни". В большинстве случаев, в этом нет необходимости.

Кроме того, есть различные способы "макроподстановок". В зависимсоти от конкретной задачи. Подробнее можно почитать здесь

Макроподстановка
Иухенио
Дата: 09.11.2012 15:08:59
ВладимирМ,
Целиком и полностью с тобой согласен, но в моем случае название таблицы и полей меняются динамически. Если в двух словах пишу конвертер из DBF в MYSQL, соответственно таблицы все выбираются в процессе выполнения программы, названия полей у всех разные, поэтому и пришлось использовать переменные.
AndreTM
Дата: 09.11.2012 15:33:33
Как это "названия таблиц и полей меняются динамически"? В процессе?
Не проще ли структуры отбирать опять же в таблицы/курсоры... на крайний случай - есть же afields() и т.п.
И вообще, если вы, например, используете OLEDB/ODBC для связки, то зачем вам вычисления полей? - вы же таблицы можете просто переливать as is
Иухенио
Дата: 09.11.2012 16:21:17
ДА у меня БД лежит на MySQL, приложение пишу на FOX PRO, связь через ODBC. Алгоритм следующий: Выбирается таблица DBF (GetFILE()), затем считываю ее структуру в курсор1, затем выбираю БД и таблицу на MySQL (два ComboBox'а). После чего в Grid'е настраиваю соответствие полей. Т.е. в гриде 5 колонок, первая CheckBox'ы, вторая и третья обычные Text, четвертая Combobox, пятая обычный Text. В первой колонке с помощью checkbox'ов отмечаю какие поля будут участвовать в обмене, во второй и третьей название поля и тип поля SQL таблицы, в четвертой колонке находятся ComboBox'ы, с помощью них выбираю какое поле DBF таблицы будет записано в данное поле SQL таблицы, ну и при выборе значения в CMB, в последней колонке появляется тип выбранного поля. После того как установлено соответствие полей двух таблиц, результат сохраняю в курсоре. И уже организовываю цикл, в котором формируется запрос на запись данных в SQL таблицу. В этом же цикле, как раз и участвуют эти переменные, хранящие название таблицы и поля таблицы.