Я смущаюсь прокомментировать любой ответ, который дал Том, поскольку считаю его авторитетным. Но я хочу указать на две мелочи.
Прежде всего, использование RECID может быть лучше, чем ROWID. ROWID рекомендуется для использования Progress (см. http://documentation.progress.com/output/OpenEdge102a/oe102ahtml/wwhelp/wwhimpl/common/html/wwhelp.htm?context=dvref&file=dvref-15-48.html), так как RECID «поддерживается для обратной совместимости. Для большинства приложений вместо этого используйте функцию ROWID».
Но это на самом деле мало. Что также важно, на мой взгляд, то, что Том сделал в своем примере для вас - он определил буфер («define buffer updCustomer для клиента»), который он использовал в обновлении. Я хочу побудить вас использовать буферы КАЖДЫЙ раз, когда вы работаете с записью, особенно если вы используете постоянные или супер-процедуры или используете функции или внутренние процедуры.
Почему? Определение буфера гарантирует, что область буфера, который вы обновляете, ограничена местом, где вы его определили. В качестве примера, Progress будет «просачивать» буфер по умолчанию в вашу супер-процедуру, если вы не будете осторожны. Представьте себе этот сценарий ... программу, которая находит запись, вызывает функцию в супер-процедуре, чтобы выполнить «некоторые вещи», а затем удаляет запись.
FIND MyTable WHERE MyTable.fk = fkValue NO-LOCK NO-ERROR.
UpdateOtherStuff(MyTable.fkValue).
DeleteMyRecord(MyTable.fkValue).
Но в «UpdateOtherStuff» он выполняет некоторую работу, включая это ...
FOR EACH MyTable:
If MyTable.Thing = 'ThingOne' THEN LEAVE.
/* other processing here... */
END.
Вы можете быть удивлены, когда вы обнаружите, что супер процедура разделяет по умолчанию «MyTable» буфер с вашей программой, и заканчивает тем, что репозиционирование записи где-то вы не хотите ... так что вызов " DeleteMyRecord() "имеет другую запись, чем вы ожидаете.
Проблема будет решена, если «UpdateOtherStuff» имеет «DEFINE BUFFER ... FOR MyTable» вверху, даже если это «DEFINE BUFFER MyTAble для MyTable» (как это ни странно выглядит ...).
Вот почему пример Тома, включая DEFINE BUFFER ..., должен быть шаблоном для работы, которую вы делаете в ABL.
Этот вопрос был задан ранее - см. https://stackoverflow.com/a/5490130/1433147.
Идеально подходит для меня сэр .. просто начал изучать прогресс. Я не знал, как заблокировать одну запись, а не блокировать всю таблицу. теперь я получил его. Мне также не было известно о функции recid. Это пауза размещения на самом деле мне нужно, как вы предложили. Спасибо за ценный четкий ответ. –