Отличительная особенность формы (рис. 4.27) заключается в
работе с таблицей, содержащей одну единственную запись. Если выполняется
заведение лицевого счета, то эта запись - с пустыми полями. За выбор режима работы
формы отвечает код события Load:
PUBLIC IndAccount
* Работа с таблицей-выборкой
SELECT cAccount
IF RECCOUNT()=0
* Если запись в таблице
отсутствует
* Заведение лицевого
счета
IndAccount=1 && Признак создания
счета
SCATTER MEMO MEMVAR
M.Account=SelectAccount
APPEND BLANK
GATHER MEMO MEMVAR
ELSE
* Корректировка лицевого счета
IndAccount=2 && Признак
корректировки
ENDIF
Работа с изображениями в этой форме выполнена по
каноническим принципам Visual FoxPro. Фотографии не хранятся в отдельных
файлах, как мы делали это ранее, а
заносятся в поле General. Если быть более точным, то в поле General хранятся ссылки на место фотографии в
файле cAccount.fpt. В этом же файле хранятся поля Memo. У нашей таблицы это поле pasport.
Откройте таблицу cAccount в окне просмотра Browse. Для этого в командном окне Command наберите:
USE c:\winnt\temp\caccount.dbf EXCLUSIVE
BROWSE
На экране дисплея появится окно Browse (рис. 4.28).
Если в поле
типа General содержится информация, то в соответствующей ячейке мы увидим слово
Gen,
начинающееся с большой буквы, если информации нет – gen с маленькой буквы. Сделайте двойной
щелчок по этому слову и увидите содержимое ячейки – фотографию. Все сказанное
также справедливо и для поля типа Memo.
Сделайте
активным окно с фотографией. В главном меню Visual FoxPro выберите цепочку: Edit – Точечный рисунок Object
– Открыть. Запустится Paint. Делайте с фотографией все, что
необходимо. Кроме этого работает буфер обмена Windows. Его также можно использовать для
занесения нового изображения. Цепочка в этом случае короче: Edit – Paste.
Код события Activate формы Account:
IF IndAccount=1
*
Кнопка "Удалить" недоступна
THISFORM.Command2.Enabled=.F.
ENDIF
Код события Destroy формы Account:
* Удаление глобальной переменной из памяти
RELEASE IndAccount
Код события Click кнопки Записать:
*- Кнопка Записать
* Проверка введенных значений
IF LEN(ALLTRIM(cAccount.Family))=0
=MESSAGEBOX('Вы забыли
ввести фамилию!',;
48,'Ошибка!')
ThisForm.txtFamily.Setfocus
RETURN
ENDIF
IF LEN(ALLTRIM(cAccount.Name))=0
=MESSAGEBOX('Вы забыли ввести имя!',;
48,'Ошибка!')
ThisForm.txtName.Setfocus
RETURN
ENDIF
IF LEN(ALLTRIM(cAccount.Second))=0
=MESSAGEBOX('Вы забыли ввести отчество!',;
48,'Ошибка!')
ThisForm.txtSecond.Setfocus
RETURN
ENDIF
DO CASE
CASE IndAccount=1
* Добавление нового
квартиросъемщика
lnMsgResult=MESSAGEBOX('Сейчас данные о квартиросъемщике '+;
'будут
записаны в базу.',52,'Подтвердите!')
IF lnMsgResult=6 && Кнопка Да
SELECT cAccount
SCATTER MEMO MEMVAR
* Запись в основную
базу
IF .NOT. USED ('Account')
USE Account IN 0
ENDIF
SELECT Account
APPEND BLANK
GATHER MEMO MEMVAR
THISFORM.Release
ENDIF
CASE IndFlat=2
* Редактирование данных
квартиросъемщика
lnMsgResult=MESSAGEBOX('Сейчас результаты корректировки '+;
'будут
записаны на диск.',52,'Подтвердите!')
IF lnMsgResult=6
SELECT cAccount
SCATTER MEMO MEMVAR
* Корректировка в основной базе
IF .NOT. USED
('Account')
USE Account IN 0
ENDIF
SELECT account
SET ORDER TO TAG Account
SEEK cAccount.Account
IF FOUND()
GATHER MEMO MEMVAR
ELSE
=MESSAGEBOX('Нет доступа к
таблице квартиросъемщиков, '+;
'или в
таблице отсутствует запись, '+;
' данные
которой Вы редактировали.';
,48,'А вот
Вам и проблема!')
ENDIF
* Работаем с таблицей-выборкой
SELECT cAccount
THISFORM.Release
ENDIF
ENDCASE
Код события Click кнопки Удалить:
*- Кнопка Удалить
lnMsgResult=MESSAGEBOX('Подтвердите!',52,'Удаление!')
IF lnMsgResult=6
* Удаление в основной базе
IF .NOT. USED ('Account')
USE Account IN 0
ENDIF
SELECT Account
* Индексированный поиск
SET ORDER TO TAG Account
SEEK cAccount.Account
IF
FOUND()
DELETE && Удаление
ELSE
=MESSAGEBOX('Нет доступа
к таблице квартиросъемщиков, '+;
'или в
таблице отсутствует запись, '+;
'данные
которой Вы хотите удалить.';
,48,'А вот
Вам и проблема!')
ENDIF
* Удаление формы из памяти
THISFORM.Release
ENDIF