gifts2017

OraCon (1С+Oracle)

Опубликовал Алексей Выхрыстюк (avhrst) в раздел Программирование - Внешние компоненты

Внешняя компонента, предназначенная для организации двухсторонней связи с Oracle

OraCon - внешняя компонента для 1С, предназначенная для выполнения прямых запросов к Oracle

--------------------------------------------------------------------------

0. Установка 

  • Запустить setup.exe
  • После установки зайти в \Program Files\OraCon\ и запустить reg.bat для регистрации компоненты.

Прим. Компонента регистрируется в реестре и ее не надо КОПИРОВАТЬ в папку с 1С и.т.д.


Системные требования.

  • необходим Net Framework 2
  • необходим установленный OracleClient (тестировалось на версии клиента 10g, если с Вашим клиентом не заработает - в \Program Files\OraCon\ есть 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

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
OraCon инсталятор
.1236336946 469,19Kb
25.09.09
121
.1236336946 469,19Kb 121 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. - - (Rebelx) 06.03.09 14:07
2. it.net (avhrst) 06.03.09 14:17
Так это и есть ADO.NET, задача была написать максимально простое решение способное использовать стандартный запрос и способное получить в 1С например 100 000 строк.
3. it.net (avhrst) 06.03.09 14:19
Плюс в моем варианте на надо объяснять админу что такое ConnectionString.
И насколько я знаю 1С ADO не поддерживает.
4. Василий Демидов (Душелов) 06.03.09 14:20
(3) 1С поддерживает COM-объекты, к коим ADO и относится.
5. Василий Демидов (Душелов) 06.03.09 14:20
> - необходим Net Framework 2

А без него никак?
6. it.net (avhrst) 06.03.09 14:22
для использования ADO.NET Net Framework 2 обязательное условие.
7. it.net (avhrst) 06.03.09 14:24
Душелов - идея конечно рабочая, но попробуйте привести реальный пример получения в 1С таблицы из Oracle с использованием COM
8. it.net (avhrst) 06.03.09 14:26
Net Framework 2 - наверное проблема для тех кто использует 1С на Unix :)
9. Василий Демидов (Душелов) 06.03.09 14:27
(7) Реального примера не имею, т.к. оракла нет. Но запросы так же спокойно пишутся через ADO
(8) Mono решает...
10. it.net (avhrst) 06.03.09 14:29
Ну если оракла нет, тогда хоть для sql примерчик...
11. it.net (avhrst) 06.03.09 14:30
там разница только в ConnectionString и con,com,reeder объектах
12. Василий Демидов (Душелов) 06.03.09 14:32
Код
DataBaseConnection = CreateObject("ADODB.Connection");
// подстроки user_password, user_name, server_name заменить на свои
DataBaseConnection.ConnectionString = "Provider=MSDAORA.1;Password=user_password;User ID=user_name;Data Source=server_name;Persist Security Info=True";
DataBaseConnection.Open();

RecordSet = СоздатьОбъект("ADODB.Recordset");
RecordSet.ActiveConnection = DataBaseConnection;
RecordSet.CursorLocation = 3; // UseClient

RecordSet.Open("SELECT * FROM clients ORDER BY name");

Для i = 1 По RecordSet.RecordCount Цикл

Сообщить(RecordSet.Fields.Item("name").Value);
RecordSet.MoveNext();

КонецЦикла;

RecordSet.Close();
Показать полностью
13. it.net (avhrst) 06.03.09 14:42
Спасибо за пример. Только ADODB.Recordset и MSDAORA.1 это страшно тормознутые объекты из ADO. Моя же компонента использует ADO.NET, "родной" клиент оракла (можно и sql), более быстрый DataReeder.

