1С: Пример работы с файлами DBF по интерфейсу ADO

Опубликовано Опубликовано в рубрике 1C Программирование, Разное
В статье описан пример работы с файлами DBF по интерфейсу ADO из 1С v 7.7 Источник: http://kb.mista.ru/article.php?id=309

Драйвер ADO уже встроен в систему Windows, и дополнительно устанавливать его не нужно. Он представляет собой всего лишь удобную Active-X оболочку для доступа к данным, которую можно использовать почти из любых языков и сред программирования (включая 1С:Предприятие 7.7 и 8.0).

Интерфейс ADO во многих случаях более удобен и безопасен для работы с файлами DBF, чем штатный объект 1С:

  • Выводит понятные сообщения при ошибках.
  • Не обрушивает систему 1С при ошибках (в отличие от штатного XBase).
  • Позволяет одновременно и без проблем открывать несколько файлов.
  • Имеет удобный SQL-подобный синтаксис запросов (не надо изучать нестандартные интерфейсы).

Тот же самый драйвер ADO можно применять для доступа к самым разным источникам данных (например, к базе Oracle), с небольшими отличиями в строке подключения. Строки подключения для разных источников данных можно найти здесь: http://www.connectionstrings.com/

Ниже приведен пример создания, заполнения и чтения файла DBF.

Процедура Сформировать() 
    Path="c:\"; //Путь к папке с файлами DBF
    //Стираем файл, если он уже существует
    Если фс.СуществуетФайл("c:\persons.dbf")=1 Тогда
        фс.УдалитьФайл("c:\persons.dbf");
    КонецЕсли; 
 
     //******* ПРИМЕР ЗАПИСИ DBF *******//

    //Открываем соединение
    DBConn = CreateObject("ADODB.Connection");
    DBConn.Open("Provider=Microsoft.Jet.OLEDB.4.0;" +
    "Data Source=" + Path + ";" +
    "Extended Properties=""DBASE IV;"";"); 

    //Создаем новый DBF и задаем его колонки
    DBConn.Execute("Create Table Persons (Name char(50), City char(50), Phone char(20), Zip decimal(5))");

    //Пишем строки в наш DBF
    DBConn.Execute("Insert into Persons Values('Иванов И.И.', 'Москва','123-45-67','14589')");
    DBConn.Execute("Insert into Persons Values('Поляков С.Л.', 'Москва','333-44-55','38215')");
    DBConn.Execute("Insert into Persons Values('Сидоров С.С.', 'Москва','222-33-44','54323')");
 
    //******* ПРИМЕР ЧТЕНИЯ DBF *******//
    //Делаем выборку 
    Persons = DBConn.Execute("Select * from [Persons#DBF]");
    Пока Persons.EOF=0 Цикл //Цикл по записям DBF
        Имя= Persons.Fields("Name").value;
        Город= Persons.Fields("City").value;
        Телефон=Persons.Fields("Phone").value;
        Zip= Persons.Fields("Zip").value;
        Сообщить("Имя="+Имя+" Город="+Город+" Телефон="+Телефон+" Zip="+Zip);
        Persons.MoveNext(); //Переходим к след. записи DBF
    КонецЦикла;
    DBConn.Close(); //Закрываем соединение
КонецПроцедуры

Проблема с кодировками

При загрузке файлов в непредусмотренной кодировке происходит загрузка символов «крокозябликами». Штатный механизм XBASE этим недугом не страдает, и позволяет явно указать кодировку файла при загрузке. lobo пишет: 23 .02.07 — 12:24 попробуй HKEY_LOCAL_MACHINE\Software\microsoft\jet\4.0\Engines\Xbase DataCodePade=OEM  поменять на ANSI

добавка от vde69: для избавления от проблем с кодировками рекомендую следующий сборный патч реестра

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Xbase]
«DataCodePage»=»ANSI»
«BDE»=dword:00000002

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\CodePage]
«1250»=»c_1251.nls»
«1251»=»c_1251.nls»
«1252»=»c_1251.nls»


Описание интерфейса ADO находиться в файле adovbs.inc


http://x-romix.narod.ru/ado_dbf.zip
(размер файла ert — 4 килобайта, скачивать ЛЕВОЙ кнопкой мыши).