В этой статье:

Microsoft dBase driver обеспечивает подключение к файлами DBF и DBT по ODBC.

  • Драйвер предустановлен в современных версиях Windows – не требуется установка дополнительных компонентов для работы с dBase
  • Файлы DBF хранят однобайтовый текст – хранить Unicode текст в текстовых полях не получится
  • Работа с таблицами, название которых длинее 8 символов, требует дополнительных действий, об этом ниже

Поэтому применять dBase для новых проектов не рекомендуется, для локальных решений лучше использовать Microsoft Access driver (*.mdb).

Строка подключения Microsoft dBase driver

Driver

Driver={Microsoft dBase driver (*.dbf)}

CollatingSequence

Порядок сортировки текста (не кодировка). Возможные значения

  • ASCII — сортировка символов как ASCII текста, значение по умолчанию
  • International — международная сортировка символов
  • Norwegian-Danish — норвежско-датская сортировка символов
  • Swedish-Finnish — шведско-финская сортировка символов

DBQ

Обязательный параметр. Каталог с файлами DBF.

Текущий каталог можно указать точкой DBQ=.

Deleted

Показывать или не показывать удалённые записи (поскольку в DBF при удалении из таблицы запись просто помечается как удалённая, но физически не удаляется из файла):

  • 0 — не показывать удалённые записи
  • 1 — показывать удалённые записи как обычные

DriverId

Числовой идентификатор типа драйвера

  • 21 — dBASE III
  • 277 — dBASE IV
  • 533 — dBASE 5.0, значение по умолчанию

ReadOnly

Позволяет ограничить внесение изменений.

  • 0 — доступ на чтение и изменение, значение по умолчанию
  • 1 — доступ только на чтение

При попытке внесения изменений на подключении с ReadOnly=1 выдаётся ошибка:

[HY000] [Microsoft][Драйвер ODBC dBase] В операции должен использоваться обновляемый запрос.

Exclusive

Задаёт исключительный доступ (также называется монопольный доступ) к базе данных.

  • 0 — обычный доступ, другие программы могут одновременно работать с базой данных, значение по умолчанию
  • 1 — исключительный доступ, другие программы не смогут работать с базой данных

Примеры строки подключения Microsoft dBase

Текущий каталог, только на чтение:

Driver={Microsoft dBase driver (*.dbf)};DBQ=.;ReadOnly=1

Каталог C:\Program\Database, монопольный доступ:

Driver={Microsoft dBase driver (*.dbf)};DBQ=C:\Program\Database;Exclusive=1

Примеры SQL запроса на выборку данных из БД Microsoft dBase:

nhdbt -cs:"Driver={Microsoft dBase driver (*.dbf)};DBQ=.;ReadOnly=1" -q:"select Id,Description,Quantity from Products;"
nhdbt -cs:"Driver={Microsoft dBase driver (*.dbf)};DBQ=.;ReadOnly=1" -q:"select Id from Products where Description is null;"

Примеры SQL запроса на обновление данных в БД Microsoft dBase:

nhdbt -cs:"Driver={Microsoft dBase driver (*.dbf)};DBQ=." -q:"update Products set Description = 'Термостат комнатный' where Id=2346;"

Особенности Microsoft dBase

Длинные имена таблиц

Если имя таблицы имеет длину больше 8 символов, то запрос с таким именем будет давать ошибку 42000:

select * from T1-long_name

[42000] [Microsoft][Драйвер ODBC dBase] Ошибка синтаксиса в предложении FROM.

Это происходит потому, что Microsoft dBase driver работает только с короткими именами файлов – 8.3, и поэтому вместо длинных имён нужно указывать короткие имена файлов, к тому же в квадратных скобках:

select * from [T1-LON~1]
                    ID NAME
---------------------- ----------------
Нет измененных строк. Нет выбранных строк. Время выполнения 0.000 с.

Автоматически в bat файле можно определить короткие имена через dir /x:

C:\Users\user\Downloads\nhdbt-v1.4.1.4-binaries\samples\dbase>dir /x *.dbf
 Том в устройстве C имеет метку WINDOWS
 Серийный номер тома: E2A2-8638

 Содержимое папки C:\Users\user\Downloads\nhdbt-v1.4.1.4-binaries\samples\db

08.04.2017  16:36           553 647              BOOKS.DBF
08.04.2017  16:38                97 T1LONG~1.DBF T1 long name with space.DBF
08.04.2017  16:38                97 T1-LON~1.DBF T1-long_name.DBF
08.04.2017  16:38                97              T1.DBF

Кодировка текста в DBF файлах

ODBC драйвер Microsoft dBase использует кодировку OEM (866 для русской Windows) для текста в DBF файлах, и это значение изменить нельзя.

Байт 29 в заголовке DBF используется для обозначения кодировки текста (Code Page Mark) в FoxPro (см. Table File Structure, Code Pages Supported by Visual FoxPro), но не ODBC драйвером Microsoft dBase.

Поэтому при одновременном использовании Microsoft dBase и, например, BDE необходимо настроить BDE на хранение текста в OEM (866) кодировке.

Узнать больше

nhdbt — консольная программа для выполнения SQL запросов

Microsoft Text driver и его использование для выборки данных из текстовых файлов с помощью SQL запросов

dBASE Driver Programming Considerations

Microsoft dBase драйвер
Метки:

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

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