4.3.8. Форма Account – лицевой счет

 

Отличительная особенность формы (рис. 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. Его также можно использовать для занесения нового изображения. Цепочка в этом случае короче: EditPaste.

Код события 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