Всем доброго времени суток, дорогие читатели блога. В сегодняшней статье я расскажу про доступ к DBF-файлам (таблицам) различными способами. Я столкнулся с такой проблемой, когда мне необходимо было осуществить доступ к DBF-таблицам FoxPro. Пробовал через BDE, не получалось, только к таблицам Paradox (dbf), в итоге решил попробовать через компонент TDBF –также обернулась неудачей. По старинке решил попробовать подключиться через ADO и все пошло как по маслу.
Поэтому, в данной статье я расскажу, как можно подключиться к таблицам DBF тремя способами:
- С помощью BDE – для таблиц FoxPro у меня данный вариант не прошел
- С помощью ADO – отлично открылись таблицы FoxPro
- С помощью компонента TDBF – хорошо открывает таблицы Paradox с различными кодировками или же dBase.
Если честно, то я вообще не могу терпеть BDE, но пришлось поработать с такими таблицами и первый вариант, через который я хотел подключиться к ним – это использование именно BDE, что, в принципе у меня это получилось, то есть получилось забрать список таблиц, чему я обрадовался и подумал, что дальше все пойдет, как положено, но не тут-то было. При попытке подключение к какой-нибудь таблице, мне выдавало ошибку, что-то наподобие:
LANGDRIVE not found
Я пробовал его устанавливать и в самое BDE Administrator и при подключении, но ничего не вышло. Зато таким способам у меня отлично подключалось к таблицам DBF – Paradox, например dBase.
Поэтому, устанавливаем на форму следующие компоненты со вкладки BDE:
- TDataBase
- TTable или TQuery
- По желанию можно TDataSourceи TDbGrid
Далее в свойстве DatabaseName компонента TDataBase задаем имя БД, я написал – MyDB,а в свойстве DriverName того же компонента я выбрал из выпадающего списка STANDART. Свойство LoginPromt устанавливаем в False, так как логина и пароля на наших таблицах никакого не стоит. В свойстве Params задаем параметры подключения, я указал только путь к нашим таблицам:
Можно также двойным щелчком нажать по компоненту TDataBase и настроить необходимое подключение и устанавливаем свойство Connected в True, в итоге должно произойти подключение к таблицам, без всяких ошибок. Здесь все, переходим к компоненту TTable, где в свойстве DatabaseName указываем имя нашей БД, то есть MyDB. В свойстве TableType выбираем тип таблиц, я указал – ttDBase, а в свойстве TableName выбираем имя таблицы, после чего устанавливаем свойство Active в True. Все, подключает у меня отлично, таблицу отображает также отлично.
Но такой вариант у меня не прошел с таблицами FoxPro, о чем я говорил выше. Поэтому, чтобы решить свою проблему, я решил использовать технологию ADO. Поэтому с вкладки ADO я установил следующие компоненты:
- TADOConnection
- TADOQuery или TADOTable
- По желанию можно установить TDataSource и TDBGrid
Далее нам необходимо просто создать подключение, которое мы делали для базы MS Access, оно будет отличаться тем, что мы выбираем другого поставщика данных, а именно Microsoft Visual FoxPro ODBC. Все, далее указываем кодировку и путь к таблицам. Если это таблицы FoxPro, то в папки должен присутствовать файл со списком всех таблиц, расширения *.dbc. То есть, строка подключения компонента TADOCOnnection будет выглядеть, примерно следующим образом:
ADOConnection1.ConnectionString:='Provider=VFPOLEDB.1;Data Source=C:\1\222\BKOSHELEVO\pddata\G2013\m01;Password="";Collating Sequence=RUSSIAN';
Связываем компонент TADOConnection с TADOTable или TADOQuery и работает с нужными нам таблицами.
Еще один вариант – это работа с таблицами dbf-формата, с помощью компонента TDBF, который, я использую в проекте MapWindow GIS. Если честно, я хочу от него отказаться, просто он хорошо работает с кодировками. Рассказывать, как с ним работать, я не буду, а просто оставлю ссылку для примера. Пример работы компонента TDBF.
Заключение
Как видите, работать с DBF-таблицами очень легко, главное выбрать нужный вариант (подход) к ним и все у Вас будет замечательно. Наверное, я изложил самые простые варианты работы с ними, Вам остается выбрать лишь подходящий для Вас.
А как на счет FireDAC?
по этому поводу ничего сказать не могу, не работал с данными компонентами!
> С помощью BDE – для таблиц FoxPro у меня данный вариант не прошел
Что то у Вас разнобой какой то, так с какими таблицами вы работали с DBase, FoxPro или Visual FoxPro, мне кажется вы пытались работать с таблицами Visual FoxPro по этому только ADO компоненты и подошли, ну любит Microsoft везде создавать свои собственные форматы с которыми работают только их компоненты.
У меня были таблицы dbase, VFP все я и пробовал их подключать. BDE справилась только с DBase, ADO с Viseual FoxPro
Иногда удобнее и быстрее с помощью VK DBF, особенно когда SQL-ные фишки не нужны, так как там индексно-последовательный метод доступа используется (как в Clipper-e), причем нормально работает с Clipper-ными же индексами (NTX), равно как с FoxPro-шными. Рекомендую.
http://forum.ru-board.com/topi.....rt=3320#11
Использую все способы.
Идеала нет.
Претензии к TDBF: бывает что записей одно количество, прочитает другое, флаг удаления мб?
VKDBF — много работы из кода, новичков пугает.
> BDE справилась только с DBase
Это просто потому, что те фишки VisualFoxPro просто не поддерживалась на момент крайнего выпуска BDE.
ConnectionStrings to access dBase with ADO from Delphi
Здравствуйте, автор!
Вопрос к вам не по теме поста, но все же надеюсь, что вы дадите на него ответ.
Как в FoxPro (DBF таблицы) организовать поле счетчик (аналогичное как в access) ?
Например, есть таблица «Клиенты» с двумя полями «id» и «фамилия». Как сделать так, что при добавлении нового клиента в таблицу, через форму delphi, поле id автоматически генерировалось?
1 — Петров
2 — Иванов
….
id+1 — Фамилия
там должно, на сколько я знаю, быть тип поля — NUMERIC
А как можно подключит через Provider ODBC на базу *.dbf?
Когда то работал с DBF-файлами, это очень просто и не надо устанавливать дополнительного программного обеспечения.