Проектрируя свои самые первые базы данных в Access , начинающие программисты как правило строят приложения, которые обычно состоят из одного файла базы данных , то есть таблицы, формы, отчеты — все расположены в одном файле mdb. Такая схема может быть удобна лишь тогда, когда база делается что называется «для себя». Но Access так же позволяет кроме локальных приложений баз данных создавать и сетевые. В простейшем случаем это разделенная база данных , которая включает в себя два файла mdb: первый — это файл объектов данных (в нем хранится большинство таблиц), второй — файл объектов приложения (в нем содержатся все оставшиеся объекты базы — формы, запросы, отчеты, страницы доступа к данным , модули VBA, макросы). В этом случае в файле объектов приложения необходимо установить связи с таблицами, хранящимися в файле объектов данных.
При разделении базы данных получают следующие преимущества:
- В однопользовательской среде можно обновлять объекты приложения базы, не оказывая влияния на существующие данные. При этом приложение обновляется простой заменой файла объектов приложения базы. Альтернативой этому может служить такой способ: представьте, что Вы установили неразделенную базу данных, пользователи начали работать с ней, причем постоянно, и тут Вам дают задание, что либо изменить: сделать новый отчет, запрос и т. д. Придется выгонять пользователей, садиться за машину, делать работу. И все это время база будет не рабочей. Конечно, такая ситуация не реальна. Реальнее, что скорее выгонят Вас с работы, чем остановят производство. Поэтому, даже однопользовательские базы данных лучше делать разделенными.
- В многопользовательской среде с одними и теми же данными могут совместно работать все пользователи приложения, поскольку файл объектов данных размещается на файловом сервере. В качестве файлового сервера может выступать общая папка (с открытым для всех доступом) в которой помещают файл объектов данных (база с таблицами).
Надеюсь, что по поводу целесообразности разделения базы данных сомнений нет. Осталось решить вопрос, как же это сделать. Есть два варианта:
Access урок 2. Делаем свою первую базу данных в Acccess
- делаем новую пустую базу, жмем в окне базы правой кнопкой, выбираем в контекстном меню «Импорт» или «Файл — Внешние данные — импорт», и далее по диалогу. В результате в базу будут импортированы (скопированы) таблицы. Удаляем таблицы из базы, откуда делался импорт, и подключаем ее к таблицам новой базы.
- делаем разделение базы при помощи мастера: «Сервис — служебные программы — разделение баз данных» и далее по диалогу.
Подключение же к серверу (базы с таблицами) делается очень просто — жмем правой кнопкой в окне базы объектов приложения (там, где формы и все остальное), выбираем в контекстном меню «Связь с таблицами» или «Файл — Внешние данные — Связь с таблицами» и далее по диалогу. В результате в нашей базе появятся ярлыки таблиц, причем со значком стрелки слева, который означает, что таблицы внешние. Ограничение при работе с такими таблицами — нельзя менять их структуру (добавлять, изменять поля и т. д.) в этой базе. Можно только в той, где они созданы (находятся).
Первое знакомство с базами данных Microsoft Access
Но лучше, если уж решили делать базу разделенной, при проектировании сразу же создавать две базы mdb: в одну помещаем таблицы, в другую все остальное.
Итак, база разделена. Напомню, основное преимущество разделения базы — возможность создания сетевого приложения. Представим: на одном из сетевых компьютеров создаем папку «База», открываем к ней общий доступ (нужно так же открыть доступ и к диску, на котором установлен Access, обычно «С»), и помещаем в нее файл объектов данных (базу с таблицами).
На других компьютерах размещаем копии файлов объектов приложения (базу с формами, отчетами и т. д.) и подключаем их к нашему «серверу». Получилось сетевое приложение — много пользователей заносят данные в одну базу. Такое приложение называется «Файл — серверным», так как в качестве «сервера» выступает файл объектов данных.
Но допустим, по каким то причинам месторасположения «сервера» изменилось — папку База переместили. Как только пользователи запустят свои приложения, у них появится сообщение о том, что таблицы не найдены. В этом случае, жмем правой кнопкой по ярлыку таблицы в приложении пользователей, выбираем в контекстном меню «Диспетчер связанных таблиц», помечаем те таблицы, путь к которым нужно обновить, или жмем «Выделить все», затем «ОК» и далее по диалогу.
Все вышеуказанные действия делаются вручную. Но можно ли все это сделать программно?
Автоприсоединение (автолинковка) таблиц
Сначала подумаем, в каких еще случаях, кроме как нежелании вручную нажимать на кнопки, может понадобится автолинковка? Казалось бы, поместил базу на компьютер — «сервер», подключил к ней базы (приложения) пользователей, и не трогай ее (не перемещай). Зачем каждый раз при запуске цеплять таблицы? Дело тут вот в чем:
- Иногда приходится менять месторасположение «файлового сервера». Представьте, 50 пользователей, 50 раз придется бегать к каждому и настраивать новое подключение.
- Предположим, Вы сделали установочный дистрибутив вашего приложения 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 .
Имена копий базы задаются с указанием даты и времени копирования.
Пример, как это все работает, Вы можете скачать ниже.
Ссылки по теме
- Приобрести MS Access 2007 в ITShop.ru
- Обратиться в «Интерфейс» за дополнительной информацией / по вопросу приобретения
Файлы для загрузки
07.2007 | ||
Источник: www.interface.ru Как программу из базы в accessИмпорт и экспорт данных в базе AccessОбубликовано: 28.02.2018 Всем привет. В этом уроке говорим на тему «Импорт и экспорт данных в базе Access». В группе «Импорт» нажмите кнопку, соответствующую типу файла – источника данных, например, «Excel». В открывшемся окне диалога следует найти файл данных источника, или ввести в поле «Имя файла» полный путь к этому файлу. В группе переключателей нужно выбрать место назначения для импортируемых данных: в новую таблицу, в конец существующей или в таблицу, связанную с файлом — источником. Для подтверждения выбора нажмите кнопку «OK». Мастер импорта Microsoft Office Access 2007 предлагает выполнить определенную последовательность действий для вставки импортируемых данных в выбранное место. На первой странице Мастера выберите лист файла Excel, содержащий данные для импорта, и нажмите кнопку «Далее». Если первая строка выбранного листа содержит имена полей, можно установить флажок «Первая строка содержит заголовки столбцов». В этом случае заголовки столбцов будут использованы в Access в качестве имен полей в таблице. Для перехода на следующую страницу Мастера нажмите кнопку «Далее». и установите переключатель «Не импортировать (пропустить) поле». Нажмите кнопку «Далее». В этом окне необходимо задать первичный ключ для таблицы. При выборе переключателя «автоматически создать ключ» Мастер добавит поле счетчика в качестве первого поля новой таблицы и автоматически заполнит его значениями, начиная с единицы. В последнем окне Мастера надо указать имя конечной таблицы в поле «Импорт в таблицу». Нажмите кнопку «Готово», чтобы импортировать данные. Если импорт данных был завершен успешно, в Мастере отображается страница с состоянием операции импорта. Установив флажок «Сохранить шаги импорта», пользователь может сохранить сведения о выполненной операции для последующего использования. Для завершения операции импорта нажмите кнопку «Закрыть». В области переходов откройте таблицу «Прайс на мониторы», чтобы просмотреть результат импорта, дважды щелкнув на таблице левой кнопкой мыши. Если на странице «Внешние данные» в разделе «Импорт» нет команды, соответствующей нужному типу файла, нажмите кнопку «Дополнительно» и проверьте, нет ли этого типа данных в открывшейся галерее. Если нужного файла нет и в этом дополнительном списке, может потребоваться запустить программу, в которой были созданы импортируемые данные, и сохранить с её помощью данные в одном из поддерживаемых Access форматов, например, в текстовом файле с разделителями Данные из Microsoft Office Access 2007 также можно экспортировать в файлы других форматов, например, Microsoft Office Excel 2007, файлы в формате RTF, текстовые файлы с разделителями или с полями фиксированной ширины, и так далее. Для запуска Мастера экспорта необходимо открыть экспортируемую таблицу и на странице «ленты» «Внешние данные», в разделе «Экспорт», выбрать кнопку, соответствующую формату файла, в который будут экспортироваться данные таблицы. В этом уроке на простом примере было показано Импорт и экспорт данных в базе Access. Если было интересно, то рекомендую посмотреть видеоурок ниже. Источник: accesshelp.ru Извлечение данных из MS Access-баз простыми, кросс-платформенными и бесплатными способамиПо работе мне частенько случается обмениваться большими (иногда многогигабайтовыми) объёмами табличных данных. Такие таблицы обычно приходят в понятном простому пользователю формате — MS Access. Сейчас я расскажу, как можно эффективно извлекать данные из этих файлов для того что бы пустить их в обработку или, например, ввести их в MySQL. Проблема тут в том, что MS Access — проприетарная программа, которую надо бы покупать, да и не всегда она просто бывает под рукой на конкретной машине, да и сделана под Windows (а я часто на Linux-е). Если архив с базой приходит от коллеги уже на сервер хостинга, приходилось сначала скачивать его на рабочий компьютер, извлекать данные, а потом обычно запаковывать и закачивать извлечённые данные обратно. Кроме этого, на рабочей локальной машине открывать предельно объёмные базы MS Access им самим только лишь для извлечения данных не оптимально по расходу ресурсов оперативной памяти и времени. Первое на что натыкаешься на этом пути — утилиты mdbtools. Они действительно очень помогли мне. Но к сожалению, у них есть недостатки. Во-первых, не работают с новым форматом accdb. Во-вторых, проблемы с кривыми названиями сущностей в базе (имена таблиц, колонок с пробелами, русскими буквами итд). Добиться ведь, что бы имена колонок были сразу какие удобно для обработки от поставщиков практически не возможно. Тогда я использовал ODBC. Драйвера для работы с Access-базами (как mdb так и accdb) можно бесплатно взять с сайта Microsoft. Для выгрузки в TSV («значения разделённые табуляцией» — простой универсальный формат, который понимют и офисные программы и MySQL) я написал простейшую программу на Qt. Этот способ мне то же изрядно помог, однако я столкнулся с такими недостатками: 1) По мере чтения таблицы резервируется оперативная память. Для работы с действительно большими таблицами нужно иметь не менее 4 Gb свободной оперативной памяти. 2) Пожалуй самое страшное — если ресурсов не хвататет, программа прерывает работу без какого-либо сообщения или даже признака ошибки. Иногда экспортируются не все строки таблицы, но ещё хуже, когда в выходных данных пропадают (без какого либо обращающего на себя сообщения!) значения в определённых столбцах. 3) На 64-битную систему ставятся 64-битовые ODBC-драйвера, а что бы с ними работать, программа должна быть также откомпилирована как 64-битовый исполняемый модуль. А для этого в моём случае понадобится 64-битовый Qt и компилятор… Дволоьно муторно. 4) Присутствие в системе JET-движка Access-a без офиса у меня ставило в тупик автоматическую систему обновление Microsoft в тчетной попытке обновить несуществующий офис. 5) Под Linux-ом мне не удалось этим воспользоваться. Хотя в принципе это возможно. Linux-овые ODBC-драйвера для работы с Access-базами платные, но под эмулятором Wine должно быть можно задействовать native-ODBC-драйвера (сделанные для Windows). Инструкции как это сделать есть в Интернете. Но мне не удалось: поддержка «из коробки» в новых версиях Ubuntu этого процесса в новых версиях, видимо, утратилась. И «подгонять напильником», видимо, придётся не мало. Кстати, кому удалось это сделать на Ubuntu 12 и 13 — отпишитесь. Я уж подумал, ничего лучше не будет — формат то «проприетарный». Но в августе прошлого 2013-го года появилась бесплатная библиоткека на Jackcess 2 ( jackcess.sourceforge.net ), написанная на Java, которая позволяет легко и просто работать с Access-файлами, причём как старыми mdb, так и новыми accdb. Таким образом я не только элементарно самостоятельно сделал конвертер из Access в TSV но и получил его кроссплатформенным — ведь это Java. Теперь пользуюсь им и радуюсь. Исходники и бинарники конвертеров я выложил для скачки здесь: Успехов в использовании! Источник: habr.com |