Как открываются файлы в Source ABC ?

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Андрей
Старожил
Сообщения: 277
Зарегистрирован: 30 Октябрь 2005, 3:58

Как открываются файлы в Source ABC ?

Сообщение Андрей »

Прошу прощения за ламерский вопрос, однако не могу понять, какой принцип открытия файлов в ABC в шаблоне Source.
В общем так, достаточно элементарно:
Есть брауз, позиционируемся на записи и жмем кнопочку "Расчет". По ней вызывается процедура Calc (шаблон Source). Да... в этом браузе включены поля таблиц T1 и Т2. А в Calc-e описываю в Other Files T1, T2 и Т3 - по ним производится некоторый расчет. Что имеем - та часть, относящаяся к Т1 и Т2 -Ок, а вот расчет по Т3 срабатывает только на 2-й раз вызова Calc, так понимаю не открыта Т3. Почему тогда таблица Т3 со второго раза открывается ? Пробую так:

Access:T3.Init()
MESSAGE(ERROR()) ->
Access:Т3.Open()
MESSAGE(ERROR()) -> Entry Not found
MESSAGE(status(T3)) -> 0
(после 1-й попытки)
Т.е. не открывается.
Но если вместо этого(или выше) сделать Access:Т3.Fetch(ххх_key), то работает

Ежели кому не лень, опишите pls кратенько механизм открытия файлов (ну хотя бы в этом случае) и как правильно надо делать. Спасибо !
Андрей
Старожил
Сообщения: 277
Зарегистрирован: 30 Октябрь 2005, 3:58

Re: Как открываются файлы в Source ABC ?

Сообщение Андрей »

Уточняю свой вопрос, может непонятно изложил ранее

Есть брауз, позиционируемся на записи и жмем кнопочку "Расчет". По ней вызывается процедура Calc (шаблон Source). Да... в этом браузе включены поля таблиц T1 и Т2. А в Calc-e описываю в Other Files T1, T2 и Т3 - по ним производится некоторый расчет. Что имеем - та часть, относящаяся к Т1 и Т2 -Ок,
а вот в расчет по Т3 (я там ищу запись через Set(T3_key,T3_key);Access.Т3.Next() ), срабатывает только на 2-й раз вызова Calc. Ставлю перед Next() MESSAGE(status(T3)), вижу что Т3 не открыт.
Вопрос 1: Файлы надо принудительно открывать что ли ? А почему при 2-м вызове Next() отрабатывает ?

Ладно пытаюсь открыть Т3 явно: Access:T3.Init(); Access:Т3.Open() - результат тот же
Вопрос 2: почему не открывается, что не так пишу

И наконец, просто из интереса перед Set(T3_key,T3_key);Access.Т3.Next() ставлю Access:Т3.Fetch(ххх_key) и вижу что и Fetch отрабатывает правильно и Next ниже тоже.
Вопрос 3: Почему Access.Т3.Next() не работает(файл не открыт), а Access:Т3.Fetch(ххх_key) работает ?
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8040
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Как открываются файлы в Source ABC ?

Сообщение Игорь Столяров »

Привет ! Как-то все длиннннннно описано, но дочитал ... ;)

В Global Properties APP на закладке "File Control" просто отключи опцию "Defer opening files until accesssed".
И все будет работать, хотя это и не есть хорошо. Если из названия не понятен смысл ее действия - см. справку.
Да ! Методы работают одинаково независимо от типа шаблона процедуры (Source, Browse, Report и т.д)
Make Clarion Great Again ! 😎
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3291
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Re: Как открываются файлы в Source ABC ?

Сообщение Дед Пахом »

В Source процедуре есть опции "Generate Open/Close Files Routines" и "Generate Save/Restore Files Routines" - включите обе и в коде в начале процедуры
do SaveFiles
do OpenFiles

а в конце
do CloseFiles
do RestoreFiles
С уважением, ДП
Андрей
Старожил
Сообщения: 277
Зарегистрирован: 30 Октябрь 2005, 3:58

Re: Как открываются файлы в Source ABC ?

Сообщение Андрей »

Вот что прочел в ИноНете:
>>The Filemanager object will call UseFile() when a method needs it. But
>>unfortunately, not all calls use FileManager (such as the Clear() and
>>SET() ). So, if you need the file/table for other calls you need to
>>call UseFile()
>>
>>In general, the "Access:Myfile..." or "Relate:Myfile..." is the
>>FileManager, others are not.
>>
>>The problem only occurs in your embeds, the template code is ok. And
>>it usually occurs in embeds in the window Init() method, where the
>>other methods have not run yet.
>>
>>In your example code, the open is not actually done until the next().
>>Unless, something else already opened it (which can make some cases
>>look intermittent).
>>
>>Always call UseFile() when you might need it. It only checks a flag if
>>it is already open, so it does not add much.
>>
>>The IDE does not know the code, only the templates and objects know...

Значит все же Source особняком стоит.... я правильно понял ?
Кто знает как UseFile() полезно использовать ?
Андрей
Старожил
Сообщения: 277
Зарегистрирован: 30 Октябрь 2005, 3:58

Re: Как открываются файлы в Source ABC ?

Сообщение Андрей »

Забавненько все же этот LazyOpen работает - Fetch() значит сигнализирует что надо файл задействовать а вот Set/Next - почему то нет.
Ответить