Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > C/C++: Базы данных > Нужна библиотека для работы с dbf


Автор: ms1 19.12.17, 23:38
Всем добрый день/вечер.

Появилась задача работы с файлами dbf из программы на C/C++.
Читать, писать, одновременный доступ, индексы.
Т.е. функционал аналогичный dBase, Clipper, Foxpro, если кто то помнит такие системы.
Требуется библиотека типа CodeBase или подобная.
Поиски не дали результатов (как правило ссылки старые).
Может кто нибудь что нибудь посоветовать?
Буду очень благодарен.

Автор: Bas 31.12.17, 17:51
Стандарт описан давно в чем проблема?

Автор: ms1 02.01.18, 04:57
Стандарт чего?
Имеете ввиду структура dbf-файла?
Я говорю про библиотеку работы с dbf/idx/cdx.
Работу с совмесным доступом и блокировками, с set relation и т.п.
Это не тривиальная задача которая выходит далеко за рамки открыть dbf. прочитать заголовок и найти/записать данные.
Объем работ по созданию такой библиотеки существенно больше чем стоящая передо мной сейчас задача.
Поэтому ищу готовую библиотеку.

Автор: JoeUser 02.01.18, 07:25
ms1, не уверен, что все это есть для твоих задач. Технология старая и тупиковая.
Если по существу - смотреть в сторону ODBC, типа "Microsoft Access Database Engine 2010 Redistributable" для винды, или купить кросс-платформенную софтину типа "Progress". Но мой совет - уходить от этого нужно срочно в сторону клиент-серверов. Благо конвертеров данных пруд пруди.

Автор: ms1 02.01.18, 17:17
JoeUser, спасибо за ответ.
Есть точно. По крайней мере раньше была такая библиотека, CodeBase, в исходниках. Весьма достойная.
Сейчас у меня ее нет, да я и не уверен что ее будет легко скомпилировать под Win.
Было что то еще, но не помню уже.
ODBC пока не хочется, хотелось бы чтот легкое - статически или динамически компонуемая библиотека, либо исходники из которых ее можно собрать.
Технология старая, согласен.
Тупиковая не соглашусь, единственно может только из за той же старости, скорее уже "не модная", но речь не об этом.
Заменить на чтото другое нельзя. Надо работать с существующей БД совместно с уже написанной большой системой.
Поэтому никакакие другие варианты невозможны. По крайней мере на текущем этапе.

Автор: JoeUser 02.01.18, 17:57
Цитата ms1 @
Тупиковая не соглашусь, единственно может только из за той же старости, скорее уже "не модная", но речь не об этом.

Нет. Именно тупиковая. Простой пример - 1С 7.7 с файловым доступом. Более менее приличная база, и все, более 5-7 рабочих станций общую производительность вгоняют в ступор. Из-за избыточности перегоняемых данных по сети. Приходится городить терминальные сеансы. Вывод - от многопользовательского сетевого файлового доступа нужно избавляться. Будь то DBase, Paradox, Btrieve ... Не суть.

Ну, а коль уже существует некоторая большая система, я бы задумался о том, чтобы на месте хранения файлов БД разработать и поднять тонкого клиента, и уже с ним налаживать взаимодействие по сети. А тонкий клиент пусть работает по ODBC. Чисто ИМХО.

Автор: ms1 02.01.18, 18:26
Цитата JoeUser @
Более менее приличная база, и все, более 5-7 рабочих станций общую производительность вгоняют в ступор.

Я бы даже сказал 3-5 клиентов.
И проблема не только и даже не столько в скорости и загрузке сети, сколько в том, что при сбое на стороне одного из клиентов в процессе изменения таблицы эта таблица портится. Чем больше клиентов, тем больше вероятность того что ктонибудь из них зависнет/у него отрубят питание и т.п. Поэтому (мое мнение естественно) не "тупиковая", а не применимая в задачах у которых более 5 пользователей.
Понятно про масштабируемость, понятно что всегда "потом захочется большего", но еще раз повторю, вопрос стоит не в принципе построения системы.
Этот вопрос не в моей власти.

Еще насчет тупиковости: dbf неплохо применима как локальная база одного приложения на одном компьютере, возможно с совместным доступом из разных потоков или разных экземпляров программы.

Автор: JoeUser 02.01.18, 20:27
Цитата ms1 @
dbf неплохо применима как локальная база одного приложения на одном компьютере

SQLite 3 еще более неплохо, на порядок.

Автор: ms1 02.01.18, 20:52
Согласен. Более того, первоначально хотел сформулировать эту фразу примерно как:
"dbf неплохо применима как локальная база одного приложения на одном компьютере, впрочем теперь есть еще sqlite" :)

Однако мы отвлеклись от темы.

Попрежнему прошу откликнуться тех кто может дать рабочую ссылку на библиотеку работы с dbf.

Автор: Bas 03.01.18, 09:48
Есть библиотеки для C++Borlad подойдут ли для С++ не знаю.
PS idx уже давно никто не использует кроме FoxPro.

Автор: Олег М 03.01.18, 13:59
xbase не подходит? https://sourceforge.net/projects/xdb/

Автор: ms1 04.01.18, 23:29
Цитата Bas @
Есть библиотеки для C++Borlad подойдут ли для С++ не знаю.

Эти библиотеки в исходниках?
Ссылочку можно?

Цитата Олег М @
xbase не подходит? https://sourceforge.net/projects/xdb/

Очень большое спасибо. Посмотрю.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)