Как подключить DBF файл в Access программно? Быстрый способ считать dbf c.
Всем доброго времени суток, дорогие читатели блога. В сегодняшней статье я расскажу про доступ к DBF-файлам (таблицам) различными способами. Я столкнулся с такой проблемой, когда мне необходимо было осуществить доступ к DBF-таблицам FoxPro. Пробовал через BDE, не получалось, только к таблицам Paradox (dbf), в итоге решил попробовать через компонент TDBF –также обернулась неудачей. По старинке решил попробовать подключиться через ADO и все пошло как по маслу.
Поэтому, в данной статье я расскажу, как можно подключиться к таблицам DBF тремя способами:
- С помощью BDE – для таблиц FoxPro у меня данный вариант не прошел
- С помощью ADO – отлично открылись таблицы FoxPro
- С помощью компонента TDBF – хорошо открывает таблицы Paradox с различными кодировками или же dBase.
Если честно, то я вообще не могу терпеть BDE, но пришлось поработать с такими таблицами и первый вариант, через который я хотел подключиться к ним – это использование именно BDE, что, в принципе у меня это получилось, то есть получилось забрать список таблиц, чему я обрадовался и подумал, что дальше все пойдет, как положено, но не тут-то было. При попытке подключение к какой-нибудь таблице, мне выдавало ошибку, что-то наподобие:
Я пробовал его устанавливать и в самое BDE Administrator и при подключении, но ничего не вышло. Зато таким способам у меня отлично подключалось к таблицам DBF – Paradox, например dBase.
Поэтому, устанавливаем на форму следующие компоненты со вкладки BDE:
- 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 будет выглядеть, примерно следующим образом:
Связываем компонент TADOConnection с TADOTable или TADOQuery и работает с нужными нам таблицами.
Еще один вариант – это работа с таблицами dbf-формата, с помощью компонента TDBF, который, я использую в проекте . Если честно, я хочу от него отказаться, просто он хорошо работает с кодировками. Рассказывать, как с ним работать, я не буду, а просто оставлю ссылку для примера.
DBF – широко распространенный формат хранения данных, появившийся в 80-х годах прошлого века. Впервые формат применялся в семействе СУБД dBase. В связи с популярностью и широким распространением dBase, было создано множество dBase-подобных программных продуктов, получивших собирательное название xBase. Несмотря на значительный возраст формата, он до сих пор достаточно широко используется. В данной статье рассматриваются способы работы с DBF из «1С:Предприятие».
В «1С:Предприятие» для работы с файлами формата DBF(версия dBase III) применяется специальный программный объект – xBase. Работа с этим объектом обычно не вызывает трудностей.
Внимание!
При работе с файлами DBF следует помнить, что имя файла должно удовлетворять ограничению 8.3.
Внимание!
Объект xBase доступен как на стороне клиента, так и на стороне сервера. Следует продумывать клиент-серверное взаимодействие при решении каждой конкретной задачи.
Чтение файла DBF
Чтение данных из файла DBF производится за несколько последовательных этапов:
- Создание объекта XBase;
- Открытие файла;
- Последовательный перебор всех строк файла и считывание значений полей;
- Закрытие файла.
ДБФ = Новый XBase; ДБФ. ОткрытьФайл(«D:MyFile.dbf» ); // Этап 2. Открытие файла Пока Истина Цикл // Этап 3. Перебор строк файла Сообщить(ДБФ. NAME); Если НЕ ДБФ. Следующая() Тогда // Позиционирование на следующей записи Прервать; КонецЕсли; КонецЦикла; ДБФ. ЗакрытьФайл(); // Этап 4. Закрытие файла
Можно использовать несколько измененный алгоритм перебора строк файла:
Пока НЕ ДБФ . ВКонце () Цикл Сообщить(ДБФ. NAME); ДБФ. Следующая (); КонецЦикла;
Выгрузка в файл DBF
Этапы выгрузки в файл DBF:
- Создание объекта XBase;
- Указание кодировки (если не указать, то будет использоваться кодировка ANSI);
- Описание полей;
- Создание файла;
- Цикл с добавлением и заполнением строк;
- Закрытие файла.
Рассмотрим этот процесс на примере:
ДБФ = Новый XBase; // Этап 1. Создание объекта XBase ДБФ. Кодировка = КодировкаXBase. OEM; // Этап 2. Указание кодировки ДБФ. Поля. Добавить(«CODE» , «S» , 9 ); // Этап 3. Описание имени и типа поля ДБФ. Поля. Добавить(«NAME» , «S» , 40 ); ДБФ. СоздатьФайл(«D:MyFile.dbf» ); // Этап 4. Создание файла Выборка = Справочники. Номенклатура. Выбрать(); Пока Выборка. Следующий() Цикл ДБФ. Добавить(); // Добавление строки ДБФ. CODE = Выборка. Код; // Заполнение значения поля ДБФ. NAME = Выборка. Наименование; ДБФ. Записать(); // Запись строки КонецЦикла; ДБФ. ЗакрытьФайл (); // Этап 6. Закрытие файла
При указании кодировки используется тип КодировкаXBase , который может принимать два значения:
- ANSI – формат Windows;
- OEM – формат DOS.
Добавление нового поля при описании структуры имеет синтаксис
Добавить(< Имя>, < Тип>, < Длина>, < Точность>)
Доступны следующие типы:
- «N» – число;
- «S» – строка;
- «D» – дата;
- «L» – булево;
- «F» – аналогично «N» – число.
Длина поля является обязательным для типов полей «N», «F» и «S».
Работа с индексами
Совместно с файлом DBF может использоваться индексный файл, в котором может содержаться информация об одном или более индексе. Наличие индексов делает возможным использование поиска, а не только последовательного перебора всех строк файла.
При создании индексного файла следует задать:
- Перечень индексов;
- Путь сохранения индексного файла (на этапе 4 выгрузки).
Пример создания индексного файла:
ДБФ. Индексы. Добавить(«INDCODE» , «CODE» ); ДБФ. СоздатьФайл («D:MyFile.dbf» , «D:index.cdx» );
Процедура добавления нового индекса имеет синтаксис:
Добавить(< Имя>, < Выражение>, , < Убывание>, < Фильтр >)
Для использования индексов при чтении из файла DBF следует:
- Указать путь к индексному файлу (на этапе 2 загрузки);
- Задать текущий индекс.
Пример открытия файла DBF с использованием индексного файла:
ДБФ. ОткрытьФайл(«D:MyFile.dbf» , «D:index.cdx» ); ДБФ. ТекущийИндекс = ДБФ. Индексы. INDCODE ;
Внимание!
При открытии файла DBF позиционирование происходит на первой записи в файле. Первая запись в файле не соответствует первой записи в индексе. В связи с этим при использовании индексов перед тем, как последовательно обходить строки, необходимо спозиционироваться на первой строке индекса. Это можно сделать методом Первая () , например:
ДБФ . Первая ();
Для поиска может использоваться одна из двух функций:
- Найти(< Ключ>, < Режим >) ;
- НайтиПоКлючу(< Режим >) .
В результате работы обоих функций возвращается значение с типом булево (найдена запись с указанными условиями или нет). В случае успешного поиска текущий указатель устанавливается на найденной строке. В качестве режима поиска может использоваться одно из значений:
- «>=»;
- «>»;
- «