ABC FileManager

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Гость

Сообщение Гость »

Здравствуйте, ClaList.

Пытаюсь через ABC классы организовать циклы обработки записей, но
никак непойму как установить ключ и установить текущую запись по
содержимому ключа. Без ABC все просто:

Код: Выделить всё

Open(MyFile)
Set(MyKey,MyKey)
Loop
   Next(MyFile);If ErroCode() Then Break End
End
А как это сделать на ABC, вернее как сделать Set(MyKey,MyKey) ????

Остальное приблительно так:

Код: Выделить всё

Loop Until Access:MyFile.GetEof()
 If Access:MyFile.Next()<> Level:Benign Then Break End
End
Пробовал перед циклом ставить Set(MyKey,MyKey) - неработает (Перед
этим еще вызывал метод UseFile()).
В общем, первый раз вызываю процедуру - работает, второй и более -
неработает, т.е. ненаходит записи.

Подскажите, как решить эту проблему!!!!

C55, ABC

--
С уважением,
S.P. mailto:SDS2004@Tut.By
Написал: ClaList(2)
Гость

Сообщение Гость »

В АВС файлы открываются принудительно в определенной точке
модуля.Через ABC-дизайнер подключите ваш table к модулю
и в точке embeds "After open files" пишите свой set( key,key).
Я так делал много раз.Вроде все работает.
Успехов! Lsgsoftware
Гость

Сообщение Гость »

А как это сделать на ABC, вернее как сделать Set(MyKey,MyKey) ????
Так и сделать. Set(MyKey,MyKey) :)
Loop Until Access:MyFile.GetEof()
В принципе, метод Next() даст соответствующий код завершения. Так что
вполне достаточно просто Loop ...

Или, на крайний случай, Loop While ~Access:File.Next()
Пробовал перед циклом ставить Set(MyKey,MyKey) - неработает (Перед
этим еще вызывал метод UseFile()).
Метод UseFile имеет смысл только при установке флажка "Defer Files until
opened". Насколько я понимаю, он не рекомендуется к использованию без
крайней необходимости. А в документации по CW6 об этом прямо
говорится, тем более, что любой ABC-шаблон исполняет UseFile
автоматически...

А ещё положено Access:File.Open() - если файл не открыт, его надлежит
открыть. И Access:File.Close() перед завершением процедуры. Впрочем,
если это не Source-процедура, файл достаточно просто включить в список
Files в свойствах процедуры.
Подскажите, как решить эту проблему!!!!
В простейшем случае так...

Код: Выделить всё

Access:File.Open()
Set(Key,Key)
Loop
  If Access:File.Next() Then Break.
  ...
End
Access:File.Close()
--
C уважением
Юрий Философов
Адрес:yufil@mail.ru

(Добавление)

Привет

Не плохо бы ещё и ключевые поля перед Set(Key,Key) определить.

Михаил

Благодарю за совет. Все было сделано приблизительно так, за
исключением Access:...Open (но файл уже был открыт) и наличием
Access:MyFile.GetEof(). Вот проблема и заключалась в последнем.

Я, конечно, знаю что Eof нерекомендуется использовать ( есть
приложения с использованием разных драйверов баз данных, включая и
SQL), и знаю к чему это приводит. Но сейчас использую TOPSPEED, а с ним
таких проблем незамечал и решил упростить обработку ошибок.

Да, такое упрощение отнимает 2 дня плодотворной работы... Блин...

--
С уважением,
S.P. mailto:SDS2004@Tut.By
Я, конечно, знаю что Eof нерекомендуется использовать ( есть
приложения с использованием разных драйверов баз данных, включая и
SQL), и знаю к чему это приводит. Но сейчас использую TOPSPEED, а с ним
таких проблем незамечал и решил упростить обработку ошибок.
Ну куда уж проще? Next все ошибки как надо обработает. И TPS здесь
совершенно не при чем. При многопользовательской работе не зависимо от
драйвера EOF не гарантирует а) обработку всех записей, б) что если не EOF,
то запись существует и ее можно прочесть. Короче, временами вообще не
выполняет свои функации ;-)
Да, такое упрощение отнимает 2 дня плодотворной работы... Блин...
И порождает очень трудно диагностируемые фантомные проблемы.

