Довідник з delphi - редактор dataset, обчислювані поля

Управління TDBGrid під час виконання

Приклади, які ви побачите в цій статті, продемонструють основні способи, якими користуються більшість програмістів для показу таблиць БД користувачам. Для розуміння більшої частини матеріалу потрібно загальне знання середовища і мови Delphi.

Відкрийте комбобокс "Object Selector" вгорі Інспектори Об'єктів - в даний час там є два компоненти: TForm і TQuery.

Натисніть праву кнопку миші на об'єкті TQuery і в контекстному меню виберіть пункт "Fields Editor". Натисніть кнопку Add - з'явитися діалог Add Fields, як показано на рис.1

Ці нові об'єкти будуть використовуватися для візуального представлення таблиці CUSTOMER користувачеві.

Ось повний список об'єктів, які тільки що створені:

Ця угода може бути дуже корисно, коли Ви працюєте з декількома таблицями, і відразу хочете знати, на поле якої таблиці посилається дана змінна.

Найбільш важлива властивість називається Value. Ви можете отримати доступ до нього так:

procedure TForm1.Button1Click (Sender: TObject);

У коді, показаному тут, спочатку присвоюються значення змінним d і S. Наступні два рядки змінюють ці значення, а останній дві привласнюють нові значення об'єктів. Не має великого сенсу писати код, подібний цьому, в програмі, але цей код служить лише для того, щоб продемонструвати синтаксис, який використовується з нащадками TField.

Властивість Value завжди відповідає типу поля, до якого воно відноситься. Наприклад у TStringFields - string, TCurrencyFields - double. Однак, якщо ви відображаєте поле типу TCurrencyField за допомогою компонент, "чутливих до даних" (data-aware: TDBEdit, TDBGrid etc.), то воно буде представлена ​​рядком типу: "$ 5.00".

Це могло б змусити вас думати, що у Delphi раптово відключився строгий контроль типів. Адже TCurrencyField.Value оголошена як Double, і якщо Ви пробуєте привласнити йому рядок, Ви отримаєте помилку "type mismatch" (невідповідність типу). Вищезгаданий приклад демонструє насправді властивості об'єктів візуалізації даних, а не послаблення перевірки типів. (Однак, є можливість отримати значення поля вже перетворене до іншого типу. Для цього у TField і його нащадків є набір методів типу AsString або AsFloat. Звичайно, перетворення відбувається тільки тоді, коли має сенс.)

Якщо потрібно отримати імена полів в поточному DataSet, то для цього використовується властивість FieldName одним з двох способів, показаних нижче:

Якщо ви хочете отримати ім'я об'єкта, пов'язаного з полем, то ви повинні використовувати властивість Name:

Для таблиці CUSTOMER, перший приклад поверне рядок "CustNo", а будь-яка з рядків другого прикладу рядок "Query1CustNo".

  • виконання обчислень за двома або більше полів в DataSet, і відображення результату обчислень в третьому полі.
  • імітація з'єднання двох таблиць з можливістю редагувати результат з'єднання.

Програма CALC_SUM.DPR із прикладів до даного уроку ілюструє перший випадок використання обчислюваних полів.

Ця програма пов'язує три таблиці щодо один до багатьох. Зокрема, ORDERS і ITEMS пов'язані по полю OrderNo, а ITEMS і PARTS пов'язані по полю PartNo. (В таблиці ORDERS зберігаються всі замовлення; в таблиці ITEMS - предмети, зазначені в замовленнях; PARTS - довідник предметів). У програмі можна переміщатися по таблиці ORDERS і бачити пов'язаний з поточним замовленням список включених в нього предметів. Програма CALC_SUM досить складна, але добре ілюструє потужність обчислюваних полів.

Послідовність створення проекту CALC_SUM:

  • Створіть новий проект (File | New Project) і видаліть з нього форму (в Менеджері Проекту View | Project Manager)
  • Виберіть експерта форм БД з меню Help.
  • На першому екрані, виберіть "Create a master / detail form" і "Create a form using TQuery Objects".
  • Натисніть кнопку Next і виберіть таблицю ORDERS.DB з псевдоніма БД DBDEMOS.
  • Натисніть Next і виберіть поля OrderNo, CustNo, SaleDate, ShipDate і ItemsTotal з таблиці ORDERS.DB.
  • Натисніть Next і виберіть "Horizontal" з розстановки компонентів dbEdit на формі.
  • Натисніть Next і виберіть таблицю ITEMS.DB.
  • У двох наступних екранах виберіть всі поля з таблиці і помістіть їх в grid.
  • Натисніть Next і виберіть поле OrderNo з Master і Detail ListBoxes, і натисніть кнопку Add.
  • Натисніть Next та згенеруйте форму.

Потрібно багато слів для того, щоб описати процес показаний вище, але, фактично, виконання команд в Експерті форм БД легко і інтуїтивно.

Виділіть перший з двох об'єктів TQuery і встановлять властивість Active в True. Для Query2 у властивості SQL напишіть текст запиту:

select * from Items I, Parts P

where (I.OrderNo =: OrderNo) and

Простий процес описаний в попередньому абзаці, показує як створити обчислюване поле. Якщо подивитися в DBGrid, то можна бачити, що там тепер є ще одне порожнє поле. Для того, щоб помістити значення в це поле, відкрийте в інспектор об'єктів сторінку подій для об'єкта Query2 і зробіть подвійне клацання на OnCalcFields. Заповніть створений метод так:

procedure TForm2.Query2CalcFields (DataSet: TDataSet);

Після запуску програми поле Total буде містить рядок $ 23.00.

Це показує, наскільки просто створити обчислюване поле, яке показує правильно сформатував дані. Насправді це поле повинно показувати щось інше - твір полів Qty (кількість) і ListPrice (ціна). Для цього вищенаведений код для події OnCalcFields потрібно змінити наступним чином:

procedure TForm1.Query2CalcFields (DataSet: TDataset);

Якщо тепер запустити програму, то поле Total буде містити потрібну установку.

У обробнику події OnCalcFields можна виконувати і більш складні обчислення (це буде показано пізніше), однак слід пам'ятати, що це викликає відповідне уповільнення швидкості роботи програми.

procedure TForm1.Query1CalcFields (DataSet: TDataset);

with Query2 do begin

Схожі статті