Сообщений 10    Оценка 215        Оценить  
Система Orphus

BatchAccess: утилита для управления базами MS Access

Версия 1.4

Автор: Никита А. Зимин
Русские Информационные Технологии
Опубликовано: 14.12.2005
Исправлено: 10.12.2016
Версия текста: 1.4

BatchAccess
Что такое BatchAccess
Требования
Как это работает
Как пользоваться
BatchAccessGUI

Исполняемые файлы
Исходные тексты

BatchAccess

ПРЕДУПРЕЖДЕНИЕ

Утилита BatchAccess предоставляется компанией Русские Информационные Технологии на условиях «КАК ЕСТЬ», без предоставления каких-либо гарантий и прав. Используя утилиту BatchAccess, вы соглашаетесь с тем, что компания Русские Информационные Технологии не несет ответственности за использование вами данной утилиты, а также с тем что вы принимаете на себя весь риск, связанный с использованием данной утилиты.

Что такое BatchAccess

BatchAccess — небольшая утилита, написанная в компании Русские Информационные Технологии. Мы создали ее в ходе работы над программным продуктом, работающим с базой данных MS Access.

Целью было — перейти от описания базы средствами Access к описанию в виде SQL-скрипта. Работа со скриптом имеет ряд преимуществ по сравнению с использованием MDB-файла:

SQL-скрипт MDB-файл
Текст, который легко читать и править любым текстовым редактором Бинарный закрытый формат, для работы требует установленный MS Access
Малый объем — несколько килобайт текста полностью описывают сложную БД Значительный объем — даже пустая БД занимает 65536 байт
Удобство хранения в системах контроля версий — CVS, SVN, VSS и т.п. Неудобство хранения в системах контроля версий из-за бинарного формата
Легкость нахождения отличий от предыдущей версии базы Найти все отличия данной версии БД от предыдущей — практически нереально

Сейчас с помощью BatchAccess мы решаем следующие задачи:

Требования

.NET Framework 1.1

MDAC

Microsoft Jet Driver 4.0

ПРИМЕЧАНИЕ

Устанавливать MS Access НЕ ТРЕБУЕТСЯ!

Как это работает

Утилита с интерфейсом командной строки. На входе — имя БД, имя SQL-скрипта и опции. Опции позволяют указать — использовать существующую базу или создать новую.

SQL-скрипт исполняется используя Jet Driver через OleDB. Некоторые операции над базой данных выполняются через ADOX.

В зависимости от опций, программа работает в одном из четырех режимах:

Прогон скрипта на существующей или новой базе [–c]
Создание скрипта на основе структуры заданной базы –r
Создание скрипта но основе данных заданной базы –d
Импорт данных из CSV-файла в одну из таблиц –iTABLENAME
Экспорт данных из таблицы в CSV-файл –eTABLENAME
Построение скрипта различий между двумя базами –mMDBFILENAME

Прогон скрипта

SQL-скрипт — текстовый файл, состоящий из 8-битных символов в кодировке, принятой в системе по умолчанию (обычно — Windows-1251). Пробелы вначале и в конце строки — игнорируются. Пробелами считаются символ пробел (ASCII код 32) и символ табуляции (ACSII код 9). Комментарии — любые строки, в начале которых (не считая ведущих пробелов) стоит два знака минус (ASCII код 45). Пустые строки — игнорируются.

SQL-оператор составляется из нескольких строк, начиная с начала файла, до тех пор пока не встретится строка в конце которой стоит символ «точка с запятой» (ASCII код 59) — эта строка считается последней строкой оператора. Следующая строка считается первой строкой следующего SQL-оператора.

Файл скрипта парсится — отбрасываются комментарии и пустые строки, выделяются SQL-операторы. Затем устанавливается соединение (Jet OleDB) и один за другим выполняются операторы, возникающие ошибки — протоколируются.

Как пользоваться

Формат вызова

BatchAccess.exe <Файл_БД> <Файл_Скрипта> [<Опции>]

Опции отличаются от остальных параметров наличием символа – или /. Параметры могут идти в любом порядке, важно только взаимное расположение параметров Файл_БД и Файл_Скрипта: первый параметр НЕ-опция считается Файл_БД, следующий — Файл_Скрипта.

Опции-режимы

Получение краткой справки по использованию программы.

Создает новый файл базы данных. Если файл уже существует, возникнет ошибка.

