Собственные руки TM
Все статьи раздела
Поиск данных в таблице Excel посредством ADO
Алексей Комиссаров (июль 2002)
Эта статья демонстрирует, как создать запрос и организовать поиск данных, хранящихся в
таблице Excel, используя механизм ActiveX Data Objects (ADO) из-под 1С:Предприятия.
Чтобы получить доступ к данным, хранящимся в электронной таблице , необходимо использовать
Microsoft ODBC-драйвер для Excel. Создадим таблицу и присвоим имя области
данных (см. статью
Создание сводной таблицы в Excel средствами V7).
Рис.1 Именованный диапазон данных таблицы.
Данные в каждой колонке диапазона должны иметь одинаковый тип значения, в противном
случае драйвер ODBC не сможет правильно интерпретировать данные. Первая строка
диапазона должна содержать наименования колонок в текстовом формате,
с помощью которых в дальнейшем можно будет обратиться к конкретному значению ячейки.
Создадим новый источник данных ODBC, который ссылается на файл нашей электронной таблицы:
Рис.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/
|