Вивчаємо зв'язку з excel і access

Вивчаємо компонент TBatchMove

- Значення batAppend вказує, що нові рядки просто додаються в результуючу таблицю.

- Значення batUpdate змушує метод замінити рядки таблиці-наступника відповідними рядками таблиці-джерела. Відповідність рядків визначається по індексному полю.

- Використання значення batAppendUpdate призводить до того, що метод замінює рядки наступника відповідними рядками таблиці-джерела. Відповідність рядків визначається по індексному полю. Якщо відповідні рядки не виявлені, то відбувається їх додавання в таблицю,

- Значення batDelete змушує метод видаляти рядки наступника, відповідні рядках вихідної таблиці. Відповідність рядків визначається по індексному полю.

Властивість Mappings визначає відповідність нулів вихідної таблиці полях приймаючої таблиці. Для таблиць формату Paradox можна використовувати властивість KeyViolTableName.

У цій властивості зберігається назва таблиці, в яку поміщаються записи, які не вдалося скопіювати через обмеження посилальної цілісності або порушень ключа, а у властивості ProblemTableName зберігається таблиця Paradox, в яку поміщаються записи, які не скопійовані з причини невідповідності типів полів або з іншої причини .

Для початку копіювання даних слід викликати метод Execute. Властивості AbortQnKeyViol і AbortOnProblem в разі встановлення їх значенні в True перервуть операцію копіювання при виникненні помилки.

У лістингу 3.4 приведений приклад використання компонента.

Лістинг 3.4.
ПрімеріспользованіякомпонентаTBatchMove

В даному розділі буде розглянуто цікавий приклад - зв'язок з таблицею Excel, отримання з неї даних і зміна їх.

Для початку необхідно підготувати файл Excel і налаштувати доступ до нього через драйвер ODBC. У табл. 3,4. наведено вміст електронної таблиці в форматі Excel, яка буде використовуватися в розглянутому прикладі.

Таблиця 3.4.
Таблиця «Метеоумови»

Потім потрібно виділити діапазон комірок (рис. 3.15) і задати йому ім'я, наприклад TestTable.

Вивчаємо зв'язку з excel і access

Мал. 3.15. Іменований діапазон комірок

Створений файл треба зберегти з ім'ям Test.xls. Далі необхідно вирішити багато користувачів доступ до файлу.
Для цього досить виконати команду меню Сервіс -> Доступ до книги. У діалоговому вікні потрібно звести прапорець «Дозволити спільний доступ», а потім знову зберегти файл.

На цій стадії вже можна створити ODBC-з'єднання з робочою книгою. Для цього слід запустити утиліту ODBC Administrator.
В системі Windows XP вона називається Data Sources і знаходиться в розділі Administrative Tools.

В основному вікні утиліти потрібно натиснути кнопку Add і в діалоговому вікні вибрати значення Driver do Microsoft Excel. Після цього - натиснути кнопку Finish. У вікні потрібно дати ім'я TestExcelDS джерела даних в поле Data Source Name.
Натисніть кнопку SeLect WorkBook і в діалоговому вікні вибору вкажіть раніше створений файл. А потім потрібно за допомогою кнопки Options відкрити діалогове вікно налаштувань нарікати прапорець Read Only. Створене з'єднання з'явиться в списку джерел даних ODBC і автоматично з'явиться в списку доступних псевдонімів баз даних BDE.

Тепер можна перейти до розробки відповідної програми. На формі слід розмістити компоненти TTable, TDataSpurce, TDBGrid і дві кнопки. У властивості DatabaseName компонента TTable треба вибрати зі списку псевдонім TestExcelDS. У властивості TableName вказати значення TestTable, яке визначає заданий раніше діапазон комірок.

Необхідно зв'язати компоненти ТTable і TDataSource, а потім TDataSource і TDBGrid. У кнопках, розташованих на формі, потрібно описати виклики методів Post і ApplyUpdates з попереднього прикладу.

Після цього можна скомпілювати додаток, закрити Delphi і запустити скомпільований модуль автономно.

На рис. 3.16 показано вікно програми. Вона дозволяє змінювати дані і вводити нові. При введенні нових даних кордону іменованої області осередків будуть збільшуватися.

Вивчаємо зв'язку з excel і access

Мал. 3.16. Приклад роботи з Excel через BDE