Создание базы данных происходит с использованием ADOX.

Восстановить по базе данных SQL-скрипт структуры.

Информация о структуре базы получается с помощью ADOX.

Восстановить по базе данных SQL-скрипт данных — для каждой таблицы генерируется набор операторов INSERT.

Текстовые поля: символы с ASCII-кодом меньше 32, а также не-буквы с ASCII-кодом больше 127 восстанавливаются в виде «Chr(xx)».

Импортировать CSV-файл в заданную таблицу. В качестве параметра Файл_Скрипта задается имя CSV-файла.

Экспортировать указанную таблицу в CSV-файл. В качестве параметра Файл_Скрипта задается имя CSV-файла. Если такой CSV-файл уже существует, он будет переписан. Кстати, вместо имени таблицы можно указать имя запроса (VIEW) — в этом случае в CSV-файл попадет результат запроса.

Перенаправить вывод в заданный файл.

Получение SQL-скрипта различия структуры двух баз. База, заданная в параметре, считается «старой», база, заданная вне параметров — «новой», а полученный скрипт содержит операторы для перехода от «старой» к «новой» базе.

Информация о структуре баз получается с помощью ADOX.

Опции-модификаторы

Требует, чтобы в скрипте, создаваемом программой, квадратные скобки "[]" использовались для каждого идентификатора. Без этой опции квадратные скобки используются только для идентификаторов, которые не могут быть использованы напрямую.

«Тихий» режим — показываются только сообщения об ошибках и предупреждения, информационные сообщения не показываются.

Режим совместного использования базы данных — Share Deny None (по-умолчанию), Share Deny Read, Share Deny Write, Share Exclusive (монопольный доступ к БД)

Пароль для доступа к базе данных. Может использоваться как при создании базы, так и при обычном прогоне скрипта.

Выполняет сжатие/восстановление базы. Выполняется в самом конце работы программы — после выполнения ее основной функции — и только в том случае, если не было ошибок.

Примеры вызова

Создание базы данных SuperPuper.mdb и выполнение скрипта structure.sql:

BatchAccess SuperPuper.mdb structure.sql –c

Выполнение скрипта data.sql над базой данных SuperPuper.mdb:

BatchAccess -quiet SuperPuper.mdb data.sql

Восстановление скрипта структуры базы данных SuperPuper.mdb в файл structure.sql:

BatchAccess -r SuperPuper.mdb structure.sql

Получение скрипта данных для базы данных SuperPuper.mdb в файл data.sql:

BatchAccess SuperPuper.mdb -d data.sql

Импорт данных в SuperPuper.mdb в таблицу Contact из файл contact.csv:

BatchAccess SuperPuper.mdb -iContact contact.csv

Экспорт данных из таблицы Contact в файл contact.csv:

BatchAccess SuperPuper.mdb -eContact contact.csv

Получение скрипта перехода от db1.mdb к db2.mdb:

BatchAccess db2.mdb –mdb1.mdb compare.sql

Мета-операторы

В целом, BatchAccess позволяет сделать многое. Но его возможности опираются на Jet SQL, возможностей которого часто оказывается недостаточно. Например, используя только Jet SQL вы не сможете подцепить к базе данных внешнюю таблицу, или сжать/восстановить базу данных.

Когда нам понадобились эти возможности, мы решили расширить Jet SQL за счет мета-операторов. Суть в том что мы ввели ряд собственных операторов, которые не передаются на исполнение в Jet, а выполняются самим BatchAccess.

Все мета-операторы начинаются с символа решетки — «#». Так же как и для обычных операторов, концом оператора считается символ точки с запятой, стоящий в конце строки.

Поддерживаются следующие мета-операторы:

Сжатие/восстановление базы данных.

Подключение к базе данных внешней таблицы TableName из файла базы данных DatabasePath. Если DatabasePath содержит спецсимволы, заключите путь в квадратные скобки. Если в данной базе таблица должна иметь другое имя, укажите RemoteTableName. Параметр ProviderString позволяет подключать таблицы форматов, отличных от MDB — например, лист Excel или таблицу dBase.

Обновление связи на внешунюю таблицу TableName — для нее задается база данных DatabasePath. Если DatabasePath содержит спецсимволы, заключите путь в квадратные скобки.

Работает аналогично ключу –iTABLENAME: импортирует данные в заданную таблицу из заданного CSV-файла.

