Автопрісоедіненіе (автолінковка) таблиць при відкритті програми бази даних

Розділена база даних


Проектріруя свої найперші бази даних в Access, Починаючі програмісти як правило будують програми, які зазвичай складаються з одного файлу бази даних, Тобто таблиці, форми, звіти – всі розташовані в одному файлі mdb. Така схема може бути зручна лише тоді, коли база робиться що називається "для себе". Але Access так само дозволяє крім локальних додатків баз даних створювати і мережеві. У найпростішому випадком це розділена база даних, Яка включає в себе два файли mdb: перший – це файл об'єктів даних (У ньому зберігається більшість таблиць), другий – файл об'єктів додатки (у ньому містяться всі об'єкти, що залишилися бази – Форми, запити, звіти, сторінки доступу до даними, Модулі VBA, макроси). У цьому випадку у файлі об'єктів додатку необхідно встановити зв'язки з таблицями, що зберігаються у файлі об'єктів даних.


При поділі бази даних отримують наступні переваги:



  1. У однокористувальницької середовищі можна оновлювати об'єкти докладання бази, не надаючи впливу на існуючі дані. При цьому додаток оновлюється простою заміною файлу об'єктів докладання бази. Альтернативою цьому може служити такий спосіб: уявіть, що Ви встановили нерозділене базу даних, користувачі почали працювати з нею, причому постійно, і тут Вам дають завдання, що або змінити: зробити новий звіт, запит і т. д. Доведеться виганяти користувачів, сідати за машину, робити роботу. І весь цей час база буде не робочою. Звичайно, така ситуація не реальна. Реальніше, що швидше за виженуть Вас з роботи, ніж зупинять виробництво. Тому, навіть однокористувацькі бази даних краще робити розділеними.
  2. У багатокористувацької середовищі з одними і тими ж даними можуть спільно працювати всі користувачі програми, оскільки файл об'єктів даних розміщується на файловому сервері. В якості файлового сервера може виступати загальна папка (з відкритим для всіх доступом) в якій поміщають файл об'єктів даних (база з таблицями).

Сподіваюся, що з приводу доцільності поділу бази даних сумнівів немає. Залишилося вирішити питання, як же це зробити. Є два варіанти:



  1. робимо нову порожню базу, тиснемо у вікні бази правою кнопкою, вибираємо в контекстному меню "Імпорт" або "Файл – Зовнішні дані – імпорт", і далі по діалогу. У результаті в базу будуть імпортовані (скопійовані) таблиці. Видаляємо таблиці з бази, звідки робився імпорт, і підключаємо її до таблиць нової бази.
  2. робимо поділ бази за допомогою майстра: "Сервіс – службові програми – поділ баз даних" і далі по діалогу.

Підключення ж до сервера (бази з таблицями) робиться дуже просто – тиснемо правою кнопкою у вікні бази об'єктів додатки (там, де форми і все інше), вибираємо в контекстному меню "Зв'язок з таблицями" або "Файл – Зовнішні дані – Зв'язок з таблицями" і далі по діалогу. У результаті в нашій базі з'являться ярлики таблиць, причому із позначкою стрілки ліворуч, який означає, що таблиці зовнішні. Обмеження при роботі з такими таблицями – не можна міняти їх структуру (додавати, змінювати поля і т. д.) в цій базі. Можна тільки в тій, де вони створені (знаходяться).
Але краще, якщо вже вирішили робити базу розділеною, при проектуванні відразу ж створювати дві бази mdb: в одну поміщаємо таблиці, в іншу все інше.
Отже, база розділена. Нагадаю, основна перевага поділу бази – можливість створення мережевого додатку. Уявімо: на одному з мережних комп'ютерів створюємо папку "База", відкриваємо до неї загальний доступ (Потрібно так само відкрити доступ і до диска, на якому встановлений Access, звичайно "С"), і поміщаємо в неї файл об'єктів даних (базу з таблицями). На інших комп'ютерах розміщуємо копії файлів об'єктів докладання (Базу з формами, звітами і т. д.) і підключаємо їх до нашого "сервера". Вийшло мережевий додаток – багато користувачів заносять дані в одну базу. Такий додаток називається "Файл – серверним", так як у якості "сервера" виступає файл об'єктів даних.
Але припустимо, з якихось причин місцерозташування "сервера" змінилося – папку База перемістили. Як тільки користувачі запустять свої додатки, у них з'явиться повідомлення про те, що таблиці не знайдені. У цьому випадку, тиснемо правою кнопкою по ярлику таблиці у додатку користувачів, вибираємо у контекстному меню "Диспетчер пов'язаних таблиць", позначаємо ті таблиці, шлях до яких потрібно оновити, або тиснемо "Виділити все", потім "ОК" і далі по діалогу.
Всі вищевказані дії робляться вручну. Але чи можна все це зробити програмно?


Автопрісоедіненіе (автолінковка) таблиць

Спочатку подумаємо, в яких ще випадках, окрім як небажання вручну натискати на кнопки, може знадобиться автолінковка? Здавалося б, помістив базу на комп'ютер – "сервер", підключив до неї бази (додатки) користувачів, і не чіпай її (не переміщуй). Навіщо кожен раз при запуску чіпляти таблиці? Справа тут ось у чому:



  1. Іноді доводиться міняти місце розташування "файлового сервера". Уявіть, 50 користувачів, 50 разів доведеться бігати до кожного і настроювати нове підключення.
  2. Припустимо, Ви зробили інсталяційний дистрибутив вашої програми Access – Setup.exe. Звідки вам знати, куди користувач захоче встановити Вашу програму: на "С", "D" або куди то ще? Можна звичайно в налаштуваннях програми – пакувальника вказати, що програма буде ставитися тільки в "С: / Program Files …". Але такий підхід не серйозний, і лише покаже Ваш непрофесіоналізм.

Стало бути, діватися нікуди, доведеться чіплятися. Що для цього знадобиться?


Найголовніше – це CurrentProject.Path (Поточний проект – шлях): виявляється, Access сам знає, куди його встановили. Далі знадобляться програмні методи роботи з таблицями (читання, запис, видалення даних) – адже потрібно не просто визначити, куди встановили додаток, а й зберегти його шлях в таблиці, і потім "підчепити" їх по цьому шляху. Робиться це за допомогою об'єктної моделі доступу до даних DAO – Data Access Objects. Об'єкти доступу до даних створювалися, як об'єктно-орієнтований інтерфейс для ядра баз даних Jet фірми Microsoft як раз для того, щоб можна було програмно вносити, змінювати, видаляти дані в таблицях.


Загальна схема роботи підключення:


під час запуску програми запускається макрос AutoExec – Щоб він запускався саме при запуску, він повинен називатися AutoExec – це зарезервоване ім'я в Access. Макрос в свою чергу запускає функцію SetReferences () з модуля AutoPatch, Яка власне і робить автолінковку таблиць. Далі макрос запускає форму frmStart – Стартову форму додатку.


Шлях бази зберігається в таблиці tSystemPath – Pname. Імена таблиць, які потрібно приєднати – у таблиці tSystemTables – Tname. Якщо ви будете застосовувати цей приклад у своїх проектах, Вам потрібно буде записати туди імена своїх таблиць.


У даному прикладі при запуску програми крім автолінковкі робиться ще одна важлива річ: записується шлях до папки з резервними копіями бази (про це трохи нижче). Це так звані дані налаштування програми. Їх може бути багато: наприклад, каталог вивантаження знімків звітів, каталог шаблонів. Dot і т. д. Щоб після запуску, додаток був працездатним, потрібно всі ці налаштування визначити і зберегти у відповідних таблицях, в даному випадку tAdminCop.


Резервне копіювання бази даних


Хоча Access і вважається достатньо надійною системою, але і в неї бувають збої і бази "руйнуються" – немає в світі досконалості. А тому вважається хорошим тоном зробити сервіс – збереження резервних копій бази. Дійсно, навіщо ризикувати?


Для цього знадобляться методи роботи з файловою системою Windows – модуль FileSystem та функції роботи з файлами: fDeleteFile, fCopyFile. Назви говорять самі за себе. Щоб користувач міг вказувати / створювати каталог для збереження резервних копій знадобиться GetDirFolder – Функція відкриття діалогового вікна вибору каталогу (папки).


Безпосередньо копіювання проводиться за допомогою процедури sCopBase в модулі форми frmStart. Причому, спочатку перевіряється наявність каталогу для збереження копії бази, наявність самої бази – функції IsFolderName, IsFileName.
Імена копій бази задаються із зазначенням дати і часу копіювання.


Приклад, як це все працює, Ви можете завантажити нижче.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*