14. it.net (avhrst) 06.03.09 14:43
И кстати неразумно всем в коде 1С показывать пароли к Ораклу
15. it.net (avhrst) 06.03.09 14:44
В моей компоненте пароль шифруется средствами .Net
16. Василий Демидов (Душелов) 06.03.09 14:46
(13) Это все тоже можно спокойно использовать. "MSDAORA.2" и т.д.
(14) Кому показывать?
17. Василий Демидов (Душелов) 06.03.09 14:47
(15) А как пароль в компоненту передается?
18. it.net (avhrst) 06.03.09 14:52
MSDAORA.2 - ситуацию не изменит, нужен родной клиент.
Пароль вводится при первоначальной установке в окне свойств внешней компоненты. Затем шифруется и хранится классом Seting (.Net 2.0).
19. it.net (avhrst) 06.03.09 14:56
Требовалось простое решение. с которым смогут работать рядовые программеры 1С (не знающие ADO).
20. Василий Демидов (Душелов) 06.03.09 14:56
В инсталлятор включать регасм - это сильно! :)

Не проще ли в батнике прописать:

Код
@ECHO OFF
set DOTNETFX2=%SystemRoot%\Microsoft.NET\Framework\v2.0.50727
set PATH=%PATH%;%DOTNETFX2%
regasm.exe oracon.dll /codebase
Показать полностью
21. Василий Демидов (Душелов) 06.03.09 14:57
(19) Не знающие АДО, могущие писать запросы для него :)))
22. it.net (avhrst) 06.03.09 15:00
я думаю получилось достаточно просто:
---------------------------------
ora.Открыть();
ora.ЗапросСтр("select id,name from aaa");
Пока ora.Читать() = 1 Цикл
Сообщить(ora.Элем("name"));
КонецЦикла;
ora.Закрыть();
----------------------------------
23. it.net (avhrst) 06.03.09 15:01
(21) Звучит смешно, но к сожалению такое не редкость... (особенно среди 1С ников)
24. it.net (avhrst) 06.03.09 15:10
(20) регасм на скорость не влияет...
25. Василий Демидов (Душелов) 06.03.09 15:15
26. it.net (avhrst) 06.03.09 15:25
(25) скорость не причем, но батничек у себя я уже обновиол :)
27. anbxp (anbxp) 07.03.09 00:52
Лично я бы использовал oci. ADO изначально медленнее будет
28. Василий Демидов (Душелов) 07.03.09 01:29
(27) По каким замерам? И oci почему быстрее?
29. it.net (avhrst) 07.03.09 10:02
(28) Полностью согласен. ADO быстрее (пулы соединений, многопотоковость ...)
30. vip (vip) 07.03.09 10:16
Давным давно использую для работы с Ораклом 1С++.
Вплоть до того, что в 1С++ Оракл может быть поставщиком данных для ТабличногоПоля.
31. Аркадий Кучер (Abadonna) 07.03.09 10:39
(30)>Давным давно использую для работы с Ораклом 1С++.
"– Эти добрые люди, – заговорил арестант и, торопливо прибавив: – игемон, – продолжал: – ничему не учились и все перепутали, что я говорил."
М. Булгаков.
(0) не обижайся, просто шутка ;)
32. anbxp (anbxp) 07.03.09 11:09
(28) Замеры были ранее, когда я с ораклом плотно работал. Да и по-сути ado - дополнительная прослойка. Которая скорости явно не добавляет:) Хотя, для использования интерфейса occi в 1С нужно будет писать ВК, т.к. этот интерфейс для c++
(29) ADO не может предоставить возможностей больше, чем умеет БД:)
(0) Разработка, безусловно, имеет полное право на существование. Но не лежит у меня душа к .net:)
33. vip (vip) 07.03.09 11:26
(31) Не поверишь, на неделе перечитал.
34. it.net (avhrst) 08.03.09 10:16
(32) Вы имееете в виду ADO, а я использую ADO.NET в котором существвено переработан reeder способный в паре с родным клинтом оракла рганизовать наиболее оптимального клиента (как по скорости так по надежности).
Такж .NET платформа позволяет реализовать позднее связывание, что очень удобно для организации offline клиентов.
35. Геннадий (genych76) 21.11.09 17:47
2. Использование компоненты.
ora.Открыть(); // открытие соединения с ораклом.
// данный метод использует параметры соединения которые можно задать
// на вкладке Сервис - параметры - Параметры соединения с БД.


И где же в какой программе я могу посмотреть эту вкладку ? В 1с ее нет....
36. {ÐƦǑƝȊ} mx (dour-dead) 07.04.11 23:22
Огромное спасибо автору!
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа