record held

Clarion, Clarion 7

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

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

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

Всем шолом в хату.

Файл-серверный вариант.
Случается, что запись в файле оказывается запёртой.

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

  IsHeldErr            EQUATE(43)                  ! 'Record Is Already Held'
Кто как освобождает запись ?

В незабвенном CPD 2.10 достаточно было вызвать форму,
изменить к.-л. поле в записи - и через 4 минуты
запись освобождалась.
В с5 это не проходит. Ругается Access Denied и выбрасывает.

Как говорил Вадим Эдуардович - все в сырцы!
Сходим.
Вот код из CPD2
например так

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

          pointprh# = pointer(prh)
          hold(prh,.10)
          get(prh,pointprh#)
          if errorcode() = 43
            recover(120)
            hold(prh)
            get(prh,pointprh#)
            recover()

  !или вот так

      set(confprix)
      hold(confPRIX,.10)
      next(confprix)
      if errorcode() = 43
        RECOVER(120)
        set(confprix)
        HOLD(confPRIX)
        next(confprix)
        RECOVER()
      .

  !В с55 команды RECOVER нет.
  !Попытался сделать по науке

!      LOOP
!        HOLD(POST,2)
        GET(POST,POS:OKP_KEY)
!        stop(error())
!        if errorcode() = IsHeldErr
!          release(post)
!          cycle
!        elsif errorcode()
!          stop(error()&' get post')
!          break
!        end
!      end
Не катит.

C55EE
ШВС


--
Успехов
А.Козлов mailto:kozlov@bsp.open.by

Написал: ClaList(2)
Гость

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

Случается, что запись в файле оказывается запёртой.
Как это случается?
И какой драйвер БД?
IsHeldErr EQUATE(43) ! 'Record Is Already Held'
Какая станция у тебя запись блокирует?
Кто как освобождает запись ?
Код у тебя верный. Неверен сам принцип - станция, которая заблокировала запись, должна ее освободить.
Не катит.
Не прокатит. Я обычно по таким случаям выхожу (если, скажем, не используется батч-процесс), а в батч-процессе просто выставляю ошибку и продолжаю дальше. А вот зацикливать программы - это плохо.
--
Best regards,
DAA mailto:warthog@belarusbank.minsk.by

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

Драйвер, очевидно, 'CLARION'?
А запись оказывается запертой, очевидно, после "слета" программы во время ее редактирования?

Явного оператора RECOVER в CW уже давно нет.
Вместо него используется команда драйвера:

SEND(File,'RECOVER=xxx')

Подробнее см. в хелпе по драйверу 'CLARION'.

А алгоритм освобождения занятых записей остался прежним - пишется небольшая утилита или функция в самой программе, в которой в цикле читается каждая запись файла с установленным предварительно флагом RECOVER.

Кстати, а твой последний код - неверен.
Оператор RELEASE разблокирует ТОЛЬКО запись, которая была предварительно заблокирована в этой-же программе.
Чужую блокировку оператор RELEASE не снимает!

=============================
С уважением, Олег А. Руденко.
Oleg_Rudenko@mail.ru
Oleg_Rudenko@mail333.com
Библиотека DynaLib
http://dynalib.narod.ru
Написал: ClaList(2)
Ответить