Мегаобучалка Главная | О нас | Обратная связь


Далее создаем выпадающее поле Lookup для просмотра данных из справочника «Единицы измерения»



2016-09-17 391 Обсуждений (0)
Далее создаем выпадающее поле Lookup для просмотра данных из справочника «Единицы измерения» 0.00 из 5.00 0 оценок




Для этогов структуре (Structure) -> products -> Fields -> щелкнем правой кнопкой мыши и выберем New field…. и заполняем:

В поле Name: пишем ed_izmer;

в поле Type: выбираем String;

выбираем поле Lookup;

в Key Fields:выбираем id_ed_izmer;

в Dataset: выбираем table_ed_izmer;

в Lookup Keys: выбираем id;

а в Result Field: выбираем ed_name жмем ОК

В инспекторе объектов для созданного поля свойство DisplyLabel-> Единица измерения, DisplyWidth-> 24 иперемещаем поле мышкой в позицию после поляproduct_group.

Теперь пишем обработчики событий для кнопок.

Щелкнем дважды мышкой по кнопке «Новая запись» и пишем следующий код:

procedure TForm_products.Button1Click(Sender: TObject); begin //новая запись form_general.table_products.Append; dbgrid1.SetFocus end;

Щелкнем дважды мышкой по кнопке «Удалить запись»и пишем следующий код:

procedure TForm_products.Button2Click(Sender: TObject); //удаление записи begin //если записи отсутствуют то выводим сообщение, иначе удаляем запись if dbgrid1.DataSource.DataSet.RecordCount<>0 then begin if (MessageBox(Handle, 'Удаление записей может привести к нарушению работы всей базы данных. Удалить запись?', 'Внимание !!!', MB_YESNO)= IDYES) then form_general.table_products.Delete end else ShowMessage('Нет записей для удаления'); end;


Щелкнем дважды мышкой по кнопке «Закрыть» и пишем следующий код:

procedure TForm_products.Button3Click(Sender: TObject); begin //закрытие формы Close; end;


В инспекторе объектов для Form_products событие FormActivateпишем:

procedure TForm_products.FormActivate(Sender: TObject); begin //так как таблица продукты использует данные из таблиц единицы измерения и категории продуктов //то мы должны проверить заполнены они или нет if form_general.table_ed_izmer.RecordCount=0 then begin ShowMessage('У Вас не заполнен справочник "Единиц измерения". Для продолжения работы Вам необходимо заполнить справочник.');close;end else begin if form_general.table_product_group.RecordCount=0 then begin ShowMessage('У Вас не заполнен справочник "Категории продуктов". Для продолжения работы Вам необходимо заполнить справочник.'); close;end else begin //обновляем данные form_general.table_ed_izmer.Refresh; form_general.table_product_group.Refresh; //установка фокуса при активации формы dbgrid1.SetFocus; end; end; end;

 

В инспекторе объектов дляForm_products событие FormClose пишем:

procedure TForm_products.FormClose(Sender: TObject; var Action: TCloseAction); begin //процедура закрытия формы Action:=cafree; end;


В инспекторе объектов дляForm_products событие FormCloseQuery пишем:

procedure TForm_products.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin //проверка на наличие пустых записей перед закрытием, если такие записи найдены то отменяем закрытие //формы if dbgrid1.DataSource.DataSet.RecordCount<>0 then begin //по полю продукт if (form_general.table_products.Locate('product_name','', [loCaseInsensitive,loPartialKey])) then begin ShowMessage('У Вас есть не заполненные записи в поле "Продукт"');CanClose:=false; dbgrid1.SetFocus;end else begin //по полю категория продукта if (form_general.table_products.Locate('id_product_group',null, [loCaseInsensitive,loPartialKey])) then begin ShowMessage('У Вас есть не заполненные записи в поле "Категория продукта"'); CanClose:=false;dbgrid1.SetFocus;end else begin //по полю единица измерения if (form_general.table_products.Locate('id_ed_izmer',null, [loCaseInsensitive,loPartialKey])) then begin ShowMessage('У Вас есть не заполненные записи в поле "Единицы измерения"'); CanClose:=false;dbgrid1.SetFocus;end else begin //по полю дата хранения if (form_general.table_products.Locate('time_hraneniya',null,[loCaseInsensitive,loPartialKey])) then begin ShowMessage('У Вас есть не заполненные записи в поле "Время хранения"');CanClose:=false;dbgrid1.SetFocus;end else begin form_general.table_products.edit;form_general.table_products.post; end; end; end; end; end; end;

