Спеціалісти вважають, що компоненти 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: SELECT * FROM EMPLOYEE;
Для того, щоб виконати цей запит під час виконання програми необхідно створити такий обробник події OnFormCreate:
procedure TForm1.FormCreate(Sender: TObject);
begin
IBDatabase1.Connected:=True; IBDataSet1.Active:=True;
end;
Редагування даних за допомогою візуальних компонентів.
|
|
В запущеному на виконання прикладі редагувати елементи за допомогою компонента 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 =: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 =: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 модифікованого запису або вставленого запису) ми не взнаємо про ті зміни, які були зроблені в тригерах.
|
|
IB надає можливість швидко згенерувати необхідні модифікаційні запити за допомогою редактора IBDataSet, який викликається за допомогою контекстного меню. Вибравши із списка Table Name нашу таблицю, сформуємо списки Key Fields і Update Fields. В списку Key Fields необхідно виділити ті поля, які будуть формувати умову WHERE в запитах. Очевидно, що це повинні бути поля, які визначають первинний ключ у таблиці. Якщо такий ключ існує для вибраної таблиці, його можна помітити просто натиснувши на кнопку Select Primary Keys. В списку Update Fields необхідно виділити ті поля, які користувач потім може редагувати. На рисунку видно, що поле FULL_NAME не включено до списку, оскільки це CALCULATED-поле і його значення не можна змінювати.
Залишається лише натиснути кнопку Generate SQL, щоб одержати всі запити: InsertSQL, ModifySQL, DeleteSQL, RefreshSQL.