![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Исполняемые файлы
Исходные тексты
ПРЕДУПРЕЖДЕНИЕ Утилита 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) бывает таким:
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]; |
С версии 1.4, в состав пакета BatchAccess помимо консольной версии программы (BatchAccess.exe) включается GUI-приложение (BatchAccessGUI.exe).
BatchAccessGUI — это GUI-версия утилиты BatchAccess — MDI редактор SQL-скриптов для MS Jet (с подсветкой синтаксиса), с возможностями:
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |