Базы данных
Программирование баз данных в Delphi:
Добавление нового склада (TDBLookupComboBox, TEdit, TButton, TTable, TDataSource).
Вот и пришло время научить нашу складскую программу добавлять новые новые записи в справочник складов.
Для начала нам потребуется создать диалоговое окно
, в котором мы будем указывать информацию о новом складе
. Для этого создаем новую форму*:
Форма готова, теперь нам необходимо кинуть на нее компоненты
, которые понадобятся нам для дальшейшей работы (TDBLookupComboBox, TEdit, TButton, 2-а TTable и
TDataSource)*:
Дадим имена нашим компонентам (Свойство "Name"): "cbFIO" (TDBLookupComboBox)
, "eSkladName" (TEdit), "btnAdd" (TButton), "tblFIO" и "tblSklad" (TTable)
, dsFIO (TDataSource) , а также дадим имя нашей форме - "frmAddSklad" и сохраним наш модуль как "AddSklad"
. Свойству кнопки "btnAdd" -> "Caption" укажем значение "Добавить"
, а свойству "Caption" нашей формы укажем значение "Добавить новый склад"
. Как-то не очень красиво получается писать, давайте попробуем упростить описание свойств компонентов
, создадим для этих целей таблицу, в которой будем указывать имя компонента с его свойствами и значениями
, присвоенными им:
Имя компонента
|
Свойство
|
Значение
|
Описание действий
|
tblFIO (TTable)
|
|
|
|
|
DatabaseName
|
StorePrj
|
Указываем алиас (псевдоним) БД.
|
|
TableName
|
employees.DB
|
Указываем имя таблицы
|
dsFIO(TDataSource)
|
|
|
|
|
DataSet
|
tblFIO
|
Указываем таблицу с фамилиями
|
tblSklad(TTable)
|
|
|
|
|
DatabaseName
|
StorePrj
|
...
|
|
TableName
|
stores.DB
|
...
|
TDBLookupComboBox
|
|
|
|
|
ListSource
|
dsFIO
|
Указываем источник таблицы
|
|
ListField
|
Fio
|
Указываем поле для вывода
|
|
KeyField
|
Id
|
Указываем ключевое поле
|
Получился следующий результат*:
Поехали дальше. Теперь надо написать обработчик нажатия кнопки "Добавить" (onClick)
, он будет выглядеть следующим образом:
procedure TfrmAddSklad.btnAddClick(Sender: TObject); begin
if (Length(eSkladName.Text) > 0) // Проверяем, ввели ли название склада. and (cbFIO.KeyValue > 0) // Проверяем наличие выбора фамилии.
then
begin
tblSklad.Active := True;
tblSklad.Insert; // добавляем запись.
tblSklad.FieldValues['Name'] := eSkladName.Text; // Указываем название склада.
tblSklad.FieldValues['Storeman'] := cbFIO.KeyValue; // Указываем идентификатор на фамилию.
tblSklad.Post;
ModalResult := mrOk; // Говорим что все пучком, возвращая mrOk.
end
else
ModalResult := mrNone; // Иначе возвращаем значение mrNone.
end;
|
Так-же пишем обработчики событий нашего окна - onShow:
procedure TfrmAddSklad.FormShow(Sender: TObject);
begin
eSkladName.Text := ''; // Чистим содержимое TEdit.
tblFio.Active := True; // Подключаемся к таблице.
end;
|
и - onClose:
procedure TfrmAddSklad.FormClose(Sender: TObject; var Action: TCloseAction);
begin
tblFio.Active := False; // Разрываем связь с таблицей.
end;
|
Вот и диалоговое окно добавления нового склада готово. Теперь нам необходимо его связать с окном "Склады". Для этого добавляем кнопку на форму окна "Склады", назовем ее "btnAdd", а в заголовке кнопки (Caption), напишем "Добавить". В дальнейшем пишем обработчик события нажатия кнопки (onClick):
procedure TfrmStores.btnAddClick(Sender: TObject); begin
// Проверяем, была ли добавлена запись.
if frmAddSklad.ShowModal = mrOk then // Выводим окно и читаем результат, полученный от окна.
begin
// по новой выполняем запрос.
Query.Active := False;
Query.Open;
end;
end; |
Если присмотреться, то можно заметить, что для вывода на экран диалогового окна используется ф-я ShowModal, что значительно упрощает нам работу, так-как происходит блокировка всех окон нашего приложения, а по закрытии диалогового окна мы можем обработать результат. =)
Запускаем программу, смотрим что же у нас получилось, вызываем наше диалоговое окно, заполняем нужными нам данными и нажимаем добавить:
Смотрим результат, как видим, запись была успешно добавлена:
Скриншоты, помеченные знаком * ,
являются цитатами и иллюстрациями
программного продукта "Turbo Delphi",
авторское право на который принадлежит "Borland
Software Corporation".
|