Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторні ПАІС.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
561.66 Кб
Скачать

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. Скомпонуйте описаний проект для перегляду і редагування таблиці Customer з бази даних Sales.gdb.

  1. Запустіть програму на виконання.

  2. Вставте в таблицю за допомогою візуальних компонентів новий рядок.

  3. Вилучте цей рядок із таблиці.

  4. Вставте програмно новий рядок у таблицю.

  5. Вилучте цей рядок із таблиці.

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

  1. Що виконує компонент TIBDataSet?

  2. Що виконує властивість ModifySQL компонента TIBDataSet? Яка команда SQL здійснює це?

  3. Що виконують властивості InsertSQL та DeleteSQL компонента TIBDataSet? Які команди SQL здійснює це?

Практична робота № 6 Тема роботи: Виконання механізму Master-detail в компонентах tibDataSet.

Мета роботи: Навчити створювати підпорядковані запити в таблицях за допомогою компонента TIBDataSet.

ОСНОВНІ ТЕОРЕТИЧНІ ВІДОМОСТІ

Механізм master-detail.

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

Додамо в проект нові компоненти:

IBDataBase1, IBTransaction1, IBDataSet1, DataSource1, DBGrid1. Пов’яжемо DataSource1 з IBDataSet1, а DBGrid1 з DataSource1. Вкажемо такий SelectSQL запит для IBDataSet1:

SELECT * FROM Customer;

За допомогою редактора DataSet Editor створимо такі запити:

InsertSQL:

INSERT INTO customer (CUSTOMER_ID, FNAME, LNAME, CREDIT, WORK_ADDRESS, ALT_ADDRESS,CITY, STATE, WORK_PHONE, ALT_PHONE, COMPANY)

VALUES ( :CUSTOMER_ID,:FNAME,:LNAME,:CREDIT,:WORK_ADDRESS,:ALT_ADDRESS,

:CITY,:STATE,:WORK_PHONE,:ALT_PHONE,:COMPANY)

DeleteSQL:

delete from customer

where customer_id= :customer_id

ModifySQL:

update Customer

set

CUSTOMER_ID = :CUSTOMER_ID,

FNAME = :FNAME,

LNAME = :LNAME,

CREDIT = :CREDIT,

WORK_ADDRESS = :WORK_ADDRESS,

ALT_ADDRESS = :ALT_ADDRESS,

CITY = :CITY,

STATE = :STATE,

WORK_PHONE = :WORK_PHONE,

ALT_PHONE = :ALT_PHONE,

COMPANY = :COMPANY

RefreshSQL:

Select

CUSTOMER_ID,

FNAME,

LNAME,

CREDIT,

WORK_ADDRESS,

ALT_ADDRESS,

CITY,

STATE ,

WORK_PHONE,

ALT_PHONE,

COMPANY

From Customer

where customer_id= :customer_id

Тепер необхідно внести зміни до IBDataSet2. По перше, необхідно задати властивість IBDataSet1.DataSource рівною DataSource1. По друге, необхідно зміними IBDataSet1.SelectSQL:

select *

from SALES

where customer_id = :Customer_id

При цьому значення параметра :Customer_id буде автоматично вибиратися з одноіменного поля IBDataSet1: Customer_id.

Запустивши програму, ми побачимо, що при переміщеннях по другій таблиці в першій будуть відображені лише покупці, які здійснили замовлення.

Налаштуємо IBDataSet2 таким чином, щоб при додаванні нового запису про покупця автоматично підставлявся номер поточного замовлення. Для цього напишемо такий обробник OnNewRecord у IBDataSet2:

procedure TForm1.IBDataSet2NewRecord(DataSet: TDataSet);

begin

IBDataSet2.FieldByName('Customer_id').AsInteger := IBDataSet1.Fields[0].AsInteger;

end;

З А В Д А Н Н Я

Скомпонуйте описаний проект і перевірте його роботу.