Программа nhdbt (nhutils database terminal) представляет собой консольное приложение для выполнения SQL запросов к ODBC базам данных в пакетном или интерактивном режиме:
- выполнение запросов CREATE, INSERT, UPDATE, DELETE, SELECT и др.
- отображение выбранных данных (SELECT) в табличном виде
- операции с файлами и полями BLOB
Изначально программа nhdbt была разработана для возможности работы с dBASE базами данных разных старых программ. Но, поскольку nhdbt подключается к базам данных через ODBC, то она работает и с другими базами данных, имеющими ODBC драйвер, в том числе Microsoft SQL Server, Oracle Database и даже текстовыми файлами (*.txt, *.csv), файлами Microsoft Excel (*.xls), Microsoft Access (*.mdb).
Почему nhdbt
Несмотря на то, что такие базы данных, как Microsoft SQL Server и Oracle Server имеют собственные терминальные программы (OSQL/ISQL для SQL Server, PL/SQL для Oracle Database), программу nhdbt удобно использовать с этими базами данных, если на компьютере не установлен родной клиент, т.к. nhdbt не требует установки и может быть запущена, например, с USB флешки.
Программа nhdbt обычно используется для выполнения SQL запросов:
- чтение (SELECT) и изменение (INSERT/UPDATE) полей в базе данных
- загрузка «больших» значений BLOB полей из базы данных в файлы
- выгрузка файлов в BLOB поля базы данных
Функции доступны из командной строки, что делает легкой работу с базами данных в bat файлах, скриптах и пр.
Данные, выводимые запросом SELECT, автоматически форматируются в соответствии с типами полей, поэтому не требуется программирование для обработки результирующего набора данных.
Поскольку программа доступна в виде exe файла и не требует установки, она может быть запущена со сменного носителя (USB флешки) или включена в установочный пакет другой программы для удобства распространения. Из дополнительных компонентов программе nhdbt требуются только ODBC драйверы для соответствующей базы данных. При этом ODBC драйвера SQL Server предустановлены в Windows.
Узнать больше
Справка nhdbt | Вопросы и ответы nhdbt | Загрузка nhdbt
Примеры использования nhdbt
Ниже показаны примеры работы в nhdbt с различными базами данных:
dBase | txt/csv | Microsoft Access | Microsoft SQL Server
Подключение к dBase
Следующая команда задает подключение к базе данных dBASE в каталоге C:\Database и выполнение запросов из файла query.sql:
nhdbt "Microsoft dBASE driver (*.dbf)" "DBQ=C:\Database" query.sql
Параметр «DBQ=C:\Database» указывает расположение базы данных dBASE (каталог с файлами DBF). Подробнее формат строки подключения см. на http://connectionstrings.com
Последний параметр, query.sql, указывает на файл с запросами, например, с двумя запросами:
CREATE TABLE t1(Num LONG,Name CHAR(20)); INSERT INTO t1(Num,Name)VALUES(1,'Меркурий');
Вывод программы (пустые строки удалены):
Соединено с 'Microsoft dBASE driver (*.dbf)', параметры 'DBQ=C:\Database;DefaultDir=C:\; Driver={Microsoft dBASE driver (*.dbf)};DriverId=533;MaxBufferSize=2048;PageTimeout=5;' CREATE TABLE t1(Num LONG,Name CHAR(20)); Нет измененных строк. Нет выбранных строк. Время выполнения 00.031. INSERT INTO t1(Num,Name)VALUES(1,'Меркурий'); Изменено строк: 1. Нет выбранных строк. Время выполнения 00.140. Отсоединено от 'Microsoft dBASE driver (*.dbf)',параметры 'DBQ=C:\Database;DefaultDir=C:\; Driver={Microsoft dBASE driver (*.dbf)};DriverId=533;MaxBufferSize=2048;PageTimeout=5;'
Выборка и вывод cтрок
Для выборки данных требуется подготовить файл с запросом SELECT, например, select.sql:
SELECT * FROM t1 WHERE Name LIKE 'М%' ORDER BY Num;
Строка запуска программы должна указывать на файл запросов:
nhdbt "Microsoft dBASE driver (*.dbf)" "DBQ=C:\Database" select.sql
Вывод программы для приведенного примера:
Соединено с 'Microsoft dBASE driver (*.dbf)', параметры 'DBQ=C:\Database;DefaultDir=C:\; Driver={Microsoft dBASE driver (*.dbf)};DriverId=533;MaxBufferSize=2048;PageTimeout=5;' SELECT * FROM t1 WHERE Name LIKE 'М%' ORDER BY Num; NUM NAME ---------------------- -------------------- 1.0 Меркурий 4.0 Марс Нет измененных строк. Выбрано строк: 2. Время выполнения 00.016. Отсоединено от 'Microsoft dBASE driver (*.dbf)', параметры 'DBQ=C:\Database;DefaultDir=C:\; Driver={Microsoft dBASE driver (*.dbf)};DriverId=533;MaxBufferSize=2048;PageTimeout=5;'
Выборка и вывод только данных
В стандартном режиме работы программа NHDBT выводит не только данные, выбираемые запросом SELECT, но и строку подключения, названия столбцов, время выполнения и пр., см. пример Выборка и вывод строк.
Это удобно для просмотра результатов, но неудобно для автоматической обработки другими программами, командными файлами или скриптами — им придётся выполнять дополнительную работу по отсеиванию служебных строк.
Для упрощения обработки был добавлен режим только данные, который включается параметром DATAONLY и выводит только выбираемые данные. Также можно задать символ-разделитель столбцов параметром CS:
nhdbt DATAONLY cs:; "Microsoft dBASE driver (*.dbf)" "DBQ=C:\Database" select.sql
Тогда будут выведены две строки:
1.0;Меркурий 4.0;Марс
Это видео показывает пример использования программы nhdbt интерактивно, в режиме терминала, с dBase: подключение через ODBC драйвер, создание таблицы CREATE TABLE, выборка SELECT *.
Подключение к TXT и CSV файлам
Подключение к файлам-таблицам в C:\Info и выполнение SQL запросов из файла query.sql:
nhdbt "Microsoft Text driver (*.txt; *.csv)" "DBQ=C:\Info" query.sql
Такой доступ к файлам предпочтительнее, если требуется выбрать строки по условию (WHERE), отсортировать записи (ORDER BY) или рассчитать выражение (SELECT Col1*Col2).
Структура данных должна быть описана в Schema.ini, например:
[t1.txt] Format=FixedLength ColNameHeader=false Col1=Num float width 22 Col2=Name char width 20 CharacterSet=oem
Вывод программы:
select * from [t1.txt] where Num=1.0; Num Name ---------------------- -------------------- 1.0 Меркурий Нет измененных строк. Выбрано строк: 1. Время выполнения 00.047.
Подключение к Microsoft Access
Подключение к базе данных Access, находящейся в файле \Program Files\MyApp\database.mdb от имени пользователя admin/Flvby и выполнение запросов из файла query.sql:
nhdbt "Microsoft Access driver (*.mdb)" ^ DBQ=%ProgramFiles%\MyApp\database.mdb;uid=admin;pwd=Flvby query.sql
Значение DBQ=C:\Program Files\MyApp\database.mdb указывает расположение файла базы данных Access (путь и имя файла MDB). Значения uid=admin и pwd=Flvby задают имя и пароль, с которыми программа делает попытку подключения. В строке подключения допустимы также параметры READONLY (доступ только на чтение, значения 0 или 1), EXCLUSIVE (исключительный доступ к базе данных, значения 0 или 1).
query.sql указывает на файл с запросами. Каждый запрос в файле должен заканчиваться точкой с запятой.
Подключение к Microsoft SQL Server
Подключение к базе данных ReportsDB на сервере DATASERVER пользователем reportuser/123 и выполнение запросов из файла query.sql:
nhdbt "SQL Server" server=DATASERVER;database=ReportsDB;uid=reportuser;pwd=123 ^ query.sql
Значение server=DATASERVER указывает сетевое имя сервера базы данных — DATASERVER. Проверьте, что сервер базы данных доступен по сетевому имени (не только по IP адресу).
Значение database=ReportsDB задает базу данных, к которой будет подключаться программа.
Значения uid=reportsuser и pwd=123 задают имя и пароль, с которыми программа делает попытку подключения. query.sql указывает на файл с запросами. Каждый запрос в файле должен заканчиваться точкой с запятой.
Огромное спасибо за программу, единственная которая заработала из консоли с файлами paradox .db!
Очень не хватает экспорта в хотя бы в csv.
При экспорте приходится выводить обычные данные через перенаправление стандартных потоков в файл >>tmp.txt при этом данные выводятся в 866 кодировке
Данные с мемо полей через nhdbf в текстовые файлы, причем каждое мемо, отдельным файлом.
Они выгружаются в 1251 кодировке.
Потом перекодировать через nhrt файлы в одну кодировку. Потом объединять файлы в один…..
Может можно как то прикрутить к nhdbt экспорт данных включая мемополя? Чтобы можно было выгружать данные сразу в один файл txt или csv…
ps: еще раз спасибо за утилиту, аналогов работающих через cmd за несколько дней поисков я не нашел.
Здравствуйте, здесь есть пара проблем.
Мемо поле (BLOB) вообще может содержать нетекстовые (двоичные) данные, такие как изображение или документ, поэтому программа выгружает содержимое BLOB поля в отдельный
А операции с BLOB были вынесены в отдельную программку nhdbf – потому что встречались ограничения на выборку BLOB поля в одном SELECT с другими полями, поэтому пришлось делать в виде простого запроса. Насколько я помню, проблемы были с SQL Server.
Посмотрю по экспорту в CSV, только не в ближайшее время
ODBC драйвер не читает файлы с именами длиннее 8-ми символов (не считая расширения «.DBF»).
Читает, если в качестве имени таблицы указывать короткое имя файла, заключённое в квадратные скобки:
select count(*) from [T1LONG~1]
Короткое имя файла можно посмотреть в свойствах файлах, а в bat файле считать из вывода dir:
dir /x *.dbf
Но всё это лишняя работа, поэтому если создавать новую базу, то лучше делать названия таблиц (имена файлов) не больше 8 символов.
А если база данных уже существует, то только так.