Приклад зв'язку з Access через BDE

Точно так само можна за допомогою BDE здійснювати доступ до таблиць у форматі Access. Робота з Access через BDE може проводитися тільки за рахунок використання драйверів ODBC. Тому знову потрібно зв'язати драйвер ODBC з джерелом даних.

Як і раніше, потрібно запустити утиліту ODBC Administrator. У список потрібно додати драйвер Driver do Microsoft Access. Створену зв'язок з джерелом даних треба назвати TestAccessDS. Потім потрібно натиснути кнопку Select і в діалоговому вікні вибору бази даних вказати ім'я файлу dbdemos.mdb. Ця тестова база даних поставляється з BDE і зазвичай розташована в каталозі X: \ Prog-ram Files \ Common Files \ Borland Shared \ Data.
Після натискання кнопки OK в BDE автоматично з'явиться псевдонім TestAccessDS, налаштований на з'єднання з базою даних.

Тепер потрібно створити новий додаток і додати в нього модуль даних. Модуль даних треба зберегти з ім'ям AccessDM, На формі потрібно розмістити компоненти TDataSource, TDatabase і ТTable. Компонент TDatabase потрібно зв'язати з базою даних за допомогою псевдоніма TestAccessDS. Властивість LoginPrompt повинен отримати значення False, а властивість Connected - значення True.

Тепер властивості Database потрібно присвоїти значення AccessDB. Для компонента TTable - задати ім'я EmplоуееТbl. Як джерело даних для неї можна використовувати таблицю employee. Властивість CachedUpdates має отримати значення True.

На цій стадії можна активувати набір даних. Компонент TDataSource повинен отримати ім'я EmployeeDS. а потім буде потрібно зв'язати його з таблицею EmplоуееТbl. Модуль даних потрібно підключити до головної формі командою uses AccessDH. На формі потрібно також розмістити компонент TDBGrid і три кнопки. Компонент TDBGrid потрібно зв'язати з TDataSource. А в обробниках натискання кнопок потрібно вказати код, наведений у лістингу 3.5.

procedure TForml.PostBtnClick (Sender: TObject);
begin
with AccessDataModule.EmployeeTbl do begin
if state In [dslnsert, dsEdit] then
Post;
end;
end;
procedure TForml.DeleteBtnClick (Sender: TObject);
begin
with AccessDataModule.EmployeeTbl do begin
if state = dsbrowse then
Delete;
end;
end;
procedure TForml.SaveBtnClick (Sender: TObject);
begin
AccessDataModule, EmplоуееТbl.ApplyUpdates;
end;

Форма додатка показана на рис. 3.17.

Вивчаємо зв'язку з excel і access

Мал. 3.17. Робота з Access через BDE

Так як таблиця пов'язана з дочірньою таблицею, то в силу обмежень посилальної цілісності дані з таблиці не можна видалити. Можна заносити і видаляти свої дані. Додаток можна розширити, додавши в модуль даних інші таблиці бази і визначивши для них відносини посилальної цілісності.

Приклад зв'язку з InterBase через BDE

Як вже говорилося раніше, Borland поставляє з BDE набір драйверів SQL Links з налаштованим псевдонімом IBLocaL для доступу до бази даних EMPLOYEE.GDB.

Компонент потрібно зв'язати з базою даних, присвоївши значення True властивості Connected. Також необхідно встановити зв'язок між компонентами TQuery і TDatabase. У властивості SQL компонента TQuery потрібно вказати текст SQL-запиту, який отримує все рядки таблиці:
SELECT * FROM Country

Тепер необхідно налаштувати компонент TUpdateSQL і зв'язати його з компонентом TQuery. Потім зв'язати TQuery з таблицею TDBGrid. Компоненти TDBEdit повинні бути пов'язані з джерелом даних через властивість DataSource. А у властивостях DataField для кожного поля введення треба вказати відповідні поля таблиці. Далі в обробниках кнопок залишиться прописати код для методів Insert, Delete і ApplyUpdates. Вид основного вікна програми показаний на рис. 3.18.

Вивчаємо зв'язку з excel і access

Мал. 3.18. Робота з Interbase через BDE

Для демонстрації була взята досить маленька таблиця. Приклад можна розширити, якщо додати в нього інші таблиці бази і налаштувати між ними відносини посилальної цілісності.