:: Visual Foxpro, Foxpro for DOS
Обращение к таблице открытой в другой рабочей области
S Alex

Сообщений: 3
Дата регистрации: 04.10.2018
Пишу процедуру для большого проекта и нужно обращаться к таблицам через алиас.
Пишу такой код:
PRIVATE m.t1, m.t2
m.t1=SYS(2015)
USE Table1.DBF IN 0 ALIAS (m.t1)
m.t2=SYS(2015)
USE Table2.DBF IN 0 ALIAS (m.t2) EXCLUSIVE
ZAP IN (m.t2)
SELECT(m.t1)
SCAN
APPEND BLANK IN (m.t2)
REPLACE (m.t2).fio WITH (m.t1).fio IN (m.t2)
ENDSCAN
и на строке:
REPLACE (m.t2).fio WITH (m.t1).fio IN (m.t2)
возникает ошибка:
Command contains unrecognized phrase/keyword.
Помогите пожалуйста.
Ratings: 0 negative/0 positive
Re: Обращение к таблице открытой в другой рабочей области
ssa

Сообщений: 12999
Откуда: Москва
Дата регистрации: 23.03.2005
S Alex
Пишу процедуру для большого проекта и нужно обращаться к таблицам через алиас.
Какая совершенно оригинальная задача...
Зачем/почему sys(2015)? Из-за боязни пересечения имен? Делаете все в одной сессии данных? Использовать предназначенные для преодоления этой проблемы средства не хотите потому, что не знаете про них? Или религия не позволяет?


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Обращение к таблице открытой в другой рабочей области
S Alex

Сообщений: 3
Дата регистрации: 04.10.2018
ssa
Какая совершенно оригинальная задача...
Да, задача простая.

ssa
Зачем/почему sys(2015)?
Проект закрытый, какие имена там использованы неизвестно, а мне нужно просто написать процедуру выгрузки в другую таблицу вот я и использовал SYS(2015).

ssa
Использовать предназначенные для преодоления этой проблемы средства не хотите
К сожалению, другого способа обратится к полю таблицы открытой в другой области как "имя таблицы"."имя поля" или "имя таблицы"->"имя поля" не нашел.
Ratings: 0 negative/0 positive
Re: Обращение к таблице открытой в другой рабочей области
ssa

Сообщений: 12999
Откуда: Москва
Дата регистрации: 23.03.2005
S Alex
ssa
Зачем/почему sys(2015)?
Проект закрытый, какие имена там использованы неизвестно, а мне нужно просто написать процедуру выгрузки в другую таблицу вот я и использовал SYS(2015).
Еще раз - что запрещает использовать средства, предназначенные для избежания конфликта имен?
Цитата:
ssa
Использовать предназначенные для преодоления этой проблемы средства не хотите
К сожалению, другого способа обратится к полю таблицы открытой в другой области как "имя таблицы"."имя поля" или "имя таблицы"->"имя поля" не нашел.
А вас не про это спрашивали. См. предыдущую цитату.
Кстати, показанный вами код легко переделывается в не требующий обращения к данным способом имя_таблицы.имя_поля


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Обращение к таблице открытой в другой рабочей области
Сергей777

Сообщений: 8
Дата регистрации: 26.05.2015
Лучше так :

USE Table1.DBF IN 0 ALIAS t1
USE Table2.DBF IN 0 ALIAS t2
ZAP IN t2
SELECT t1
SCAN
APPEND BLANK IN t2
REPLACE fio WITH t1.fio IN t2
ENDSCAN
Ratings: 0 negative/0 positive
Re: Обращение к таблице открытой в другой рабочей области
Сергей777

Сообщений: 8
Дата регистрации: 26.05.2015
Если алиасы заданы переменными, то так :
REPLACE fio WITH &t1..fio IN (m.t2)
или
REPLACE fio WITH Eval(m.t1 + '.fio') IN (m.t2)
Ratings: 0 negative/0 positive
Re: Обращение к таблице открытой в другой рабочей области
ssa

Сообщений: 12999
Откуда: Москва
Дата регистрации: 23.03.2005
Ну и, разумеется, без макроподстановки жизнь не мила... А обращение имя_таблицы.имя_поля, хоть и через макро, и через почти макро, единственное возможное...


------------------
Лень - это неосознанная мудрость.




Исправлено 1 раз(а). Последнее : ssa, 04.10.18 15:49
Ratings: 0 negative/0 positive
Re: Обращение к таблице открытой в другой рабочей области
Сергей777

Сообщений: 8
Дата регистрации: 26.05.2015
Не совсем понял, если имя_таблицы задано переменной, как можно ещё изобразить ?
Ratings: 0 negative/0 positive
Re: Обращение к таблице открытой в другой рабочей области
ssa

