Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Delphi и БД.doc
Скачиваний:
73
Добавлен:
11.04.2015
Размер:
471.04 Кб
Скачать

14.5. Поисковые поля

Настало время разобрать поле с именем город, которое имеет числовой тип и пока никак не может хранить данные о городе. Для начала создадим отдельную таблицу в нашей базе данных с полями (рис. 14.14):

- Keyi — счетчик (ключевое поле);

- название города — текстовое поле размером в 30 символов.

Сохраните таблицу под именем Справочник городов. Теперь база данных должна состоять из двух таблиц:

- Справочник;

- Справочник городов.

Давайте откроем проект созданный в прошлом разделе, и модуль DataModuleUnit (рис. 14.15). Добавьте компоненты DataSource (назовем его TownSource) и АоотаЫе (его назовем TownTabie). После этого у компонента TownSource В СВОЙСТВв DataSet укажите таблицу TownTabie.

Теперь настроим TownTabie на отображение справочника городов. Для этого:

- в свойстве connection укажите компонент Aooconnectioni, который указывает на нашу базу данных.

- в свойстве TableName укажите таблицу — Справочник городов;

- установите свойство Active в true, чтобы активизировать таблицу.

Войдите в редактор полей таблицы TownTable и добавьте все поля. Сделайте поле Key1 невидимым, потому что это счетчик и пользователю он абсолютно не нужен.

Рис. 14.14. Таблица Справочник городов

Рис. 14.15. Добавление модуля DataModuleUnit

Теперь создадим новую форму для редактирования справочника и сохраним ее в модуле под именем TownBookUnit. Саму форму назовем TownBookForm.

Подключите к новой форме модуль DataModuieUnit, чтобы отсюда можно было получить доступ к компонентам для работы с базами данных. Для этого из меню File выберите пункт Use Unit (Использовать модуль), в появившемся окне выберите модуль DataModuieUnit и нажмите ОК.

Поместите на форму сетку DBGrid и в свойстве Datasource укажите таблицу Справочник городов— DataModulel.TownSource. Можете все эти действия красиво оформить и добавить кнопку ОК для закрытия окна справочника.

Окно редактора справочника городов вы можете увидеть на рис. 14.16. Для большей красоты добавим на форму еще три кнопки Добавить, Сохранить и Удалить для добавления, удаления и сохранения строк справочника.

Рис. 14.16. Обновленная форма справочника

Для события onclick кнопки Добавить пишем следующий код:

procedure TTownBookForm.AddBtnClick(Sender: TObject);

begin

DataModulel.TownTable.Insert;

DBGridl.SetFocus;

end;

Метод insert таблицы TownTable добавляет новую строку. Во второй строке вызывается метод SetFocus нашей сетки, чтобы фокус ввода перешел на него. После нажатия кнопки Добавить фокус попадает на нее, но после добавления новой строки, вполне логичным будет перенести фокус на сетку, потому что пользователь будет вводить имя города для новой строки.

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

procedure TTownBookForm.SaveBtnClick(Sender: TObject);

begin

if DataModulel.TownTable.Modified then

DataModulel.TownTable.Post;

end;

Если текущая строка претерпела изменения, то в свойстве Modifies будет true, иначе false. Однако если произошли изменения, то их надо сохранить, иначе при закрытии окна пользователем данные могут не сохраниться.

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

Здесь также можно переносить фокус обратно в сетку, но в данном случае этого не сделано.

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

procedure TTownBookForm.DelBtnClick(Sender: TObject);

begin

DataModulel.TownTable.Delete ;

end;

Метод Delete удаляет текущую строку из таблицы.

Все, формирование внешнего вида таблицы Справочник городов закончено.

Теперь перейдите к главной форме и создайте меню или кнопку (в примере выбрано первое) для вызова справочника городов (рис. 14.17).

Рис. 14.17. Меню вызова справочника городов

По событию onclick меню пишем код вызова окна справочника городов:

procedure TForml.TownBookMenuItemClick(Sender: TObject);

begin

TownBookForm.ShowModal;

end;

Если вы не добавили модуль справочника городов к главной форме и попробуете сейчас откомпилировать проект, то перед вами появится окно, в котором Delphi говорит о том, что форма TownBookForm объявлена в модуле TownBookUnit и ваша форма не имеет ссылки на него. Вам предлагается добавить ее автоматически. Выберите Да и модуль будет добавлен автоматически, после этого можно опять компилировать проект, не внося никаких изменений. Теперь все должно пройти удачно. Запустите проект и проверьте работу программы.

Запустите программу, вызовите таблицу Справочник городов и добавьте туда несколько строк. Это будет полезно на будущее, заодно и проверите правильность работы программы.

Теперь у нас есть справочник городов и мы можем связать его данные с основной таблицей. Но перед этим немного„улучшим форму. Выделите сетку DBGridi на главной форме и в свойстве Options отключите возможность редактирования данных в сетке — в свойстве dgEditing установите значение false. Теперь редактирование данных в сетке невозможно, поэтому мы сделаем для этого отдельные окна. В главном меню создайте пункт Редактирование со следующими подпунктами:

- Добавить запись;

- Редактировать запись;

- Удалить запись.

На форме создана еще панель с кнопками, чтобы к этим командам можно было быстро получить доступ, а также назначены командам клавиши быстрого вызова.

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

  • ДЛЯ BorderStyle — bsSingle;

  • ДЛЯ Position — poMainFormCenter.

