dbf-delphiВсем доброго времени суток, дорогие читатели блога. В сегодняшней статье я расскажу про доступ к 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

Можно также двойным щелчком нажать по компоненту 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-таблицами очень легко, главное выбрать нужный вариант (подход) к ним и все у Вас будет замечательно. Наверное, я изложил самые простые варианты работы с ними, Вам остается выбрать лишь подходящий для Вас.

Метки: , , ,




К записи “Работа с DBF-файлами в Delphi” оставлено комментариев: 11.

  1. Марат:

    > С помощью BDE – для таблиц FoxPro у меня данный вариант не прошел
    Что то у Вас разнобой какой то, так с какими таблицами вы работали с DBase, FoxPro или Visual FoxPro, мне кажется вы пытались работать с таблицами Visual FoxPro по этому только ADO компоненты и подошли, ну любит Microsoft везде создавать свои собственные форматы с которыми работают только их компоненты.

    • Andrey:

      У меня были таблицы dbase, VFP все я и пробовал их подключать. BDE справилась только с DBase, ADO с Viseual FoxPro

  2. Иногда удобнее и быстрее с помощью VK DBF, особенно когда SQL-ные фишки не нужны, так как там индексно-последовательный метод доступа используется (как в Clipper-e), причем нормально работает с Clipper-ными же индексами (NTX), равно как с FoxPro-шными. Рекомендую.

  3. http://forum.ru-board.com/topi.....rt=3320#11

    Использую все способы.
    Идеала нет.

    Претензии к TDBF: бывает что записей одно количество, прочитает другое, флаг удаления мб?

    VKDBF — много работы из кода, новичков пугает.

    > BDE справилась только с DBase
    Это просто потому, что те фишки VisualFoxPro просто не поддерживалась на момент крайнего выпуска BDE.

  4. Здравствуйте, автор!

    Вопрос к вам не по теме поста, но все же надеюсь, что вы дадите на него ответ.

    Как в FoxPro (DBF таблицы) организовать поле счетчик (аналогичное как в access) ?

    Например, есть таблица «Клиенты» с двумя полями «id» и «фамилия». Как сделать так, что при добавлении нового клиента в таблицу, через форму delphi, поле id автоматически генерировалось?

    1 — Петров
    2 — Иванов
    ….
    id+1 — Фамилия

  5. Said Abasov:

    А как можно подключит через Provider ODBC на базу *.dbf?

  6. Когда то работал с DBF-файлами, это очень просто и не надо устанавливать дополнительного программного обеспечения.

Оставить комментарий

Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*