Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Fondovi-lekcii.doc
Скачиваний:
20
Добавлен:
10.11.2018
Размер:
4.09 Mб
Скачать

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 для поновлення тільки що вставленого запису – для перевірки змін, які внесені на стороні бази даних.

Контрольні питання:

  1. Опишіть роботу компонента TIBDataSet?

  2. Яка властивість компонента TIBDataSet дає можливість модифікації БД? Опишіть структуру команди.

  3. Яка властивість компонента TIBDataSet здійснює вибір інформації з БД? Опишіть структуру команди.

  4. Яка властивість компонента TIBDataSet додає до БД новий запис? Опишіть структуру команди.

  5. Яка властивість компонента 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;

Контрольні питання:

  1. Яким чином виконується вибір даних з підпорядкованих таблиць?

  2. Яка комнда здійснює вибір підпорядкованих записів?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]