Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000555.doc
Скачиваний:
31
Добавлен:
30.04.2022
Размер:
19.12 Mб
Скачать

8.3. Редактирование базы данных

К данному моменту созданное нами приложение имеет Главную форму, на которой установлен компонент DBGrid - сетка для отображения первой таблицы Список и дополнительная форма Form3, на которой установлен компонент DBGrid - сетка для отображения второй таблицы Оценки.

Как указывалось выше, в этих компонентах можно добавлять, удалять и редактировать строки наших таблиц.

Чтобы исключить возможности редактирования полей в таблицах, последовательно выделим оба компонента DBGrid и в их свойствах Option dgEditing установим значение false, что исключит возможность редактирования данных в сетках.

Для редактирования данных на Главной форме создадим компонент MainMenu (Menus) главное меню.

Создать это меню можно следующим образом.

Из палитры инструментов Standard на Главную форму ставим компонент MainMenu (Menus).

Двойным щелчком на компоненте MainMenu (Menus) на форме откроем окно Form1.MainMenu1 с выделенным прямоугольником в левом верхнем углу.

В объектном инспекторе выбираем свойство Caption (если свойство Caption не видно, щелкаем по свойству Items и выбираем свойство Caption) и вводим название раздела, например, «Редактирование».

Далее щелкаем по выделенному прямоугольнику.

  • Во-первых, в нем появилось название раздела Редактирование, которое отобразилось на форме,

  • и во-вторых, справа от него и снизу появились новые прямоугольники.

Выделяя в разделе Редактирование нижние прямоугольники и используя свойство Caption, создадим подразделы «Добавить запись», «Редактировать запись», «Удалить запись».

Выделяя правый прямоугольник, создаем новый раздел, например, «Сортировка».

Выделяя нижний прямоугольник этого раздела, создаем подраздел, например, «По фамилии».

Аналогично создаются другие подразделы.

Для всех подразделов создаем свои обработчики событий.

Так для подраздела Добавить запись в обработчике события напишем следующий код

DataModule1.SpisokTable.Insert;

EditRecordForm.ShowModal;

Первая строка кода с помощью метода Insert таблицы SpisokTable добавляет новую строку в таблицу.

Вторая строка кода вызывает окно редактирования данных EditRecordForm, создание которого рассмотрено ниже.

Для подраздела Редактировать запись в обработчике события напишем просто код отображения окна редактирования данных.

EditRecordForm.ShowModal;

Для подраздела Удалить запись в обработчике события пишем следующий код

if Application.MessageBox(PChar('Вы действительно хотите удалить'

+DataModule1.SpisokTableDSDesigner.AsString),

'Внимание!!!', MB_OKCANCEL)=id_OK then

DataModule1.SpisokTable.Delete;

В коде отображается сообщение функции MessageBox. В первом параметре (текст сообщения) написан текст "Вы действительно хотите удалить" плюс значение поля Фамилия выделенной строки —. DataModule1.BookTableDSDesigner.AsString.

Чтобы разобраться со значением поля Фамилия - DataModule1.BookTableDSDesigner.AsString, перейдем в модуль DataModuie и дважды щелкнем кнопкой мыши по компоненту SpisokTable, где у нас подключена первая таблица, и затем по полю Фамилия.

В посмотрев в объектный инспектор, увидим, что в нем имя этого поля значится как - BookTableDSDesigner. Поэтому мы и записываем сначала имя модуля данных (DataModule1), затем через точку имя поля (BookTabieDSDesigner) и метод ASString, который возвращает значение поля в виде строки.

Эта сложность вызвана тем, что Delphi распознает только поля на своем (английском) языке и поля с названием на русском языке меняет на их английский эквивалент.

Если посмотреть в раздел type модуля DataModulel, то можно убедиться, что внутри нашего объекта TDataModulel есть объявление свойства BookTableDSDesigner типа TWideStringField.

При создании обработчика событий меню Редактирование мы ссылались на будущую форму редактирования данных, которую назвали EditRecordForm.

Теперь создадим эту новую форму, к которой будет обращаться меню Редактирование, и которая будет использоваться для редактирования данных каждой записи.

Сохраним ее в модуле EditFormUnit. Самой же форме дадим уже ранее присвоенное название EditRecordForm.

Для улучшения общего вида этой формы изменим у нее следующие свойства:

для BorderStyle - bsSingle;

для Position — poMainFormCenter.

Далее подключим к форме EditRecordForm модуль с данными, потому что нам необходимо будет иметь к ним доступ.

Для этого выберем из меню File пункт Use Unit. В появившемся окне выберем DataModuleUnit и нажмем ОК. Как указывалось выше, подключение можно произвести и вручную, записав в форме EditRecordForm ключевого слова implementation команду uses DataModuieUnit.

На новую форму EditRecordForm установим :

  • компоненты Label с вкладки Standard и присвоим им названия, соответствующие именам полей базы данных,

  • компоненты доступа к данным TDBEdit с вкладки Data Controls,

  • кнопку Сохранить для сохранения результатов редактирования,

  • кнопку Отмена, по нажатии которую изменения не будут сохранятся в базе.

Общий вид окна редактирования EditRecordForm показан на рис 8.3.

Рис. 8.3

Компоненты TDBEdit представляют собой простые строки ввода типа TEdit, только они умеют автоматически редактировать указанные поля в базе данных.

Чтобы компонент TDBEdit видел данные из нужного поля, необходимо указать у него в свойстве DataSource нужную таблицу, в данном случае таблицу DataModule1.SpisokSource, а в свойстве DataField указать поле, которое надо редактировать.

Для события Onclick кнопки Сохранить пишем следующий код:

if DataModule1.SpisokTable.Modified then

DataModule1.SpisokTable.Post;

close ;

Этот код проверяет, претерпела ли текущая строка изменения. Если да, то в свойстве Modifies будет true иначе false.

Однако если произошли изменения, то их надо сохранить, иначе при закрытии окна пользователем данные могут не сохраниться.

Для сохранения изменений используется метод Post.

Метод Close закрывает окно.

Для кнопки Отмена пишем следующий код:

DataModule1.SpisokTable.Cancel;

В этом коде отмену сделанных записей выполняет метод Cancel. Метод обеспечивает выход из режима редактирования без внесения изменений в таблицу.