Выполнение SQL-скрипта из заданного файла.

При появлении цикла на метаоператорах #INCLUDE, т.е. при включении через этот оператор того же самого файла — произойдет уход в рекурсию с переполнением стека.

ErrorLevel

Код завершения программы (ErrorLevel) бывает таким:

0 Все в порядке
1 При выполнении были проблемы - выдавались предупреждения
2 Проблемы при файловых операциях
3 Ошибки в командной строке
4 Исключение

Примеры использования

Пример SQL-скрипта — создание таблицы (sample.sql):

          CREATE
          TABLE Manager (
    manager_id  AutoIncrement NOTNULL,
    FirstName   String(50) NOTNULL,
    MiddleName  String(50),
    LastName    String(50) NOTNULL,
    Sex         Bit,
    Birthday    Date,
    CONSTRAINT Manager_PK PRIMARYKEY (manager_id)
);

Создание базы данных Sample.mdb и выполнение скрипта sample.sql:

BatchAccess Sample.mdb sample.sql –c

Теперь восстановим структуру базы данных:

BatchAccess –r Sample.mdb sample_r.sql

Получаем файл sample_r.sql:

          -- SQL script generated using BatchAccess utility
          -- Tables
          CREATE
          TABLE Manager (
    Birthday                DateTime,
    FirstName               Text(50) NOTNULL,
    LastName                Text(50) NOTNULL,
    manager_id              AutoIncrement NOTNULL,
    MiddleName              Text(50),
    Sex                     Bit NOTNULL,
    CONSTRAINT Manager_PK PRIMARYKEY (manager_id)
);


-- Constraints-- Indexes-- Views-- Procedures-- End

Пример SQL-скрипта — наполнение данными (data.sql):

          INSERT
          INTO Manager
    (FirstName, LastName, Sex, Birthday) VALUES
    ("Johnson", "Anne", True, "21.12.1973");
INSERTINTO Manager
    (FirstName, LastName, Sex, Birthday) VALUES
    ("Strongarm", "Bill", False, "30.04.1972");

Выполняем data.sql:

BatchAccess Sample.mdb data.sql

Те же самые данные можно было бы импортировать из CSV-файла:

BatchAccess Sample.mdb -iManager Manager.csv

Manager.csv:

          "FirstName";"LastName";"Sex";"Birthday""Johnson";"Anne";True;21.12.1973
"Strongarm";"Bill";False;30.04.1972

Теперь восстановим данные из базы:

BatchAccess -d Sample.mdb sample_d.sql

Получаем файл sample_d.sql:

          -- SQL script generated using BatchAccess utility
          -- Manager
          INSERT
          INTO Manager (manager_id, FirstName, MiddleName, LastName, Sex, Birthday) VALUES (
    1, "Johnson", NULL, "Anne", True, #12/21/1973 00:00:00#);
INSERTINTO Manager (manager_id, FirstName, MiddleName, LastName, Sex, Birthday) VALUES (
    2, "Strongarm", NULL, "Bill", False, #04/30/1972 00:00:00#);

-- End

Пример подключения к базе внешних таблиц:

#LINK TABLE [Regions] DATABASE [.\codes.mdb];
#LINK TABLE [Settlements] DATABASE [.\codes.mdb];
#LINK TABLE [SubRegions] DATABASE [.\codes.mdb];

-- Подключение листа Excel
#LINK TABLE IssueNavigator
    DATABASE [C:\TEMP\a.xls] REFERENCES IssueNavigator$
    PROVIDER [Excel 5.0;HDR=NO;IMEX=2;];

-- Подключение DBF-таблицы Pindx4.dbf
#LINK TABLE PIndx4
    DATABASE [C:\TEMP\postindex] REFERENCES [PIndx4#DBF]
    PROVIDER [dBase 5.0;HDR=NO;IMEX=2;];

Пример обновления связи с внешней таблицей:

#UPDATE LINK Regions
    DATABASE [codes.mdb];

BatchAccessGUI

С версии 1.4, в состав пакета BatchAccess помимо консольной версии программы (BatchAccess.exe) включается GUI-приложение (BatchAccessGUI.exe).

BatchAccessGUI — это GUI-версия утилиты BatchAccess — MDI редактор SQL-скриптов для MS Jet (с подсветкой синтаксиса), с возможностями:




Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.
    Сообщений 10    Оценка 215        Оценить