Внимание для более корректной работы по полю 'product_name'необходимо добавить проверку на null (т.е. в поле данные не вводились совсем).


Сейчас сделаем запуск справочника «Продуктов» из главной формы. Для этого выбираем в меню Project -> Options…

Выбираем Forms и перемещаем Form_productsиз Auto-create forms в Avalable forms.

Переходим на главную форму, щелкаем мышкой по компоненту MainMenu1, а затем по пункту Продукты


И пишем следующий обработчик события:

procedure TForm_general.N4Click(Sender: TObject); begin f:=0; //проверяем, активна ли наша форма if ActiveMDIChild.Caption<>'Продукты' then begin //если нет то ищем ее среди неактивных и если находим, то показываем ее for i:=0 to form_general.MDIChildCount-1 do if form_general.MDIChildren[i].Caption='Продукты' then begin MDIChildren[i].Show;f:=1;end; end else f:=1; //если форма еще не создана, то создаем ее if f<>1 then Tform_products.Create(Application); end;


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

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

Изменим процедуру удаления записи в справочнике «Категории продуктов»

Щелкнем дважды мышкой по кнопке «Удалить запись» на форме «Категории продуктов» и пишем следующий код:

procedure TForm_product_group.Button2Click(Sender: TObject); //удаление записи begin //если записи отсутствуют то выводим сообщение, иначе удаляем запись if dbgrid1.DataSource.DataSet.RecordCount<>0 then begin if (MessageBox(Handle, 'Удаление записей может привести к нарушению работы всей базы данных. Удалить запись?', 'Внимание !!!', MB_YESNO)= IDYES) then if (form_general.table_products.Locate('id_product_group', form_general.table_product_group.FieldByName('id').Value, [loCaseInsensitive, loPartialKey])) then ShowMessage('Нельзя удалить данную категорию продуктов, так как она используется в справочнике продуктов.') else form_general.table_product_group.Delete end else ShowMessage('Нет записей для удаления'); end;


Изменим процедуру удаления записи в справочнике «Единицы измерения»

Щелкнем дважды мышкой по кнопке «Удалить запись» на форме «Единицы измерения» и пишем следующий код:

procedure TForm_ed_izmer.Button2Click(Sender: TObject); //удаление записи begin //если записи отсутствуют то выводим сообщение, иначе удаляем запись if dbgrid1.DataSource.DataSet.RecordCount<>0 then begin if (MessageBox(Handle, 'Удаление записей может привести к нарушению работы всей базы данных. Удалить запись?', 'Внимание !!!', MB_YESNO)= IDYES) then if (form_general.table_products.Locate('id_ed_izmer', form_general.table_ed_izmer.FieldByName('id').Value, [loCaseInsensitive, loPartialKey])) then ShowMessage('Нельзя удалить данную единицу измерения, так как она используется в справочнике продуктов.') else form_general.table_ed_izmer.Delete end else ShowMessage('Нет записей для удаления'); end;

 

Вопросы для контроля

 

    1. Для чего нужно поле Lookup?
    2. Напишите синтаксис на событие FormActivate
    3. Напишите синтаксис на событие FormClose
    4. Напишите синтаксис на событие FormCloseQuery
    5. Для чего нужен компонент MainMenu1?

Литература

 

1. Фаронов В.В. Программирование на языке высокого уровня: Учебник для вузов. -СПб.: Питер, 2003.

2. Бобровский С.И. Delphi 7. Учебный курс. - СПб.: Питер, 2005.

3. Кетков Ю.Л., Кетков А.Ю. Практика программирования: Visual Basic, C++ Builder, Delphi. - СПб.: БХВ - Петербург, 2005.



2016-09-17 391 Обсуждений (0)
Далее создаем выпадающее поле Lookup для просмотра данных из справочника «Единицы измерения» 0.00 из 5.00 0 оценок









Обсуждение в статье: Далее создаем выпадающее поле Lookup для просмотра данных из справочника «Единицы измерения»

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...
Как построить свою речь (словесное оформление): При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (391)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.005 сек.)