Программный модуль, облегчающий подключение таблиц из внешних баз |
Разделы: Т аблицы, Полезные функции
|
Описание: Всё очень просто: выбираешь базу, помечаешь нужные таблицы, нажимаешь кнопку... и всё готово. Модуль работает пока (надеюсь, что пока :)) только с базами Access.
Автор: Дмитрий Сонных (AKA Joss) http://am.rusimport.ru/MSAccess/profile.aspx?id=110
Добавил на сайт: Joss 30.01.2007
Скачать: |
sd_Connect2k20.zip (122169 байт) (скачиваний: 3481 с 30.01.2007) |
Немного истории. Когда-то, года 3 назад, я выложил на этом сайте программу Программа для ведения учета автотранспорта и дорожно-строительных механизмов. В основном в ней рассматривались вопросы парольной защиты и привилегий пользователей. Но некоторых заинтересовал механизм подключения к программной части таблиц из внешней базы. Я пообещал, когда будет время, выложить статью и код для автоматизации подключения таблиц из внешних баз данных. Но всё не хватало времени, то одно, то другое... То возникали новые, более интересные задачи, то смена работы... И вот, наконец, посидев вечерами, я закончил написание и описание программного модуля для облегчения подключения таблиц из внешней базы данных. Здесь я выкладываю вторую версию программного модуля. По сравнению с первоначальным, он был переписан под ADO. И может быть использован в Access начиная с версии 2000. Если будет необходимость, то я выложу и первоначальный вариант для А97. Только его придется немного причесать, добавить комментариев, проверок и т.д.
А теперь к делу. Программный модуль состоит из двух таблиц SystemBases и SystemTables. В первой таблице содержатся пути к внешним базам данных, а во второй -- список подключаемых таблиц для каждой внешней базы. Одного запроса SystemTB, который используется для контроля подключения к внешним базам. Программный модуль включает в себя также три формы -- frmSystemBases (Подключаемые базы), frmSystemTables (Подключаемые таблицы) и frmSystemBasesAdd. Главной формой является frmSystemBases, а две остальные вызываются из первой. Загружаем форму frmSystemBases. Она представляет собой ленточную форму. Для каждой записи выводятся три поля Ник базы, Описание базы, Путь к базе. Ник базы содержит краткое название базы, например Кадры, которое потом будет использоваться в предупреждающих и информационных сообщениях. Описание базы -- содержит более полное описание содержимого базы, например: Список сотрудников предприятия. А поле Путь к базе содержит полный путь к базе, включая имя файла самой базы. Он может быть как локальным, так и сетевым. (этот программный модуль не работает с Интернет базамиJ). Кроме того, каждой записи соответствуют две кнопки: Подключить таблицы и Отключить таблицы. Они предназначены для манипулирования с таблицами одной, выбранной базы. При нажатии кнопки Отключить таблицы, от текущей базы отключаются, все прилинкованные таблицы, относящиеся к выбранной базе. При нажатии на кнопку Подключить таблицы, сначала таблицы отключаются, а потом подключаются вновь.
Внизу формы расположен ряд кнопок Добавить базу, Удалить базу, Изменить путь, Таблицы, Подключить, Отключить и Выход. При нажатии кнопки Добавить базу, грузится форма frmSystemBasesAdd, в которой задается: ник, описание и путь к базе. Задание пути к базе происходит через стандартное окно выбора файла. При нажатии кнопки Удалить базу, сначала отключаются все подключенные таблицы, относящиеся к выбранной базе, затем они удаляются из таблицы SystemTables, а затем из таблицы SystemBases удаляется запись о самой таблице. По кнопке Изменить путь выводится стандартное окно выбора файла, и можно задать новый путь к выбранной базе данных. Перед заданием нового пути к базе с таблицами необходимо отсоединить все таблицы, относящиеся к выбранной базе. Вам будет предложено это сделать через стандартное окно вывода сообщений. Если Вы откажитесь это сделать, то задание нового пути к базе данных проводиться не будет. В этой версии нет контроля подключения таблиц из выбранной базы данных, поэтому запрос на отключение таблиц будет задаваться всегда, вне зависимости от того, есть подключенные таблицы из выбранной базы или нет. (Возможно, в следующей версии я введу эту проверку).
Кнопка Таблицы служит для загрузки формы frmSystemTables . Она предназначена для выбора подключаемых таблиц и задания новых имен для них. Форма frmSystemTables представляет собой ленточную форму с тремя столбцами: Старое имя, Новое имя, Подключение. Старое имя - это имя, которое имеет таблица во внешней базе данных. Новое имя - имя, которое присваивается таблице при подключении. Если поле остается пустым, то таблице присваивается то же имя, что и во внешней базе данных. Подключение - поле-флажок. Если он установлен, то таблица будет подключаться. Если нет, то не будет.
В заголовке формы выводится ник (краткое название) базы, А в примечании расположены кнопки. Считать таблицы, Выделить, Отменить, Выбрать, Выход.
После добавления новой базы, список таблиц, относящихся к ней пуст. Чтобы его заполнить, необходимо нажать кнопку Считать таблицы. Будут считаны имена таблиц из внешней базы данных и занесены в таблицу SystemTables. Если в таблице SystemTables уже есть таблицы, относящиеся к выбранной базе, то сначала они будут удалены, а потом занесены снова. Кнопка Выделить помечает все таблицы, относящиеся к выбранной базе, как подлежащие присоединению к рабочей базе. Кнопка Отменить выполняет обратное действие. Кнопка Выбрать позволяет изменять список выводимых таблиц. Могут выводиться либо все таблицы, либо только присоединяемые таблицы. Ну а кнопка Выход закрывает форму.
Кнопка Подключить на форме frmSystemBases (Подключаемые базы), подключает все таблицы со всех баз данных. Кнопка Отключить - отключает все таблицы. Кнопка Выход закрывает форму.
Кроме того, есть ещё три программных модуля Module1, Module2 и modConnect, В Module1 входят процедуры, описания и функции, которые я постоянно таскаю из программы в программу, в Module2 входят процедуры и функции, которые являются частью библиотеки функций FSO(FileSystemObject). (Как-нибудь я выложу всю библиотеку). Все подпрограммы и функции я старался снабдить комментариями и описанием, так, что в них можно будет разобраться. А вот легко или нет, это уж как получится.
Так уж повелось (а привычка -- вторая натура, что я всегда в конце работы отключаю все прилинкованные таблицы, а в начале -- подключаю. Хотя на это и тратится дополнительное время. Для этого я использую подпрограммы ClearTablesRef -- отключение всех подключенных таблиц, и SetReferences -- подключение всех необходимых таблиц из внешних баз данных.
Как говорится -- совершенству нет предела. Так и в этом программном модуле можно найти места, которые можно улучшать и оптимизировать. Например, у меня не очень оптимально выполняется проверка наличия таблиц в базе данных. Можно сделать групповую проверку для всех таблиц, относящихся к одной базе, а не по отдельности, как это сделано у меня.
Можно переработать модуль так, чтобы он мог подключать не только таблицы из баз Access, но и таблицы dBase, книги Excel и т.п.
Смотрите, пользуйтесь, модернизируйте, выкладывайте свои предложения и исправления.
[Back]
|
|
|
Все-таки вариант с постоянным подключением -отключением не особо удобен для пользователя.Смена путей базы не так часто происходит - либо перенесли базу, либо завели машину с другим сетевым диском, лтбо нужно просмотреть архивную копию.Для разработки баз - это нормально(ну это мое мнение). Я свои программки раздаю отключенными - при старте, если нет подключенных таблиц - выскакивает форма для подключения, если все хорошо - продолжаем работать.. Из дополнения - советую завести табличку, куда запихывать пути, по которым уже были подключения. Для пользователя проще- не нужно по несколько раз тыкать мышкой, ища нужный файл.. |
06.02.2007 20:06 |
|
Ведь именно Ваш отзыв заставил меня в конце-концов добить эту статью. У меня есть модуль, который не вошел в данный пример. Если будет потребность, то я его включу в следующую версию. Что он делает? При старте программы проверяет наличие баз данных по прописанным адресам (совсем как у Вас), если их нет, запрашивает новый путь. А вот если они есть, то дальше в зависимости от установок, просто оканчивает свою работу и продолжается выполнение программы или производит обновление связей командой RefreshLink. Процедура отключения таблиц при закрытии программы в случае использования этого модуля убирается. Вообще-то, аналогичный модуль описан в книге "Access 2000(или 2002). Разработка корпоративных приложений" |
12.02.2007 12:02 |
|
Скажу честно - я существо ленивое и предусмотрительное. Т.е. лишних движений не делающее. Давайте рассмотрим ситуации, кому и когда все-же нужно подключать таблицы к базе? Кому - 1.-разработчик когда - 1.1 при создании баз. 1.2 при доработке баз.(появляються новые таблицы и идеи) 1.3 при использовании таблиц базы в качестве тренировочных. что происходит - подключение разного кол-ва таблиц из разных баз,без бутылки(предложенного модуля) не разберешся.
2.-подготовленный пользователь. когда - 2.1 при смене дислокации серверной части(оченььь редко) 2.2 при желании посмотреть архивную копию что происходит - всегда заранее известно количество подключаемых таблиц. Так я это к чему веду.. для 2-го варианта существуют следущие трудности - если таблиц много, а база лежит за медленным коннектом, то подключение через модуль с проверкой наличия ВСЕХ таблиц может занимает массу времени(даже винда от этого процесса открещивается, хоть и все работает). Учитывая вышесказанное и собственный опыт, методом инженерного тыка я остановился на следующем - при устоявшейся базе количество таблиц есть величина постоянная.Незачем проверять наличие ВСЕХ таблиц. В файле, если он существует, таблицы самопроизвольно не исчезают.Поэтому проверяем наличие одной - и делаем вывод, что все ОК!Я во всех интерфейсах предусмотрел дистанционное закрытие через табличку abort c одной галочкой.Тема была многократно рассмотрена, не буду повторяться. Вот именно к этой табличке я и проверяю наличие коннекта. Я неверно написал топиком выше - "при старте, если нет подключенных таблиц - ", правильно бы было - если нет таблицы abort.. Не было времени обжевывать ситуацию. вот решил высказаться... Кстати, пришла в голову идея сделать стартовую заготовку для новичков, тем более, что регулярно мелькают вопросы подключения и разделения прав.Вы не против, если я приведу часть вашего кода с комментариями? |
12.02.2007 18:34 |
|
Пожалуста, приводите, дорабатывайте, модифицируйте. Ведь исходный код для этого и помещается, чтобы им пользовались. Просто обычно где-нибудь в комментариях помещается ссылка на первоисточник. Но я, человек не гордый, если ничего не будет, обижаться не буду. |
13.02.2007 10:14 |
П родолжение обсуждения |
Joss |
|
|
|
Слишком рано нажал кнопку "Отправить". С выше приведенными высказываниями согласен. При проверке подключения в начале работы достаточно проверить подключение только к одной таблице. Вообще-то мой модуль больше ориентирован на разработчиков. На создание и заполнения списка подключаемых таблиц. А пользователь может максимум что сделать, так это переключить базу. И ещё такое примечание. Я тоже периодически создаю архивы. Помещаю их в определенную директорию. Причем архивы бывают у меня двух видов. Полный архив базы и архив изменений. Например, у меня есть программа учета рабочего времени и прихода-ухода сотрудников. Данные о приходе-уходе я за позапрошлый месяц сбрасываю в архив. У меня в базе ведется таблица архивов, с датами создания, периодом архивирования, именем архива и прописанным путем. Таблицы в архиве по названиям совпадают с таблицами основной базы. В случае надобности, я просто выбираю через соответствующую форму нужный архив, а дальше всё происходит автоматом. Отключение текущих таблиц и подключение архивных. И никаких дополнительных телодвижений. Кроме того у меня есть кнопка - "Закончить работу с архивом". По окончанию работы с архивом жмёшь её, атрхивные таблицы отключаются и подключаются таблицы из рабочей базы. |
13.02.2007 10:35 |
R e:Продолжение обсуждения |
Roja |
|
|
|
|
|
автор писал: |
Полный архив базы и архив изменений |
Архив понятно - тупо копию делаем. А вот архив изменений - это как? К чему привязываються изменения - к предыдущему архиву, к конкретной дате , между датами? |
13.02.2007 17:09 |
|
В базе обычно есть постоянные данные, редко меняющиеся, и часто меняющиеся данные. Например - название предприятия, можно отнести к практически не изменяемым данным. Оно меняется очень редко. (Ну там изменилась форма собственности, ликвидировалось управление или министерство, изменилось подчинение) Его можно отнести к постоянным данным. Редко меняющиеся данные - список сотрудников, список подразделений предприятия, и т.п. Часто изменяемые данные - это, например, приход и уход сотрудников (в моей программе) в других может быть получение и отпуск товара, выписка счетов и т.п. Через некоторое время эти данные теряют свою актуальность и просто загромождают базу. С другой стороны их нельзя просто удалить, т.к. могут возникнуть разные вопросы. Вот такие данные за определенный период я и сбрасываю в так называемый "архив изменений" и удаляю их из основной базы. Подробнее можно прочитать здесь Кое-что об архивировании, или программное создание баз и таблиц. |
13.02.2007 18:46 |
R e:Архив изменений |
danila |
|
|
|
А если база, к которой подключаются таблицы, запоролена? |
24.11.2014 12:48 |
|
Немного доработанная версия. Изменён интерфейс. Появился флажок индикации подключения к базе. немного изменён код. По данным полностью совместим с предыдущей версией. Примечание. На счёт паролей. Пароли на mdb ломаются на счёт раз-два. я не стал на счёт них заморачиваться. Но если надо, то включу в следующие версии. |
Присоединенный файл:sd_Connect2k21.zip (Размер: 141211 байт, Скачиваний:172) |
04.11.2015 14:07 (последнее изменение - 04.11.2015 14:10) |
|
Ещё один модуль подключения таблиц из других баз. Взят с сайта Новикова Сергея - "MS Access 97 со всех сторон". По сравнению с моим имеет более продвинутый интерфейс и вообще выглядит более профессионально. Я только конвертировал его из 97 версии в 2000 и 2007 и для 2007 добавил возможность выбора для подключения баз в формате accdb |
Присоединенный файл:CnTbl.zip (Размер: 241032 байт, Скачиваний:239) |
04.11.2015 14:22 |
|