Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Программирование

Как отправить запрос из 1с 7.7 в оракл(Супермаг) и потом отобразить результат : Программирование

30.04.2024 22:34


23.04.2015 14:15
BotMan
 
начитался о Library Cache Oracle, вот и решил попробовать переписать свои запросы...
23.04.2015 14:28
OlegON
 
извини, это как-то совсем не объяснение, что ты в этом коде делаешь... на подставляемую переменную никак не тянет.
23.04.2015 14:32
Mtirt
 
1С через Com-объект возвращает только то, о чем она знает. В основном числа, строки, еще кое-какие специфичные вещи.
Что такое DBMS.putline 1С не знает. Совсем. Поэтому и не возвращает ничего.
Но вообще, согласна с Олегом, PL/SQL тут не пришей кобыле хвост.
Хочешь передавать параметры в запросы, так и определяй их как параметры, и передавай их...
23.04.2015 15:07
BotMan
 
Цитата:
Mtirt Хочешь передавать параметры в запросы, так и определяй их как параметры, и передавай их...
а можно пример, пожалуйста?
23.04.2015 15:24
Mtirt
 
Как подключиться из SQL 1С в Oracle Супермаг

Правда это было для 8-ки и OO4O написано. На 7-ке я этого делать не пыталась.
23.04.2015 16:21
BotMan
 
я так понимаю OO4O входит в оракловский клиент, тот что от Супермага по идеи должен прокатить ?
24.04.2015 07:00
Mtirt
 
Я ставила в свое время отдельно.
Но что стоит у вас, я не знаю.
25.04.2015 16:11
BotMan
 
И так:
Для подключения 1с 7.7 или 8+ можно использовать как минимум два способа:
1)Через ODBC (Open DataBase Connectivity)
Строка подключения:
Код:
«DRIVER={Microsoft ODBC for Oracle};UID=scott; PWD=Tiger; SERVER=ИмяБазы» 
или
«Provider=MSDAORA;Password=tiger;User ID=scott;Data Source=ИмяБазы;Persist Security Info=True»
Плюсы: простота работы, входит в ОС Windows.
Минусы: не поддерживает многие расширения Оракл.
Не стоит гонять через это соединение обработки, которые сверяют сотни ID и других значений.(читаем Library Cache Oracle).
Если отсылать пару запросов за день в Оракл, ничего страшного не произойдет. Например: отчет в котором из переменных только дата.

2)Через OO4O (Oracle Objects for OLE) требует установки из Oracle client компоненту
Код:
Oracle Objects for OLE
Строка соединения (1с 7.7):
Код:
«Соединение=СоздатьОбъект("OracleInProcServer.XOraSession");    
Ora=Соединение.OpenDatabase("ИмяБазы","scott/tiger",0);»
Рекомендуемое соединение к Оракл для написания приложений, которые постоянно обращаются к базе данных.

Пример 7.7:
задаем переменную, в которую будет передаваться состояние нашего подключения.
Код:
перем ora;      // лучше прописать в глобальном модуле и экспортировать, а тут закомментировать.
подключаемся к Базе Данных.
Код:
функция открытьБД()
Попытка 		
Соединение=СоздатьОбъект("OracleInProcServer.XOraSession");    
Ora=Соединение.OpenDatabase("ИмяБазы","Scott/triger",0); // (ИмяБазы должно присутствовать в TNSname.ora)
исключение 
	сообщить("не удалось подключиться");
конецпопытки;
конецфункции
создаем функцию, которая будет принимать текст запроса и параметры в запрос.

Код:
Функция Подключение(текстзапроса, параметр) 
	
если пустоезначение(Ora)=1  тогда  //если = 1 тогда создать подключение(создать сессию к ораклу), если уже подключено - использовать старое подключение!
	открытьБД();       
конецесли;	

параметр.ВыбратьСтроки(); 
Пока параметр.ПолучитьСтроку()=1 Цикл
Ora.Parameters.Remove(параметр.name); 
Ora.Parameters.Add(параметр.name,параметр.bar,1);
КонецЦикла;

НаборЗаписей=Ora.CreateDynaset(ТекстЗапроса,0);
                 
возврат   НаборЗаписей;
Ora.close();

КонецФункции


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

параметр = создатьобъект("таблицазначений");
параметр.очистить();
параметр.новаяколонка("bar","Строка");
параметр.новаяколонка("name","Строка");

текстзапроса = "Select ID from goods where barcode = :barcode";

параметр.новаястрока();
параметр.bar = "1234567896541";
параметр.name = "barcode";

запрос = подключение(текстзапроса, параметр); // передаем в функцию текст запроса и таблицу значений.
параметр.удалитьстроки();

запрос.movefist();

Пока запрос.EOF()=0 цикл
сообщить(запрос.Fields("ID").Value);
запрос.movenext();
конеццикла;


конецпроцедуры
все.
25.04.2015 17:16
BotMan
 
поправил косячек:
Код:
Функция Подключение(текстзапроса, параметр) 
	
если пустоезначение(Ora)=1  тогда  //если = 1 тогда создать подключение(создать сессию к ораклу), если уже подключено - использовать старое подключение!
	открытьБД();       
конецесли;

для ы=0 по Ora.Parameters.count-1 цикл 
	Ora.Parameters.Remove(параметр.name);
конеццикла;
	

параметр.ВыбратьСтроки(); 
Пока параметр.ПолучитьСтроку()=1 Цикл
Ora.Parameters.Remove(параметр.name); 
Ora.Parameters.Add(параметр.name,параметр.bar,1);
КонецЦикла;

НаборЗаписей=Ora.CreateDynaset(ТекстЗапроса,0);
                 
возврат   НаборЗаписей;
Ora.close();

КонецФункции
27.04.2015 15:07
BotMan
 
Код:
Функция Подключение(текстзапроса, параметр) 
	
если пустоезначение(Ora)=1  тогда  //если = 1 тогда создать подключение(создать сессию к ораклу), если уже подключено - использовать старое подключение!
	открытьБД();       
конецесли;

для ы=0 по Ora.Parameters.count-1 цикл 
Ora.Parameters.Remove(параметр.name);
конеццикла;
	

параметр.ВыбратьСтроки(); 
Пока параметр.ПолучитьСтроку()=1 Цикл
Ora.Parameters.Remove(параметр.name);
Ora.Parameters.Add(параметр.name,параметр.bar,1);
КонецЦикла;

НаборЗаписей=Ora.CreateDynaset(ТекстЗапроса,0);
                 
возврат   НаборЗаписей;
Ora.close();

КонецФункции
все таки лучше оставить как было 8)
Часовой пояс GMT +3, время: 22:34.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.