- •Модуль 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
- •Література
3. Програмне редагування даних.
Оскільки TIBDataSet породжений класом ТDataSet, у нього є три основні методи для зміни даних: Delete, Insert (Append), Edit. Вставимо на форму кнопку Button. Нехай нам потрібно вставити новий запис в IBDataSet1 при натискуванні цієї кнопки. Обробник події OnClick при цьому буде мати вид:
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
with IBDataSet1 do begin
Insert;
FieldByName('EMP_NO').AsInteger:=147;
FieldByName('DEPT_NO').AsInteger:=600;
FieldByName('JOB_CODE').AsString:='VP';
FieldByName('JOB_GRADE').AsInteger:=2;
FieldByName('SALARY').AsInteger:=105900;
FieldByName('HIRE_DATE').AsDateTime:=Now;
FieldByName('JOB_COUNTRY').AsString:='USA';
FieldByName('FIRST_NAME').AsString:='Smit';
FieldByName('LAST_NAME').AsString:='Piter';
Post;
end;
end;
Метод Insert формує пустий буфер для нашого (поки ще не введеного запису), Далі ми задаємо значення потрібних полів. Після виконання методу Post IBDataSet1 виконує запит, записаний у властивості InsertSQL, підставивши замість параметрів значення полів, які ми задали.
Якщо запит пройшов успішно, то IBDataSet1 автоматично виконує RefreshSQL для поновлення тільки що вставленого запису – для перевірки змін, які внесені на стороні бази даних.
Контрольні питання:
-
Опишіть роботу компонента TIBDataSet?
-
Яка властивість компонента TIBDataSet дає можливість модифікації БД? Опишіть структуру команди.
-
Яка властивість компонента TIBDataSet здійснює вибір інформації з БД? Опишіть структуру команди.
-
Яка властивість компонента TIBDataSet додає до БД новий запис? Опишіть структуру команди.
-
Яка властивість компонента TIBDataSet вилучає інформацію з БД? Опишіть структуру команди.
Тема 16. Підпорядковані запити в таблицях Механізм master-detail
Механізм мастер-деталь часто виконується в клієнтських програмах для роботи з базами даних, оскільки саме він дозволяє легко пов’язувати дані з різних таблиць, які одержуються в наслідок нормалізації бази даних.
Додамо в програмі, яку ми розробили в роботі №14 нові компоненти:
IBDataSet2, DataSource2, DBGrid2. Пов’яжемо DataSource2 з IBDataSet2, а DBGrid2 з DataSource2. Вкажемо такий SelectSQL запит для IBDataSet2:
SELECT * FROM DEPARTMENT;
За допомогою редактора DataSet Editor створимо такі запити:
InsertSQL:
insert into DEPARTMENT
DEPT_NO, DEPARTMENT, HEAD_DEPT, MNGR_NO, BUDGET, LOCATION, PHONE_NO)
values
:DEPT_NO, :DEPARTMENT, :HEAD_DEPT, :MNGR_NO, :BUDGET, :LOCATION, :PHONE_NO)
DeleteSQL:
delete from DEPARTMENT
where
DEPT_NO = :OLD_DEPT_NO
ModifySQL:
update DEPARTMENT
set
DEPT_NO = :DEPT_NO,
DEPARTMENT = :DEPARTMENT,
HEAD_DEPT = :HEAD_DEPT,
MNGR_NO = :MNGR_NO,
BUDGET = :BUDGET,
LOCATION = :LOCATION,
PHONE_NO = :PHONE_NO
where
DEPT_NO = :OLD_DEPT_NO
RefreshSQL:
Select
DEPT_NO,
DEPARTMENT,
HEAD_DEPT,
MNGR_NO,
BUDGET,
LOCATION,
PHONE_NO
from DEPARTMENT
where
DEPT_NO = :DEPT_NO
Тепер необхідно внести зміни до IBDataSet1. По перше, необхідно задати властивість IBDataSet1.DataSource рівною DataSource2. По друге, необхідно зміними IBDataSet1.SelectSQL:
SELECT * FROM EMPLOYEE
WHERE DEPT_NO=:DEPT_NO;
При цьому значення параметра :DEPT_NO буде автоматично вибиратися з одноіменного поля IBDataSet2: DEPT_NO.
Запустивши програму, ми побачимо, що при переміщеннях по другій таблиці в першій будуть відображені лише співробітники поточного відділу.
Настроїмо IBDataSet1 таким чином, щоб при додаванні нового запису про робітника автоматично підставлявся номер поточного відділу. Для цього напишемо такий обробник OnNewRecord у IBDataSet1:
procedure TForm1.IBDataSet1NewRecord(DataSet: TDataSet);
begin
IBDataSet1.FieldByName('DEPT_NO').AsInteger:=
IBDataSet2.FieldByName('DEPT_NO').AsInteger;
end;
Контрольні питання:
-
Яким чином виконується вибір даних з підпорядкованих таблиць?
-
Яка комнда здійснює вибір підпорядкованих записів?