Этого достаточно, чтобы форма выглядела представительно.

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

Теперь посмотрите на вид формы для редактирования данных (рис. 14.18).

Рис. 14.18.-Окно редактирования данных

В этом окне у нас несколько компонентов для украшения внешнего вида (картинка и панель белого цвета), но это не главное. Вы можете повторить действия и сделать подобную форму, а можете ограничиться только основными компонентами. Основными тут являются — кнопка Сохранить, надписи и компоненты доступа к данным, можно также добавить кнопку, по нажатии которой изменения не будут сохранятся в базе данных. Напротив надписей Фамилия, Имя, Телефон, e-mail и Дата рождения находятся компоненты DBEdit с вкладки Data Controls. Эти компоненты представляют собой простые строки ввода типа TEdit, только они умеют автоматически редактировать указанные Поля в базе данных. Чтобы компонент видел данные из нужного поля, следует указать у него в свойстве DataSource необходимую таблицу (DataModuiei.Datasourcel, как мы это делали с сеткой редактирования), а в свойстве DataFieid указать поле, которое надо редактировать. Обязательно попробуйте сделать это сами, чтобы подробно разобраться с процессом установки полей.

Для свойства Мобильник лучше использовать компонент DBCheckBox, который похож на checkBox. У него также надо указать поле в таблице, как и у КОМПОНеНТОВ DBEdit.

Самое интересное — поле Город. Названия городов у нас хранятся в отдельном справочнике, а в основной таблице должны храниться только числа — номера строк из справочника городов. Таким образом, у нас не будет храниться в каждой строке длинное название города, а только число. Допустим, что у вас несколько друзей живет в городе Санкт-Петербург. В этом случае для всех них будет в поле Город длинное название. Это лишний расход памяти. Легче создать справочник, в котором будет только один раз указано название города, а потом только ссылаться на него из основной таблицы.

Допустим, что у выделенной записи нужно указать город Москва, который идет под номером 2 (поле Keyl для этой строки в справочнике городов равно 2). В этом случае в основном справочнике в поле Город нужно указать только цифру 2, а название города в любой момент можно найти в справочнике городов по полю Keyl. Так как оно уникально (это определит счетчик), то проблем не возникнет.

Чтобы все это реализовать, достаточно поставить компонент овьооКирСотЬовох с вкладки Data Controls. Теперь нужно указать у него в свойстве Datasource основную таблицу (DataModuiei.DataSourcei), которая будет редактироваться, а в свойстве DataFieid указать поле, которое надо редактировать — Город.

Компонент DBLookupcomboBox выглядит как выпадающий список (он похож на тсотЬоВох). В качестве элементов выпадающего списка можно указать содержимое таблицы. В свойстве Listsource нужно указать таблицу, из которой будут браться элементы для выпадающего списка. Давайте укажем наш справочник городов — DataModulel.TownSource. В свойстве ListField укажем поле из этой таблицы, которое будет использоваться для заполнения выпадающего списка — Название города. В свойстве KeyFieid нужно указать поле, значение которого будет вноситься в указанное поле основной таблицы (поле Keyl) .

Примечание

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

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

procedure TEditRecordForm.BitBtnlClick (Sender : TObject) ;

begin

if DataModulel.BookTable. Modified then

Delphi и базы данных 455

DataModulel.BookTable.Post;

Close;

end;

В первой строке мы проверяем, если таблица была изменена (DataModulel.BookTable. Modified равна true), TO принять изменения DataModulel.BookTable.Post. Для события onclick кнопки Отмена напишите одну строчку кода:

DataModulel.BookTable.Cancel;

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

Теперь перейдите в основную форму и по нажатии пункта меню Добавить запись напишите:

DataModulel.BookTable.Insert;

EditRecordForm.ShowModal;

Здесь в первой строке мы вставляем в основной таблице новую строку. Во второй строке отображаем окно редактирования данных. По нажатию пункта меню Редактировать запись напишите просто код отображения окна редактирования — .EditRecordForm.ShowModal.

Теперь запустите программу. Создайте новую запись. В поле Город выберите какое-нибудь значение из справочника. После нажатия кнопки Сохранить окно закроется. Посмотрите на сетку. В поле Город новой строки вы можете увидеть код города из нашего справочника (в примере было число 3). Это значит, что в справочнике городов есть запись со значением в поле Keyi, равным 3, и в поле название города указано название, которое мы выбрали.

Давайте откроем таблицу через профамму Access и посмотрим на ее содержимое (рис. 14.19).

Q Москва

3[ Ростов-на-Дону

4! Питер

Счетчик

Рис. 14.19. Таблица, открытая в Access

456 _ Глава 14

Поле с названием города (поле Keyl) Ростов-на-Дону действительно имеет значение 3. Таким образом, в основном справочнике не надо указывать полный текст имени города. Достаточно только указать нужный ключ справочника городов, и мы в любой момент сможем найти нужное название.

В следующем разделе мы улучшим пример, а пока попробуйте поэкспериментировать с уже созданным примером. Создайте несколько строк и потом попробуйте отредактировать их. Обратите внимание, что когда вы открываете окно редактирования, в компоненте DBLookupComboBox отображается правильное название города для указанной записи.

^ Примечание

На компакт-диске в папке \ Примеры \ Глава 14 \ Link вы можете увидеть пример этой программы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]