Русские информационные технологии. Заглавная страница
>Центр продаж >Центр загрузки >Центр регистрации
Открытый форумОткрытый форум   Гостевая книгаГостевая книга   Обратная связьОбратная связь
Поиск:
Вход
Карта сайтаРегистрация
Карта сайтаКарта сайта
 

BatchAccess

BatchAccess
Исполняемые файлы программы и примеры

ZIP, 35 Кб

Первая версия этой утилиты была опубликована с исходными кодом (Создание базы данных MS Access из SQL-скрипта); все, что она могла, — это создавать новый MDB-файл и выполнять SQL-скрипт. На этот раз, с соглашения руководства компании, я публикую гораздо более полезную версию утилиты, но БЕЗ исходного кода.

BatchAccess

Предупреждение

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

Что такое BatchAccess

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

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

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

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

  • Создание пустой базы данных
  • Выполнение SQL-скрипта над заданной базой данных
  • Задание структуры базы данных — таблиц, связей, индексов, процедур
  • Наполнение таблиц — из SQL-скриптов либо из CSV-файлов
  • Восстановление SQL-скрипта структуры по имеющейся базе данных
  • Восстановление SQL-скрипта данных по имеющейся базе данных
  • Экспорт данных в CSV-файл и импорт из него
  • Сжатие/восстановление базы данных
  • Построение SQL-скрипта различий между двумя базами

Требования

.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-оператор составляется из нескольких строк, начиная с начала файла, до тех пор пока не встретится строка в конце которой стоит символ <точка с запятой designtimesp=15854> (ASCII код 59) — эта строка считается последней строкой оператора. Следующая строка считается первой строкой следующего SQL-оператора.

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

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

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

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

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

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

-h или -help

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

-c или -create

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

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

-r или -restore

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

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

-d или -data

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

Текстовые поля: символы с ASCII-кодом меньше 32, а также не-буквы с ASCII-кодом больше 127 восстанавливаются в виде <CHR(XX)>.

-iTABLENAME

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

-eTABLENAME

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

-oOUTNAME

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

-mMDBFILENAME

Получение SQL-скрипта различия структуры двух баз. База, заданная в параметре, считается <старой designtimesp=15898>, база, заданная вне параметров - <новой designtimesp=15899>, а полученный скрипт содержит операторы для перехода от <старой designtimesp=15900> к <новой designtimesp=15901> базе.

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

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

-b или -brackets

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

-q или -quiet

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

-sdn, -sdr, -sdw, -se

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

-pPASSWORD

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

-compact

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

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

Создание базы данных 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.

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

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

#COMPACT DATABASE;

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

#LINK TABLE <TableName> DATABASE <DatabasePath> [REFERENCES <RemoteTableName>] [PROVIDER <ProviderString>];

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

#UPDATE LINK <TableName> DATABASE <DatabasePath>;

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

#IMPORT TABLE <TableName> FROM <CsvFilePath>;

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

#INCLUDE <ScriptFile>;

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

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

ErrorLevel

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

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

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

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

CREATE TABLE Manager (
    manager_id  AutoIncrement NOT NULL,
    FirstName   String(50) NOT NULL,
    MiddleName  String(50),
    LastName    String(50) NOT NULL,
    Sex         Bit,
    Birthday    Date,
    CONSTRAINT Manager_PK PRIMARY KEY (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) NOT NULL,
    LastName                Text(50) NOT NULL,
    manager_id              AutoIncrement NOT NULL,
    MiddleName              Text(50),
    Sex                     Bit NOT NULL,
    CONSTRAINT Manager_PK PRIMARY KEY (manager_id)
);


-- Constraints


-- Indexes


-- Views

-- Procedures

-- End

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

INSERT INTO Manager
    (FirstName, LastName, Sex, Birthday) VALUES
    ("Johnson", "Anne", True, "21.12.1973");
INSERT INTO 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#);
INSERT INTO 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];

Центр продаж

Центр загрузки

Центр регистрации

Форум