Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Создание форм для редактирования данных в VFP_М...doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
970.75 Кб
Скачать

11.4 Продолжение создания Форм

Кнопка "Удалить/Восстановить" (Command5)

Эта кнопка служит для внесения отметки об удалении записи, высвеченной на экране.

После щелчка на этой кнопке работает процедура:

if deleted() &&функция возвращает логическое значение, указывающее,

&&помечена ли текущая запись для удаления:

&& .Т. - если запись помечена, .F. - если нет. recall &&повторный щелчок на кнопке "Удалить" на записи,

&&уже помеченной для удаления, снимает отметку об удалении.

&&3апись восстанавливается (.Т. заменяется на .F.) else delete &&B противном случае запись логически удаляется.

&&Физическое удаление производится после

&&выхода из режима редактирования

endif

_screen.ActiveForm.Refresh()

Кнопка "Выход"

Эта кнопка служит для выхода из режима редактирования

справочника. Ей соответствует процедура:

if file ("tmp.dbf') &&Функция возвращает логическое значение Т.,

&&если файл с указанным именем найден

delete file tmp.dbf &&Удаляется временный файл

endif

close databases &&3акрывает текущую базу данных и все её таблицы

&&Устанавливает текущей первую рабочую область

use d:\baza\poshk exclusive &&Открывает ТБД poshk в монопольном режиме

&&и помещает файл в РОП1

Locate for DELETED() &&Отыскивается первая запись, помеченная для удаления

If found () &&Функция определяет успешность поиска для команд

&&CONTINUE, FIND, LOCATE, SEEK.

&&Возвращает логическое значение .F., если нет искомой

&&записи (или в указанной РОПе нет открытой таблицы)

&&и значение .Т. - если найдена

pack &&Физически удаляется найденная запись

endif

sort to tmp on nomp &&Файл poshk после удаления первой помеченной

&&записи сортируется по номеру поставщика

&&Новому файлу присваивается имя tmp

&&(остальные помеченные записи остаются)

close databases

use d:\baza\poshk exclusive &&В файле poshk помечает для удаления

delete all &&все записи внутри файла

pack &&Физическое удаление всех помеченных записей

append from tmp &&Переписывает файл tmp с помеченными

&&записями в файл poshk

if file ("tmp.dbf”) &&Временный файл,

delete file tmp.dbf &&если он создан, удаляется

endif

if MESSAGEBOX("Oтсортировать файл?",4+32+256,"Сортировать по коду НОМП")=6

&&4-Yes и No;32-?;

&&256 - 2я командная кнопка по умолчанию (No)

&& 6 - выбрана Yes sort to tmp on nomp &&Снова сортируется poshk. Вновь отсортированный файл

&& с помеченными записями создаётся под именем tmp close databases

"Повторение блока команд с комментариями

use d:\baza\poshk exclusive &&B файле poshk помечает для удаления delete all &&все записи внутри файла

pack &&Физическое удаление всех помеченных записей

append from tmp &&Переписывает файл tmp с помеченными

&&записями в файл poshk endif

if MESSAGEBOX ("Завершить редактирование?",4+32+256,"Завершить")=6

_screen.ActiveForm.Release()

else

_screen.ActiveForm. Refresh()

endif

В процедуре производится проверка наличия отметок об удалении записей. Если отметки есть, производится физическое удаление. Затем пользователь получает вопрос: производить ли сортировку файла? При утвердительном ответе основной файл сортируется по номеру поставщика в порядке возрастания получает новое имя временного файла tmp. После этого в основном файле логически удаляются все помеченные записи, затем они удаляются физически и в основной файл из временного переписываются обновлённые записи в том числе и помеченные. Повторное удаление в основном файле сделано для подстраховки.

Пользователь получает следующий вопрос: Завершить ли редактирование? Если пользователь щёлкает мышкой на слове ДА, производится выход - экранная форма закрывается. Если же выбирается кнопка НЕТ, происходит возврат в режим редактирования. Такая процедура позволяет сразу же после удаления записей просмотреть справочный файл и удалить последовательно все записи, помеченные для удаления. Только после завершения редактирования окно ЭФВД удаляется из памяти, в противном случае оно обновляется и снова.