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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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

 

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

 

Застосування повинно складатися з двох форм: перша - для перегляду інформації (містить компонент DBGrid для якого властивість ReadOnly має значення True), друга - для редагування (містить компоненти TDBEdit, TDBLookupComboBox та ін.). Додамо в застосування компонент TDataModule і розмістимо в ньому компоненти TDataBase, TTable і TDataSource.

У батьківській формі встановимо властивість DBGrid1.DataSource= DataModule1.DataSource1; а у дочірній формі задамо властивості DataSource для усіх компонентів, що працюють з окремими полями ТБД (компоненти TDBEdit, TDBLookupComboBox та ін.). У батьківській і дочірній формах розмістимо компоненти TLabel, що відображатимуть повідомлення про поточний стан НД.

Батьківська форма містить кнопки “Вставити”, “Змінити”, “Вилучити”. Дочірня форма містить кнопки “Запам'ятати”, “Скасувати”.

 

Оброблювачі подій для батьківської форми:

 

// натиснута кнопка "Вставити"

procedure TParentForm.InsertButtonClick(Sender: TObject);

begin DataModule1.Table1.Insert;

ChildForm.ShowModal;

end;

// натиснута кнопка "Змінити"

procedure TParentForm.EditButtonClick(Sender: TObject);

begin DataModule1.Table1.Edit;

ChildForm.ShowModal;

end;

// натиснута кнопка "Вилучити"

procedure TParentForm.DeleteButtonClick(Sender: TObject);

begin IF MessageDIg('Підтвердити вилучення запису',

mtlnformation, [mbYes, mbNo], 0) = mrYes THEN

DataModule1.Table1.Delete;

end;

 

Оброблювачі подій для дочірньої форми:

 

// натиснута кнопка “Запам'ятати”

procedure TChildForm.PostButtonClick (Sender: TObject;);

begin IF DataModule1.Table1.Modified THEN

DataModule1.Table1.Post;

// при успішному виконанні методу Post виходимо з модальної форми

ChiIdForm.ModalResult:= mrOk;

end;

// натиснута кнопка “Скасувати” (ModalResult = mrCancel)

procedure TChildForm.CancelButtonClick(Sender: TObject);

begin

DataModule1.Table1.Cancel;

end;

 

Пример.

 

 

 


Практична робота № 6

 

Тема: Організація роботи з індексами

Мета: вивчення основ роботи з індексами

 

 

Завдання:

 

Розробити застосування, яке дозволяє отримувати інформацію про індекси. Вивести в:

ListBox1 імена всіх індексів ТБД, асоційованої з Table1;

Edit1.Text список полів індексу, чиє ім’я є поточним в ListBox1.

Примітка: необхідно збільшити у разі потреби кількість індексів таблиці щонайменше до трьох.

Обов’язкові засоби: TIndex Dets, GetIndex Names.

 

Зміст звіту.

 

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

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

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

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

Компонент TIndexDefs

Компонент TIndexDefs містить інформацію про всі індекси таблиці бази даних, що оголошені в ній в поточний момент. TTable має властивість

property IndexDefs:TIndexDefs;

яка містить посилання на об'єкт класу TIndexDefs. Тому для кожного компонента TTable завжди можна отримати інформацію про індекси даної ТБД через властивості і методи TIndexDefs.

Властивості:

property Count: Integer; - повертає число індексів;

property Item[Index:Integer]: TIndexDefs; - кількість об'єктів типу TIndexDefs, кожний з який містить інформацію про конкретний індекс. Index повинний належати діапазону [0..Count-1].

property Name:string; - повертає ім'я індексу;

property Fields:string; - повертає список полів, з яких побудований даний індекс;

property Options:TIndexOptions; - повертає характеристики індексу у вигляді множини TindexOptions = set of (ixPrimary, ixUnique, ixDescending, ixNonMaintained, ixCaseInsensitive), де IxPrimary - визначає первинний індекс; ixUnique - визначає унікальний індекс; ixDescending - визначає індекс, побудований за зменшенням значень ключових полів; ixCaseInsensitive - визначає індекс, нечутливый до регістру літер.

 

 

Методи:

procedure Add(const Name, Fields:string,Options:TIndexOptions) - створює новий об'єкт TIndexDef і поміщає його в колекцію TIndexDefs.Items;

procedure Update;- обновляє елемент колекції TIndexDefs.Items;

procedure Clear;- очищає елемент колекції TIndexDefs.Items;

function IndexOff(const Name:string):integer; - повертає з колекції TIndexDefs.Items індекс, у якого властивість Name збігається з параметром Name даного методу.

function FindIndexForFields(const Fields:string): TIndexDefs;- відшукує індекс полів, що записані в рядку Fields.

procedure GetIndexNames (List:TStrings)- повертає в параметрі List список імен індексів.

 

Приклад: Отримати інформацію про індекси у таблиці студенти.

 

 


Практична робота № 7

 

Тема: Організація пошуку у базі даних

Мета: вивчення властивостей, методів та подій для пошуку даних.

 

Завдання

 

1 Виконання пошуку з використанням індексів та без індексів;

2 Виконання неточного пошуку.

Обов’язкові засоби: Locate, Filtered, FindFirst, FindLast, FindNext, FindPrior, FindKey,FindNearest.

 

Зміст звіту.

 

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

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

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

 

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

 

У компоненті TTable для пошуку записів в НД застосовуються такі методи:

function FindKey([список значень]): Boolean - шукає запис, який точно задовольняє умовам у списку значень; існує також його метод, що дублює, GoToKey;

procedure FindNearest([список значень]) - шукає запис, що приблизно задовольняє умовам у списку значень; існує також його метод, що дублює, GoToNearest;

Крім цього, у TTable є методи, успадковані від батьківського класу:

function Locate([список полів], [список значень]): Boolean - установлює покажчик на запис, у якого список полів точно або неточно містить значення зі списку значень.

function Lookup([список полів], [список значень], [список результуючих полів]):Variant - повертає значення полів зі списку результуючих полів для запису в НД, у якої поля зі списку пошукових полів точно містять значення зі списку значень. Покажчик поточного запису не змінюється.

 



Поделиться:


Последнее изменение этой страницы: 2017-01-25; просмотров: 93; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.81.240 (0.022 с.)