огою миші зробимо поточним необхідний набір даних (у нашому прикладі Table2), натиснувши на праву кнопку миші, виберемо в меню пункт Field Editor ( редактор полів ) і знову натиснувши на праву кнопку миші і виберемо в меню пункт New Field.
Потім у діалоговому вікні (ріс.124.17) необхідно вказати ім'я поля (у полі Name введемо vychisl), його тип (у полі Type виберемо String) і довжину (у полі Size введемо 3). Помічаємо поле як обчислюване (Calculated). Натискаємо Ok і закриваємо редактор полів .
Рис. 12.16. Вікно визначення властивостей нового поля
Таким чином, для нового поля vychisl створений компонент TField, доступ до якого можна здійснювати в редакторі полів.
Процес, описаний вище, показує як створити обчислюване поле. Якщо подивитися на DBGrid2, то можна бачити, що там тепер ще одне порожнє поле. Для того, щоб помістити значення в це поле необхідно виконати наступний крок.
Для компонента набору даних Table2, до якого належить обчислюване поле, необхідно визначити обробник події OnCalcFields.
Наприклад, нам необхідно знати наявність на складі товарів більше 100 одиниць. Для цього будемо заносити в створене обчислюване поле Table2Vychisl набору даних Table2, асоційованому з таблицею БД Прихід, значення Так, якщо в полі Table2Kolvo цього запису міститься значення більше 100. В іншому випадку в поле Table2Vychisl будемо заносити порожнє значення.
У вікні Редактора коду процедури обробки події OnCalcFields напишемо наступний код:
procedure TDataModule5.Table2CalcFields (DataSet: TDataSet); Table2Kolvo.Value gt; 100 ThenVychisl.AsString:= Так Vychisl.AsString:= raquo ;;
end;
Якщо властивість набору даних AutoCalcFields встановлено в True, подія OnCalcFields настає і при модифікації значень невичісляемих полів в режимах dsInsert і dsEdit даного набору даних або набору даних, реляційно з ним пов'язаного (коли встановлені обмеження цілісності у самій таблиці БД, а не тоді, коли вони маються на увазі).
Процедура-обробник події OnCalcFields містить реалізацію алгоритму обчислення значення обчислюваного поля або групи полів. Необхідно пам'ятати, що в цьому обробнику значення може бути присвоєно лише обчислюваному полю і не може - полю, визначеному в структурі БД (додаток показано на рис. 12.17).
Рис. 12.17. Вид запущеного додатку
Використання SQL-запиту для відображення даних з різних таблиць на екранній формі
Створимо форму для відображення даних з декількох таблиць. Для цього в контейнері TDataModule5 розташуємо компонент TQuery (сторінка Data Access палітра компонентів). За замовчуванням його ім'я Query1. Встановимо його властивість DatabaseName в PRIMER. Розташуємо компонент TDataSource (ім'я DataSource4). Встановимо його властивість DataSet в значення Query1.
Розташуємо у формі №4 компонент TDBGrid. Встановимо його властивість DataSource в значення DataSource4.
У інспекторі об'єктів для компонента Query1 знайдемо властивість SQL і натиснемо кнопку. Потім у вікні редактора наберемо текст SQL-запиту
SELECT P.DatPrih, P.Material, P.Kolvo, Т.Zena,
(P.Kolvo * T.Zena) As StoimMaterialy T, Prihod PT.Material=P.MaterialBY P.DatPrih, P.Material
і натиснемо кнопку Ok.
Після цього встановимо властивість Query1.Active в значення True. Набір даних Query1 містить відомості про прихід матеріалу на склад. У складі записи цього набору присутні поля DatPrih (дата приходу), Material (назва матеріалу), Kolvo (кількість приходу), Zena (ціна за од. Виміру даного матеріалу), Stoim (вартість приходу матеріалу). Як видно з тексту запиту у властивості SQL, набір даних збирається з двох таблиць БД PRIMER, Materialy.DB і Prihod.DB. При цьому з'єднуються записи з цих таблиць БД, що мають однакове значення поля Material.
Рис. 12.18. З'єднання даних з різних таблиць в одному наборі даних
У формі №1 в пункт Звіт введемо наступний код:
Form1.Visible:=False; .Visible:=True;
Зауважимо, що в набір даних Query1 не можна додати нові записи і не можна змінити або видалити існуючі записи в наборі даних. Це відбувається тому, що тип набору даних, збираного більш ніж з однієї таблиці БД, є доступним тільки для читання.
...