В этой статье:
- Строка подключения и параметры Microsoft dBase driver
- Примеры строки подключения Microsoft dBase и SQL запросов
- Особенности Microsoft dBase
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 запросов
dBASE Driver Programming Considerations