Створення полів, що обчисляються 
";


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



ЗНАЕТЕ ЛИ ВЫ?

Створення полів, що обчисляються



 

Для створення поля, що обчисляється за значеннями інших полів, необхідно:

1 У редакторі полів створити нове поле, помітивши його як Calculated. Для цього потрібно за допомогою миші зробити поточним необхідний НД, натиснути праву кнопку миші, вибрати в меню Field Editor, знову натиснути праву кнопку миші і вибрати в меню New Field. Потім у вікні діалогу необхідно зазначити ім'я поля, його тип (Type) і для текстових полів - довжину (Size). Для нового поля буде створений компонент TField, доступ до якого можна здійснювати в редакторі полів.

2 Для компонента НД, до якого належить поле, що обчисляється, необхідно визначити оброблювач події OnCalcFields. Наприклад, необхідно занести в поле Vychosl НД Table1 значення 'Так', якщо в полі Present цього запису міститься значення True. У противному випадку в поле Table1Vychosl занести порожнє значення.

 

 

procedure TGridForm. TablelCalcFields(DataSet: TDataSet);

begin

if Table1Present. Value then

Table1Vychosl.AsString:= 'Так'

else

Table1Vychosl.AsString:= ";

end;

 

Подія OnCalcFields виникає щоразу, коли курсор (покажчик запису) переміщується в НД від запису до запису. Вона виникає і при ініціалізації НД (після відкриття), а також після фільтрації записів у НД, що також пов'язано зі зміною положення покажчика запису.

Крім того, якщо властивість набору даних AutoCalcFields встановлена в True, подія OnCalcFields наступає також і при модифікації значень інших полів у режимах dslnsert і dsEdit даного НД або НД, реляційно з ним пов'язаного (коли обмеження цілісності явно встановлені в самій ТБД.).

Процедура-оброблювач події OnCalcFields реалізує алгоритм обчислення значення поля або групи полів. У цьому оброблювачі значення може бути присвоєно тільки полю, що обчислюється, але не полю, визначеному в структурі таблиці БД.

 

Створення полів вибору даних (lookup - полів).

 

Поля вибору даних одного НД містять значення поля (полів) з іншого НД. НД-джерело поля вибору зв’язується по ключу з НД-власником поля вибору даних. Поле вибору даних доступне тільки для читання. Звичайно НД-джерело і НД-власник поля вибору даних зв’язані реляційним відношенням “один-до-багатьох“, рідше “один-до-одного“.

Для визначення поля вибору даних необхідно створити нове поле в редакторі полів, зразу ж встановивши радіо-групу FieldType в значення Lookup.

Далі встановлюються значення властивостей:

DataSet – ім’я НД-джерела значень для поля вибору даних;

KeyFields – індексні поля НД-власника поля вибору даних. За цими полями НД-власник з’єднується з НД-джерелом значень поля вибору даних. Якщо в індексі є декілька полів, вони перераховуються через крапку з комою;

LookupKeys – індексні поля НД-джерела значень для поля вибору. За значеннями цих індексних полів встановлюється зв’язок набору-джерела зі значеннями індексних полів НД-власника поля вибору (вони вказані в параметрі KeyFields). Якщо в індексі є декілька полів, вони перераховуються через крапку з комою;

Result Field – поле НД-джерела, що повертається в якості результату. Необхідно, щоб тип поля, що створюється, співпадав з типом поля результату.

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

Поля вибору даних часто використовуються для автоматичного занесення інформації в дану ТДБ з іншої ТДБ. Значення параметрів поля вибору в цьому випадку можна читати так: “Виходячи з реляційного зв’язку по полю (полях), вказаному у властивості KeyField (розглядаємо НД-власника) і по полю (полях), вказаному у властивості LookupKeys (НД-джерела, зазначеного у властивості DataSet) заповнювати поле (поля), вказане в KeyFields значенням (значеннями), взятими з запису, що буде вибраний з меню”. В меню показується тільки те поле НД-джерела, що вказане у властивості ResultField. Властивість

property LookupCache: Boolean;

визначає, чи будуть значення полів вибору даних зберігатися в кеш-пам’яті (True) чи ні (False).

 

Приклад.

 

 


Практична робота № 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;

 



Поделиться:


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

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