Внешняя компонента, предназначенная для организации двухсторонней связи с Oracle
OraCon — внешняя компонента для 1С, предназначенная для выполнения прямых запросов к Oracle
—————————————————————————
0. Установка
- Запустить setup.exe
- После установки зайти в Program FilesOraCon и запустить reg.bat для регистрации компоненты.
Прим. Компонента регистрируется в реестре и ее не надо КОПИРОВАТЬ в папку с 1С и.т.д.
Системные требования.
- необходим Net Framework 2
- необходим установленный OracleClient (тестировалось на версии клиента 10g, если с Вашим клиентом не заработает — в Program FilesOraCon есть dll от клиента 10g)
—————————————————————————
1. Подключение компоненты (глобальный модуль 1С)
Перем ora Экспорт;
Процедура ПриНачалеРаботыСистемы()
...
// Работа с Ораклом
ИмяВК = "AddIn.OraCon";
ок = ПодключитьВнешнююКомпоненту(ИмяВК);
Если ок=0 Тогда
Сообщить("Не удалось подключить внешнюю компоненту");
Иначе
ora = СоздатьОбъект(ИмяВК);
КонецЕсли;
...
КонецПроцедуры
————————————————————————
2. Использование компоненты.
ora.Открыть();// открытие соединения с ораклом.
// данный метод использует параметры соединения которые можно задать
// на вкладке Сервис - параметры - Параметры соединения с БД.
——————————————————————
// выполнение запроса, который возвращает множество строк.
ora.ЗапросСтр("select id,name from aaa");
Пока ora.Читать() = 1 Цикл // получение строки
Сообщить("" + ora.Элем("id") + " " + ora.Элем("name"));
// получение элемента строки ora.Элем("id") по наименованию
// получение элемента строки ora.Элем(0) по номеру
КонецЦикла;
——————————————————————-
// получение единичного (скалярного) значения
зн = ora.ЗапросЗн("select count(*) from aaa");
———————————————————————
// выполнение запроса не возвращающего значения
Если ora.Запрос("insert into aaa(id,name) values(1,'xxx')") = 1 Тогда
// данные записаны
КонецЕсли;
———————————————————————
// закрытие соединения
ora.Закрыть();
—————————————————————————-
Разработчик: Выхрыстюк Алексей (it.net). poshta.it@gmail.com
а ADO отменили?
Так это и есть ADO.NET, задача была написать максимально простое решение способное использовать стандартный запрос и способное получить в 1С например 100 000 строк.
Плюс в моем варианте на надо объяснять админу что такое ConnectionString.
И насколько я знаю 1С ADO не поддерживает.
(3) 1С поддерживает COM-объекты, к коим ADO и относится.
> — необходим Net Framework 2
А без него никак?
для использования ADO.NET Net Framework 2 обязательное условие.
Душелов — идея конечно рабочая, но попробуйте привести реальный пример получения в 1С таблицы из Oracle с использованием COM
Net Framework 2 — наверное проблема для тех кто использует 1С на Unix 🙂
(7) Реального примера не имею, т.к. оракла нет. Но запросы так же спокойно пишутся через ADO
(8) Mono решает…
Ну если оракла нет, тогда хоть для sql примерчик…
там разница только в ConnectionString и con,com,reeder объектах
Показать полностью
Спасибо за пример. Только ADODB.Recordset и MSDAORA.1 это страшно тормознутые объекты из ADO. Моя же компонента использует ADO.NET, «родной» клиент оракла (можно и sql), более быстрый DataReeder.
И кстати неразумно всем в коде 1С показывать пароли к Ораклу
В моей компоненте пароль шифруется средствами .Net
(13) Это все тоже можно спокойно использовать. «MSDAORA.2» и т.д.
(14) Кому показывать?
(15) А как пароль в компоненту передается?
MSDAORA.2 — ситуацию не изменит, нужен родной клиент.
Пароль вводится при первоначальной установке в окне свойств внешней компоненты. Затем шифруется и хранится классом Seting (.Net 2.0).
Требовалось простое решение. с которым смогут работать рядовые программеры 1С (не знающие ADO).
В инсталлятор включать регасм — это сильно! 🙂
Не проще ли в батнике прописать:
Показать полностью
(19) Не знающие АДО, могущие писать запросы для него :)))
я думаю получилось достаточно просто:
———————————
ora.Открыть();
ora.ЗапросСтр(«select id,name from aaa»);
Пока ora.Читать() = 1 Цикл
Сообщить(ora.Элем(«name»));
КонецЦикла;
ora.Закрыть();
———————————-
(21) Звучит смешно, но к сожалению такое не редкость… (особенно среди 1С ников)
(20) регасм на скорость не влияет…
(24) При чем тут скорость?
(25) скорость не причем, но батничек у себя я уже обновиол 🙂
Лично я бы использовал oci. ADO изначально медленнее будет
(27) По каким замерам? И oci почему быстрее?
(28) Полностью согласен. ADO быстрее (пулы соединений, многопотоковость …)
Давным давно использую для работы с Ораклом 1С++.
Вплоть до того, что в 1С++ Оракл может быть поставщиком данных для ТабличногоПоля.
(30)>Давным давно использую для работы с Ораклом 1С++.
«– Эти добрые люди, – заговорил арестант и, торопливо прибавив: – игемон, – продолжал: – ничему не учились и все перепутали, что я говорил.»
М. Булгаков.
(0) не обижайся, просто шутка 😉
(28) Замеры были ранее, когда я с ораклом плотно работал. Да и по-сути ado — дополнительная прослойка. Которая скорости явно не добавляет:) Хотя, для использования интерфейса occi в 1С нужно будет писать ВК, т.к. этот интерфейс для c++
(29) ADO не может предоставить возможностей больше, чем умеет БД:)
(0) Разработка, безусловно, имеет полное право на существование. Но не лежит у меня душа к .net:)
(31) Не поверишь, на неделе перечитал.
(32) Вы имееете в виду ADO, а я использую ADO.NET в котором существвено переработан reeder способный в паре с родным клинтом оракла рганизовать наиболее оптимального клиента (как по скорости так по надежности).
Такж .NET платформа позволяет реализовать позднее связывание, что очень удобно для организации offline клиентов.
2. Использование компоненты.
ora.Открыть(); // открытие соединения с ораклом.
// данный метод использует параметры соединения которые можно задать
// на вкладке Сервис — параметры — Параметры соединения с БД.
И где же в какой программе я могу посмотреть эту вкладку ? В 1с ее нет….
Огромное спасибо автору!