gifts2017

Использование SQL при работе с внешними базами.

Опубликовал Александр (Atheist) в раздел Программирование - Практика программирования

Использование SQL при работе с внешними базами.

В общем случилось столкнуться со следующей задачей: есть огромный dbf-файл, из которого нужно периодически дергать определенную информацию. К сожалению dbf-ник нельзя передать в качестве параметра 1с-запросу, а перебирать каждый раз все записи в файле - слишком ресурсоемкая задача. Поэтому я воспользовался драйвером Microsoft OLE DB Provider for Visual FoxPro (его можно скачать с сайта microsoft).

Например, есть на диске D:\ПапкаСБазой\MyBase.dbf

 

Прочитаем файл:

глСвязь = Новый COMОбъект("ADODB.Connection");

СтрокаИнит="Provider=VFPOLEDB.1; Mode=ReadWrite;Data Source=D:\ПапкаСБазой;";

глСвязь.ConnectionString=СтрокаИнит;

глСвязь.CursorLocation=3;

глСвязь.Open();

глКоманда=Новый COMОбъект("ADODB.Command");

глКоманда.ActiveConnection=глСвязь;

глКоманда.CommandText = "SEL ECT * FR OM MyBase WHERE Salary >20000";

Результат = глКоманда.Execute();

Пока НЕ Результат.EOF Цикл

ОбработкаПрерыванияПользователя();

Стр = "";

Для ин = 0 По Результат.Fields.Count()-1 Цикл

Стр = Стр + " - " + Результат.Fields(ин).Value;

КонецЦикла;

Сообщить(Стр);

Результат.MoveNext();

КонецЦикла;

 

Более сложные варианты не испытвал, но полагаю они возможны, т.е. имеется несколько файлов

и запрос делается из всех с использованием JOIN. Соответственно, можно например наладить взаимодействие

с семерочной базой (при условии что она запущена не монопольно) , достаточно просто указать путь к папке с базой и формировать прямые запросы к базе.

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Станислав Шепталов (sCHTASS) 01.07.09 08:39
Материал для начинающих.
А относительно метода, описанного в данной статье, могу сказать, что для перебора данных нужно пользоваться индексами. И никакого волшебства :)
2. Александр Зубцов (iov) 01.07.09 12:14
Дабы не остыл к написаниям статей
3. Александр (Atheist) 01.07.09 13:30
Во-первых, я привел простой пример, в моем случае условия выборки значительно сложнее, при чем перечень полей отбора в разных ситуациях бывает различная, так что "=", ">=", "<=" и "<" - явно недостаточно, тут нужны SQL-функции, которых очень много (почитайте про SQL). Да и вообще, любой опытный программист, по крайней мере тот, который работал когда-нибудь с SQL, предпочтет все таки SQL, а не гемор с кучей индексных файлов.
А если говорить о работе с группой файлов и, соответственно, о выборке данных с последующим объединением, тот тут индексы и вовсе не катят.

Люблю, критику "опытных" ;)
4. Денис (KrakoZyabl) 02.02.12 09:43
Спасибо за статейку, искал как раз внешнюю компоненту для работы с несколькими табличками dbf с помощью запросов, но все равно же эти компоненты были бы написаны с использованием АДО, а тут напрямую и методы мне знакомы. Плюс от меня +++ :)