WBR, Nick Tsigouro Mailto: N.Tsigouro@mtu-net.ru
Написал: ClaList(2)
Гость

Сообщение Гость »

Nick, неужели ты так думаешь ? Что он там обрабатывает?

If Access:File.Next() Then Break.

Он конечно разбирается готов ли файл, есть ли какая ошибка, но даже не
имеет средств ждать и повторить после отлова IsHeldErr. Так что на
мой, пока еще мало просвещенный взгляд, ничего он не обрабатывает, вместо него это
делают User c Programмerom, а вот со страшной силой тормозит это точно (см. код
FileManager.NextServer, чего кстати этот не описан в abcref.pdf ?) и кукарекает
без надежды на рассвет. Для одной двух записей его конечно можно использовать,
а вот для тысяч... Или я не прав? А если не прав мог бы кто
познакомить меня с хорошими примерами работы с отдельными классами, а
то SV не знакомо с нашими требованиями к тех документации и очень меня
огорчает своим ABC описаловом. Plz, конечно, отдам долг когда лучше
разберусь :).

--
С уважением,
SAN mailto:vgsan@yandex.ru

(Добавление)
Nick, неужели ты так думаешь ? Что он там обрабатывает?
RTFM. "The Next method handles any errors, except end of file, that occur
while getting the record."

If Access:File.Next() Then Break.
Вообще-то правильно

Код: Выделить всё

LOOP WHILE Access:File.Next() = Level:Benign
   ![...]
END
Он конечно разбирается готов ли файл, есть ли какая ошибка, но даже не
имеет средств ждать и повторить после отлова IsHeldErr. Так что на...
А ты в ABC хоть один HOLD() видел? Я нет. А со своими холдами сам и
разбирайся. Есть TryNext, и обрабатывай свои проблемы самостоятельно.
... мой, пока еще мало просвещенный взгляд, ничего он не
обрабатывает, вместо него это...
Не нравится, отнаследуй и сделай свой. На то и ООП. Можешь вообще полностью
свой FM использовать.
... делают User c Programмerom, а вот со страшной силой тормозит это
точно (см. код...
Смотрю.

Код: Выделить всё

    IF SELF.UseFile() THEN RETURN Level:Fatal.
    LOOP
      SELF.AtEOF = 0
      IF Prev
        PREVIOUS(SELF.File)
      ELSE
        NEXT(SELF.File)
      END
      CASE ERRORCODE()
Дальше только обработка ошибок. В основной ветке

Код: Выделить всё

      OF NoError
        RETURN Level:Benign
Что-то я не пойму, что ты здесь такое супернеэффективное нашел. Обработку
SELF.AtEOF можешь полностью выбросить. Она только для тех, кто все еще без
EOF жить не может.
FileManager.NextServer, чего кстати этот не описан в abcref.pdf
А зачем бумагу переводить? Приватный он и тебе для юзания недоступный.
?) и кукарекает
без надежды на рассвет. Для одной двух записей его конечно можно
использовать,
а вот для тысяч... Или я не прав?
Ну если для тебя пяток операторов по сравнению с доступом к диску так
критично, то простой NEXT никуда не делся. Потести так и так и доложишь
результат. А вообще, ты что, полагаешь, что ООП программулина может быть
столь же эффективна, как и оптимизинованная не ООП? Я сильно сомневаюсь. А
насчет тысяч... Основное его применение табличку на экране заполнить. Откуда
там тысячи строк? И сравни объем этих операций с тем, что в
... познакомить меня с хорошими примерами работы с отдельными классами, а
то SV не знакомо с нашими требованиями к тех документации и очень меня
огорчает своим ABC описаловом. Plz, конечно, отдам долг когда лучше
разберусь :).
Вот флаг в руки и может еще один OS проект организуешь. Но не перевод, а
учебник/оптсалово АВС "нашим требованиям".

WBR, Nick Tsigouro
Написал: ClaList(2)
Ответить