Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на Pascal / Delphi / Методичка - Організація баз даних і знань.doc
Скачиваний:
31
Добавлен:
02.05.2014
Размер:
631.3 Кб
Скачать

Лабораторна робота № 5

Використання контейнераTDataModule

Мета:Набуття практичних навиків створення модулів даних уDelphi. Аналіз стану НД.

Завдання.

  1. Для заданого предметного середовища розробити застосування, який включає модуль даних, форму перегляду даних і форму редагування даних.

  2. Проаналізувати стан НД при роботі з ним.

Обов'язкові засоби: TDataModule, TDataBase, TDBGrid, TDBEdit, TDBLookupComboBox, TButton, TLabel.

Зміст звіту.

  1. Опис створеного модуля даних.

  2. Опис форм додатку з зазначенням встановлених значень властивостей компонентів.

  3. Лістинги розроблених процедур та їх аналіз.

  4. Висновки по роботі.

Порядок виконання роботи

Стани наборів даних

Набором данихуDelphiназивають групу записів з однієї або декількох ТБД, доступних для використання через компонентиTTableабоTQuery. З можливих станів НД розглянемо такі:

  • dsInactive– НД закритий;

  • dsBrowse– стан за замовчуванням для відкритого НД. Показує, що записи переглядаються, але в даний момент не змінюються;

  • dsEdit– НД знаходиться у стані редагування поточного запису (після явно або неявно викликаного методуEdit);

  • dsInsert– НД знаходиться у стані додавання нового запису (після явно або неявно викликаного методуInsertабоAppend).

Одержати поточний стан НД можна, використовуючи метод State. Він повертає такі константи:dslnactive, dsBrowse, dsEdit, dslnsert, dsSetKey, dsCalcFields, dsFilter.Наприклад:

IF Table1. State = dslnactive THEN Table1. Active := True;

Подія OnStateChange(компонентDataSource) настає щоразу при зміні стану НД. Для відображення на екрані (у компонентіLabel1) повідомлення про поточний стан НД використовуємо процедуру:

procedure TForm1.DataSource1StateChange(Sender: TObject);

var S : String;

begin

CASE Table1. State OF

Dslnactive :S := 'He активна';

DsBrowse :S := 'Перегляд';

dsEdit :S := 'Редагування';

dslnsert :S := 'Вставка';

END; {case}

Label1.Caption := S;

end;

Використання контейнера tDataModule

Компонент типу TDataModuleявляє собою контейнер, у якому поміщуються компонентиTTable, TQuery, DataSourceі т.д. Створити екземплярTDataModuleможна, обравши в середовищіDelphi пункт менюFile / NewDataModule. На відміну відTForm, уTDataModuleможна розмістити тільки невізуальні компоненти для роботи з базами даних. Зв'язок компонентівTDataSource, TTableіTQuery, розміщених уDataModule, виконується так само, як і у випадку, коли б вони були розташовані в одній формі.

DataModuleпотрібно зберегти під яким-небудь іменем і додати ім'я модуляunit, у якому описанийTDataModule, у текст модулівunitвсіх інших форм застосування, що будуть використовувати НД іTDataSource, розміщені в цьомуTDataModule. Це виконується в головному меню середовища Delphi, в елементі менюFile/Use Unit.

Надалі візуальні компоненти, що працюють із даним НД, повинні у своїй властивості DataSourceмістити ім'я відповідного компонентаTDataSourceіз TDataModule. У цьому випадку ім'я буде складним, наприклад,DataModule1.DataSource1.

Компонент tdbLookupComboBox

Компонент TDBLookupComboBoxзастосовується для вибору значень у поле одного набору даних (НД-1) зі списку значень, джерелом яких виступають значення поля з іншого набору даних (НД-2). Набори даних НД-1 і НД-2 зв'язуються по полю зв'язку. Це поле повинно мати ідентичний тип і в НД-1, і в НД-2. Між НД-1 і НД-2 встановлюється зв'язок, як правило, багато (НД-1)-до-одного (НД-2).

Ключові властивості компонента TDBLookupComboBox:

  • DataSource -вказує на компонентTDataSourceдля НД-1.

  • DataField -встановлює поле НД-1, у який буде поміщатися значення з НД-2.

  • ListSource- вказує на компонентTDataSourceНД-2.

  • ListField -встановлює поле, значення якого буде показуватися в списку вибору. Можна зазначити декілька полів. Тоді всі вони будуть відображатися в списку вибору. Імена полів розділяються крапкою з комою.

  • RowCount -вказує, скільки рядків відображається у списку, що випадає. При зміні розмірів списку, наприклад, шляхом занесення нового значення у властивістьHeight,RowCountзміняться автоматично.

  • KeyField -установлює поле зв'язку між наборами даних НД-1 і НД-2.

  • KeyValue -містить поточне значення поля зв'язку. Якщо під час виконання програми його значення зміниться, то буде зроблена спроба відшукати в НД-2 запис зі значенням, зазначеним в цій властивості.