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

Завдання.

  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 запис зі значенням, зазначеним в цій властивості.