Программа 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 указывает на файл с запросами. Каждый запрос в файле должен заканчиваться точкой с запятой.

5 мыслей о “NHDBT

  • 06.12.2023 в 14:15
    Постоянная ссылка

    Огромное спасибо за программу, единственная которая заработала из консоли с файлами paradox .db!
    Очень не хватает экспорта в хотя бы в csv.
    При экспорте приходится выводить обычные данные через перенаправление стандартных потоков в файл >>tmp.txt при этом данные выводятся в 866 кодировке
    Данные с мемо полей через nhdbf в текстовые файлы, причем каждое мемо, отдельным файлом.
    Они выгружаются в 1251 кодировке.
    Потом перекодировать через nhrt файлы в одну кодировку. Потом объединять файлы в один…..

    Может можно как то прикрутить к nhdbt экспорт данных включая мемополя? Чтобы можно было выгружать данные сразу в один файл txt или csv…

    ps: еще раз спасибо за утилиту, аналогов работающих через cmd за несколько дней поисков я не нашел.

    Ответ
    • 08.12.2023 в 02:02
      Постоянная ссылка

      Здравствуйте, здесь есть пара проблем.
      Мемо поле (BLOB) вообще может содержать нетекстовые (двоичные) данные, такие как изображение или документ, поэтому программа выгружает содержимое BLOB поля в отдельный
      А операции с BLOB были вынесены в отдельную программку nhdbf – потому что встречались ограничения на выборку BLOB поля в одном SELECT с другими полями, поэтому пришлось делать в виде простого запроса. Насколько я помню, проблемы были с SQL Server.

      Ответ
  • 07.04.2017 в 17:09
    Постоянная ссылка

    ODBC драйвер не читает файлы с именами длиннее 8-ми символов (не считая расширения «.DBF»).

    Ответ
    • 08.04.2017 в 17:32
      Постоянная ссылка

      Читает, если в качестве имени таблицы указывать короткое имя файла, заключённое в квадратные скобки:

      select count(*) from [T1LONG~1]

      Короткое имя файла можно посмотреть в свойствах файлах, а в bat файле считать из вывода dir:

      dir /x *.dbf

      Но всё это лишняя работа, поэтому если создавать новую базу, то лучше делать названия таблиц (имена файлов) не больше 8 символов.
      А если база данных уже существует, то только так.

      Ответ

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *