Hare.ru @ Коллективный разум / Hare.ru @ Дикое место

Архив hare.ru 
Мысли, конвертированные в текст

Собственные руки TM


Все статьи раздела

Поиск данных в таблице Excel посредством ADO

Алексей Комиссаров (июль 2002)

Эта статья демонстрирует, как создать запрос и организовать поиск данных, хранящихся в таблице Excel, используя механизм ActiveX Data Objects (ADO) из-под 1С:Предприятия.

Чтобы получить доступ к данным, хранящимся в электронной таблице , необходимо использовать Microsoft ODBC-драйвер для Excel. Создадим таблицу и присвоим имя области данных (см. статью Создание сводной таблицы в Excel средствами V7).

Рис.1 Именованный диапазон данных таблицы

Рис.1 Именованный диапазон данных таблицы.

Данные в каждой колонке диапазона должны иметь одинаковый тип значения, в противном случае драйвер ODBC не сможет правильно интерпретировать данные. Первая строка диапазона должна содержать наименования колонок в текстовом формате, с помощью которых в дальнейшем можно будет обратиться к конкретному значению ячейки.

Создадим новый источник данных ODBC, который ссылается на файл нашей электронной таблицы:

Рис.2 Источник данных OBDC

Рис.2 Источник данных OBDC.

Процедура запроса к данным будет иметь следующий вид:

Процедура Сформировать()

// Создадим соединение с данными
Соединение = СоздатьОбъект("ADODB.Connection");
Соединение.ConnectionString = "Provider=MSDASQL;DSN=Отгрузка";
Соединение.ConnectionTimeout = 15;
Соединение.CursorLocation = 3;
Соединение.Open();
// Создадим набор данных
Записи = СоздатьОбъект("ADODB.Recordset");
Записи.CursorLocation = 3;
Записи.CursorType = 2;
Записи.LockType = 3;
Записи = Соединение.Execute("SELECT * From Отгрузка");
// Методом Execut можно обратиться с SQL-оператором к базе данных,
// чтобы выбрать записи, удовлетворяющие определенным условиям, например,
// SELECT Модель,Разнорядка From Отгрузка Where Модель >= 2109;
// Организуем перебор записей
Пока Записи.Eof()=0 Цикл
   Сообщить(Записи.Fields("Модель").Value);
   Записи.MoveNext();
КонецЦикла;
// Движения по записям возможно с помощью методов объекта Recordset,
// таких как MoveFirst , MoveLast , MoveNext , MovePrevious.
// Конец и начало данных определяются методами Eof и Bof.
// Метод Записи.RecordCount возвращает количество записей в наборе
Если Записи.RecordCount = 0 Тогда
   Сообщить("Пустой набор записей");
КонецЕсли;
// Метод Записи.Fields.Count возвращает количество столбцов в наборе
Для Н = 0 По Записи. Fields.Count - 1 Цикл
   Сообщить(Записи.Fields(Н).Name);
КонецЦикла;
// Поиск записей в наборе можно выполнить несколькими способами:
// с помощью нового оператора SELECT, где указать новый условия отбора WHERE
// с помощью оператора Find
// с помощью метода Filter
Записи.MoveFirst(); // Когда курсор не на первой записи
Записи.Find("Модель like 2109");
Если Записи.Eof() = -1 Тогда
   Сообщить("Запись не найдена");
Иначе
   Сообщить("Разнорядка "+Записи.Fields("Разнорядка").Value);
КонецЕсли;
// Фильтр позволяет ограничить записи по определенному условию.
// Чтобы снять фильтр, ему нужно передать пустое значение строки.
// Допустимы следующие операции сравнения:
// <, >, <=, >=, <>, =, и LIKE
// а также логические операции AND и OR
Записи.Filter = "Модель=2109";
Пока Записи.Eof() = 0 Цикл
   Записи.MoveNext();
КонецЦикла;
// Уберем фильтр
Записи.Filter = "";

КонецПроцедуры

К сожалению, не удалось изменить конкретные значения в наборе данных, добавить или удалить строки данных. А также не получился поиск значения по шаблону, например, Модель = '21*'.

Возможно, это связано с ограничениями драйвера ODBC для Excel и/или блокировками со стороны ADO. Для драйвера Microsoft Visual FoxPro такого ограничения не наблюдается.

Путь = "C:\DB\D2.dbf";

Соединение = СоздатьОбъект("ADODB.Connection");
Соединение.ConnectionString = "driver=Microsoft Visual FoxPro Driver;Exclusive=No;SourceType=DBF;SourceDB="+Путь;
Соединение.ConnectionTimeout = 15;
Соединение.CursorLocation = 3;
Соединение.Mode = 3;

Записи = СоздатьОбъект("ADODB.Recordset");
Записи.CursorLocation = 3;
Записи.CursorType = 2;
Записи.LockType = 3;

Соединение.Open();

При подговке статьи использовался ADO 2.6 release. Более полную информацию по технологии ActiveX Data Objects (ADO) см. в приложенной ссылке.

Партнеры:


Также может быть интересно:

Канал Россия 1 на http://spbtvonline.ru/
   
 Сайт поддерживается за счет партнеров:
:::... Сайт содержит архив двух версий hare.ru Карта сайта