Сообщений: 12999
Откуда: Москва
Дата регистрации: 23.03.2005
S Alex
PRIVATE m.t1, m.t2
m.t1=SYS(2015)
USE Table1.DBF IN 0 ALIAS (m.t1)
m.t2=SYS(2015)
USE Table2.DBF IN 0 ALIAS (m.t2) EXCLUSIVE
ZAP IN (m.t2)
SELECT(m.t1)
SCAN
APPEND BLANK IN (m.t2)
REPLACE (m.t2).fio WITH (m.t1).fio IN (m.t2)
ENDSCAN
и на строке:
REPLACE (m.t2).fio WITH (m.t1).fio IN (m.t2)
возникает ошибка:
Command contains unrecognized phrase/keyword.
Помогите пожалуйста.
Вариант замены 1:
SELECT 0
USE Table2 EXCLUSIVE
ZAP
APPEND FROM Table1 FIELDS FIO
Продолжать?


------------------
Лень - это неосознанная мудрость.




Исправлено 1 раз(а). Последнее : ssa, 04.10.18 16:21
Ratings: 0 negative/0 positive
Re: Обращение к таблице открытой в другой рабочей области
ssa

Сообщений: 12999
Откуда: Москва
Дата регистрации: 23.03.2005
Сергей777
Не совсем понял, если имя_таблицы задано переменной, как можно ещё изобразить ?
Да-да, думать надо только всегда в одну и ту же сторону - в лоб. Искать способы БЕЗ указания ВМЕСТЕ в одной структуре алиас.поле - категорически запрещается.

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Обращение к таблице открытой в другой рабочей области
Сергей777

Сообщений: 8
Дата регистрации: 26.05.2015
Да, круто, наверное, этого хватит.
Ratings: 0 negative/0 positive
Re: Обращение к таблице открытой в другой рабочей области
Taran

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
Scan
Scatter name loSrc
Insert into (m.t2) (fio) values (m.loSrc.fio)
Endscan
Ratings: 0 negative/0 positive
Re: Обращение к таблице открытой в другой рабочей области
ssa

Сообщений: 12999
Откуда: Москва
Дата регистрации: 23.03.2005
SELECT 0
USE Table2 EXCLUSIVE
ZAP
Insert into Table1 (FIO) Select FIO from Table1


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Обращение к таблице открытой в другой рабочей области
S Alex

Сообщений: 3
Дата регистрации: 04.10.2018
Спасибо Всем за помощь. Вопрос решен.
Ratings: 0 negative/0 positive
Re: Обращение к таблице открытой в другой рабочей области
ssa

Сообщений: 12999
Откуда: Москва
Дата регистрации: 23.03.2005
S Alex
Спасибо Всем за помощь. Вопрос решен.
Как? Как обычно через макро?

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Обращение к таблице открытой в другой рабочей области
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Сергей, неужели тебя это действительно всё ещё волнует
Ты сделал всё что мог - далее уже выбор автора темы.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Обращение к таблице открытой в другой рабочей области
akvvohinc
Автор

Сообщений: 4201
Откуда: Москва
Дата регистрации: 11.11.2008
S Alex
Проект закрытый, какие имена там использованы неизвестно, а мне нужно просто написать процедуру выгрузки в другую таблицу вот я и использовал SYS(2015).

Вы считаете, что функция SYS(2015) более надежна, чем любой придуманный вами произвольный буквенно-цифровой набор аналогичной длины? Думаю, что даже произвольный алиас длиной 4-5 вполне надежен, чтобы не встретиться в "большом проекте".

Придумайте свою систему коротких алиас-имен - очень маловероятно, что она совпадет с чьей-то:
USE Table1.DBF IN 0 ALIAS МОЯ01
USE Table2.DBF IN 0 ALIAS МОЯ02

И тогда при необходимости таких REPLACE не придется пользоваться макро или EVAL().
Ratings: 0 negative/0 positive
Re: Обращение к таблице открытой в другой рабочей области
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Кто мешает использовать класс Session (или Form с PrivateDataSession - если в данной подзадаче нужна какая-никакая "визуализация процесса" или взаимодействие с пользователем) и вообще забить на то какие алиасы используются в этом антикварном проекте?


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Обращение к таблице открытой в другой рабочей области
akvvohinc
Автор

Сообщений: 4201
Откуда: Москва
Дата регистрации: 11.11.2008
Igor Korolyov
Кто мешает использовать класс Session

Никто.
Но раз объяснение использования SYS(2015) было таким, каким оно было, то можно предположить, что класс Session никогда не использовался (а осваивать его ради такой задачи и я бы не стал).

Возможно также, что нам представлена лишь часть "айсберга", а в процедуре используются и вызовы некоторых компонент, работающих с таблицами общей сессии. Иначе и SYS(2015) не нужен - Фокс сам откроет таблицу с некоторым алиасом, отличным от любого уже имеющегося в текущей сессии, который можно сохранить в переменной, если уж это казалось нужным:
SELECT 0
USE Table1 && если алиас Table1 уже существует, то Фокс назначит некоторый алиас с уникальным именем
m.t1 = ALIAS()



Исправлено 1 раз(а). Последнее : akvvohinc, 07.10.18 16:52
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 19 shock19 vadpost  (Гостей: 17)

© 2000-2024 Fox Club 
Яндекс.Метрика