[ОТВЕТИТЬ]
09.03.2015 16:10
BotMan
 
подскажите как отправить запрос из 1с 7.7 в оракл(Супермаг) и потом отобразить результат.

Например внешняя обработка, вводим артикул и получаем его название!
понятия сильного в этом не имею. есть строка подключения ("DRIVER={Microsoft ODBC for Oracle};UID=***;PWD=***;SERVER=******")
09.03.2015 18:30
KirillHome
 
Не проверял, но на мисте пишут примерно такое

Код:
Соединение=Новый COMОбъект ("ADODB.Connection");
Соединение.ConnectionString = "Provider=msdaora;Data Source=tmagic;User Id=sys;Password=nctsys;";
Соединение.ConnectionTimeout = 15;
Соединение.CursorLocation= 3;
Соединение.Open();
ТекстЗапроса = "select *  from magicash5.ecfil002";

НаборЗаписей = Соединение.Execute(ТекстЗапроса);
КвоЗаписей = НаборЗаписей.RecordCount();
Сообщить(КвоЗаписей);
или такое (при работе с параметрами)
Код:
Command = Новый COMОбъект("ADODB.Command");
Command.ActiveConnection = Новый COMОбъект("ADODB.Connection");
Command.CommandText = "select * from VW_RPT_CFT_PERSON_F_1C where DATE_MOVE >= ?";
par = Command.CreateParameter("DATEN", 133, 3);
Command.Parameters.Append(par); 
par.Value = ДатаН;
Command.NamedParameters = Ложь; // можно не писать, по умолчанию и так ложь
 
RecordSet = Новый COMОбъект("ADODB.RecordSet");
RecordSet = Command.Execute();
09.03.2015 19:09
OlegON
 
посмотрите еще по форуму, несколько раз уже задавали вопрос
10.03.2015 12:09
BotMan
 
настройки драйвера Microsoft ODBC for Oracle :
Код:
Пуск-Панель Управление - Администрирование - Источники данных - Добавить - Microsoft ODBC for Oracle 
имя - mybase // 
описание - Mybase // 
пользователь - sys// 
сервер: "DSN=mybase;UID=sys;PWD=***;SERVER=192.168.*.***")

Собственно получился такой код, но работает он только в 8.2 и 8.3, а в 7.7 не срабатывает, пишет переменная "Новый COMОбъект" не определена, КАК ЕЕ ОПРЕДЕЛИТЬ ? )



Код:
//*******************************************
   
	  
Соединение=Новый COMОбъект ("ADODB.Connection");
Соединение.ConnectionString = "DRIVER={Microsoft ODBC for Oracle};UID=sys;PWD=***;SERVER=Mybase"; 
Соединение.ConnectionTimeout = 15;
Соединение.CursorLocation= 3;
  Попытка
        Соединение.Open(Соединение.ConnectionString);
        Сообщить("Соединение успешно установлено.");   
      Исключение
          сообщить("Невозможно установить соединение-"+ОписаниеОшибки());
      КонецПопытки;
ТекстЗапроса = "select name, article
				|from supermag.smcard
				|where crd.article = 00022";
				

НаборЗаписей = Соединение.Execute(ТекстЗапроса);
//КвоЗаписей = НаборЗаписей.Recordcount();
//Сообщить(квоЗаписей);

   
 
НаборЗаписей.MoveFirst();
 

     Пока НаборЗаписей.EOF()=0  цикл
     
      
      
        Сообщить("Карточка: " + НаборЗаписей.Fields("article").Value + " " + НаборЗаписей.Fields("name").Value);
		

         НаборЗаписей.MoveNext();

     КонецЦикла;
		

НаборЗаписей.Close();
10.03.2015 12:22
BotMan
 
Код:
Соединение=Новый <<?>>COMОбъект ("ADODB.Connection");
{C:\USERS\АДМИНИСТРАТОР\DESKTOP\СОЕДИНЕНИЕ.ERT(6)}: Переменная не определена (COMОбъект)
10.03.2015 12:26
BotMan
 
заменил новый "СОМОбъект" на "СоздатьОбъект("ADODB.Connection");" и все зажужжало !!!
23.04.2015 13:11
BotMan
 
а кто-нибудь пробовал отправить pl/sql и получить ответ ? )
дело в том, что отправляться отправляется, а вот ответа уже не получает...
23.04.2015 13:20
Mtirt
 
Как отправляешь и как получаешь ответ?
23.04.2015 13:52
BotMan
 
отправляю через
Код:
Provider=MSDAORA;Password=qqq;User ID=supermag;Data Source=mybase;Persist Security Info=True
следующее
Код:
текстзапроса = " |declare
   |i varchar2(20):= '000333';
   |b supermag.smcard.article%type;
   |begin
   |select article into b from supermag.smcard where article = i;
   |DBMS_OUTPUT.put_line(b);
   |end;";

Код:
  ADODB.Recordset: операция не допускается, если объект закрыт
Обычные select запросы улетают нормально.

в Developere запрос отрабатывается и показывает результат во вкладке "Output".
23.04.2015 14:10
OlegON
 
А зачем тут PL\SQL-то?
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, время: 20:35.

 

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