- •Модуль 1 Тема 1. Вступ до sql. Синтаксис sql. Типи даних.
- •1. Вступ до sql.
- •Функції sql:
- •Роль sql
- •Переваги sql:
- •Синтаксис sql.
- •Типи даних.
- •1.3.1. Команди
- •1.3.2. Імена
- •1.3.3. Типи даних
- •1.3.4. Константи
- •1.3.4.1. Числові константи
- •1 .3.4.2. Літерні рядки
- •1.3.4.3. Константи дати і часу
- •1.3.4.4. Іменовані константи
- •1.3.5. Вирази
- •1.3.6. Вбудовані функції
- •Тема 2. Створення баз даних
- •Мова визначення даних
- •2. Створення бази даних
- •Тема 3. Створення таблиць
- •1. Команда створення таблиці.
- •2. Заборона значення null за допомогою обмеження not null
- •Тема 4. Вставка стрічок з допомогою оператора insert. Вилучення стрічок з допомогою оператора delete, редагування стрічки з допомогою команди update.
- •Вставка рядків за допомогою команди insert.
- •Додавання рядка за допомогою положення стовпця
- •Додавання рядка за допомогою назв стовпців
- •Додавання рядків з однієї таблиці в іншу
- •Зміна рядків за допомогою команди update.
- •Зміна рядків
- •Видалення рядків за допомогою команди delete
- •Видалення рядків
- •Тема 5. Оператор select
- •Оператор select.
- •Обчислювальні стовпчики. Альтернативне ім’я стовпчику.
- •Порівняння значення стовпчика із константою
- •Правила виконання однотабличних запитів на вибірку
- •Тема 6. Комбінування умов з допомогою операторів and, or, not. Порівняння по шаблону. Порівняння з діапазоном. Сортування стрічок з допомогою речення order by.
- •Порівняння значень виразів має наступну синтаксичну діаграму:
- •Тема 7. Створення псевдонімів. З’єднання таблиці із собою. Вибір даних з кількох таблиць
- •1. Створення псевдонімів.
- •2. З’єднання таблиці із собою.
- •3. Просте з’єднання таблиць (з’єднання за рівністю)
- •Запити з використанням відношення „головна – підлегла” таблиці (предок – нащадок)
- •3. Запити на вибірку до трьох і більше таблиць
- •4. Запити на об’єднання
- •Тема 8. Введення обмежень в базах даних
- •1. Види обмежень в базі даних.
- •Основні принципи роботи з обмеженнями
- •Присвоєння назви обмеженню
- •2. Первинний і унікальний ключі.
- •3. Зовнішні ключі.
- •4. Обмеження check
- •5. Вилучення обмежень.
- •Тема 9. Використання збережуваних процедур в базах даних. Використання генераторів ключів у базах даних в InterBase. Використання тригерів у базах даних.
- •1. Визначення збережуваної процедури.
- •1.2. Цикли й оператори розгалуження.
- •2. Створення генераторів.
- •2.1. Індекси.
- •2.2. Обробка виключень і помилок.
- •3. 1.Означення тригера.
- •3.2. Приклад тригера.
- •3.3. Контекстні змінні.
- •Тема 10. Безпека в базах даних
- •1. Користувач InterBase.
- •3. Організація користувачі у групи за допомогою ролей.
- •4. Права. Роздача прав.
- •5. Анулювання прав.
- •Модуль 2 Тема 11. Оператор exists. Сумування і групування даних.
- •1.1. Оператор exists.
- •1.2. Використання exists з співвіднесеними підзапитами.
- •1.3. Комбінація оператора exists і з’єднання.
- •1.4. Використання not exists.
- •1.5. Використання складних підзаписів з оператором exists.
- •2.1. Агрегатні (статистичні) функції
- •2.2. Правила опрацювання значення null агрегатними функціями:
- •2.3.Опрацювання унікальних записів агрегатними функціями
- •2.4. Агрегатні функції і значення null
- •3.1. Групування записів
- •3.2. Секція having – умова відбору груп
- •3.3. Обмеження на умову відбору груп
- •3.4. Значення null і умова відбору груп
- •3.5. Секція having без секції group by
- •Тема 12. З’єднання з базою даних. Використання збережуваних процедур в Delphi
- •1. З’єднання з сервером
- •2. Використання збережуваних процедур в Delphi.
- •Компонент tStoredProc.
- •Тема 13. Використання механізму транзакцій компонента Database. Керування транзакціями
- •Тема 14. Сервер баз даних InterBase і компоненти InterBase Express.
- •1. Сервер баз даних InterBase і компоненти InterBase Express
- •2. Механізм доступу до даних InterBase Express
- •3. Компонент tibDatabase.
- •Тема 15. Виконання запитів за допомогою компонента tibDataSet
- •1. Вибірка даних з таблиці.
- •2. Редагування даних за допомогою візуальних компонентів.
- •3. Програмне редагування даних.
- •Тема 16. Підпорядковані запити в таблицях Механізм master-detail
- •Література
Тема 15. Виконання запитів за допомогою компонента tibDataSet
-
Програмне редагування даних.
-
Редагування даних за допомогою візуальних компонентів.
-
Вибірка даних з таблиці.
1. Вибірка даних з таблиці.
Спеціалісти вважають, що компоненти TIBTable та TIBQuery використовувати недоцільно, оскільки вони призначені в основному для сумісності з компонентами BDE. Для роботи з наборами даних радять використовувати компонент TIBDataSet.
Помістимо на форму такі компоненти:
IBTransaction1:TIBTransaction;IBDatabase1:TIBDatabase1; IBDataSet1:TIBDataSet;
DataSourse1:TDataSourse1;DBGrid1:TDBGrid, DBNavigator1:TDBNavigator.
Налаштуємо компоненти IBTransaction1 і IBDatabase1 на з’єднання з базою даних Employee.gdb, які містится в каталозі Program Files\Common Files\Borland Shared\Data. У IBDataSet1 необхідно задати властивості DataBase та Transaction, у DataSourse1задати DataSourse1.DataSet рівним IBDataSet1, а у DBGrid1.Data-Sourse рівним DataSourse1. У компоненті IBDataSet1 властивість BufferChunks встановимо рівною 10000, щоб буфер мів вмістити весь набір даних.
Тепер необхідно вказати той запит, який ми хочемо виконати у властивості SelectSQL компонента IBDataSet1
SelectSQL: SELECT * FROM EMPLOYEE;
Для того, щоб виконати цей запит під час виконання програми необхідно створити такий обробник події OnFormCreate:
procedure TForm1.FormCreate(Sender: TObject);
begin
IBDatabase1.Connected:=True;
IBDataSet1.Active:=True;
end;
2. Редагування даних за допомогою візуальних компонентів.
В запущеному на виконання прикладі редагувати елементи за допомогою компонента DBGrid1 безпосередньо не вдасться, оскільки ми задали лише властивість SelectSQL. Для можливості модифікації необхідно виконати SQL-запит UPDATE, задавши такі команди у властивості ModifySQL:
update EMPLOYEE
set
EMP_NO = :EMP_NO,
FIRST_NAME = :FIRST_NAME,
LAST_NAME = :LAST_NAME,
PHONE_EXT = :PHONE_EXT,
HIRE_DATE = :HIRE_DATE,
DEPT_NO = :DEPT_NO,
JOB_CODE = :JOB_CODE,
JOB_GRADE = :JOB_GRADE,
JOB_COUNTRY = :JOB_COUNTRY,
SALARY = :SALARY
where
EMP_NO = :OLD_EMP_NO
Як бачимо, замість реальних значень у цьому запиті вказані параметри, назви яких співпадають з назвами реальних полів. Таким чином, коли користувач змінить значення полів конкретного запису, то IBDataSet1 сам задасть значення всіх параметрів, взявши їх із відповідних полів. Запит ModifySQL виконується і лише після цього зміни зроблені користувачем появляться у базі даних.
Аналогічна послідовність пов’язана з запитами у властивостей InsertSQL та DeleteSQL – вони виконуються при вставленні нового запису і вилучені запису.
InsertSQL:
insert into EMPLOYEE
(EMP_NO, FIRST_NAME, LAST_NAME, PHONE_EXT, HIRE_DATE, DEPT_NO,
JOB_CODE, JOB_GRADE, JOB_COUNTRY, SALARY)
values
(:EMP_NO, :FIRST_NAME, :LAST_NAME, :PHONE_EXT, :HIRE_DATE,
:DEPT_NO, :JOB_CODE, :JOB_GRADE, :JOB_COUNTRY, :SALARY)
DeleteSQL:
delete from EMPLOYEE
where
EMP_NO = :OLD_EMP_NO
Існує ще одна важлива особливість при створенні таких запитів. Після виконання довільної модифікуючої дії IBDataSet1 виконує запит вказаний у властивості RefreshSQL, який у нашому випадку має вид:
Select
EMP_NO,
FIRST_NAME,
LAST_NAME,
PHONE_EXT,
HIRE_DATE,
DEPT_NO,
JOB_CODE,
JOB_GRADE,
JOB_COUNTRY,
SALARY,
FULL_NAME
from EMPLOYEE
where
EMP_NO = :EMP_NO
Смисл даного запиту стає очевидним, якщо допустити в базі даних існування тригерів для таблиці EMPLOYEE, які модифікують значення полів. Оскільки зміни відбуваються у самій базі даних відразу після модифікації, то без повторного перечитування запису (тобто без Select модифікованого запису або вставленого запису) ми не взнаємо про ті зміни, які були зроблені в тригерах.
IBX надає можливість швидко згенерувати необхідні модифікаційні запити за допомогою редактора IBDataSet, який викликається за допомогою контекстного меню. Вибравши із списка Table Name нашу таблицю, сформуємо списки Key Fields і Update Fields. В списку Key Fields необхідно виділити ті поля, які будуть формувати умову WHERE в запитах. Очевидно, що це повинні бути поля, які визначають первинний ключ у таблиці. Якщо такий ключ існує для вибраної таблиці, його можна помітити просто натиснувши на кнопку Select Primary Keys. В списку Update Fields необхідно виділити ті поля, які користувач потім може редагувати. На рисунку видно, що поле FULL_NAME не включено до списку, оскільки це CALCULATED-поле і його значення не можна змінювати.
Залишається лише натиснути кнопку Generate SQL, щоб одержати всі запити: InsertSQL, ModifySQL, DeleteSQL, RefreshSQL.