Имя: Пароль:
1C
1С v8
Соединение с Oracle 11g
0 ETurdymuratov
 
22.07.13
13:15
Привет всем.
Помогите разобраться с проблемой. Стоит задача: залесть в БД Oracle и вытащить инфу из одной таблицы.
Есть скрипт соединения

Функция СоединениеСБД()
   Соединение=Новый COMОбъект ("ADODB.Connection");
   ConnectionString = "Provider=msdaora;Data Source=Source;User Id=USER;Password=PASS;";
   Соединение.ConnectionTimeOut =600;
   Соединение.CursorLocation = 3;
   try
       Соединение.Open(ConnectionString);  
   except
       Сообщить("Невозможно установить соединение");
  endtry;
  Возврат(Соединение);
КонецФункции    

при запуске скрипта в режиме предприятие нет никаких ошибок, просто закрывается 1С.
В режиме отладки доходит до строки Соединение.Open(ConnectionString);
дальше закрывается 1С. В чем может быть проблема?
1 Maxus43
 
22.07.13
13:19
Соединение.ConnectionTimeOut =600;
   Соединение.CursorLocation = 3;

закоменти это для начала
2 ETurdymuratov
 
22.07.13
13:21
(1)
Не помогло, выкинуло...
3 ДенисЧ
 
22.07.13
13:22
Попробуй аппаратное ускорение графики уменьшить.
Без шуток...
4 IKSparrow
 
22.07.13
13:25
+(3) И режим поставь 800х600 SVGA в безопасном режиме.
Без шуток...
5 ETurdymuratov
 
22.07.13
13:25
(3) Я новичек, но не до такой же степени что протереть монитор и почистить мышку чтобы соединиться с Ораклом =)
6 ДенисЧ
 
22.07.13
13:26
(5) Ты попробуй сначала...
7 IKSparrow
 
22.07.13
13:26
(5) Ну ты может и не до такой степени, а вот Оракл знатный капризуля.
8 Maxus43
 
22.07.13
13:26
(5) попробуй (3) на всякий, в 1с есть такой глюк, тока я не вижу в этой ситуации связи...
9 ETurdymuratov
 
22.07.13
13:29
Ребят, будут еще мнения?
10 ДенисЧ
 
22.07.13
13:30
(9) ты попробовал (3) ?
11 Maxus43
 
22.07.13
13:31
(9) не из 1с по этой строке подключения подключится можешь?
12 ETurdymuratov
 
22.07.13
13:31
Тут мне еще подсказывают что в место i3 Celeron 1600 поставить ото толстый клиент возможно быстро отрабатывает этот скрипт. =)
13 sda553
 
22.07.13
13:32
Заведи ODBC линк на этот оракл
14 sda553
 
22.07.13
13:33
(0) И еще из екселя попробуй те же строчки, с какой ошибкой вывалятся
15 ETurdymuratov
 
22.07.13
13:33
(11) А как можно проверить?
16 sda553
 
22.07.13
13:38
(15) В екселе набей макрос
Private Sub CommandButton1_Click()
   Dim Con1 As New ADODB.Connection
   Con1.Open "Provider=msdaora;Data Source=Source;User Id=USER;Password=PASS;"
   Con1.Close
   msgBox "Success"
End Sub
17 ETurdymuratov
 
22.07.13
13:51
(16) ORA-12154: TNS: невозможно разрешить имя службы
18 ETurdymuratov
 
22.07.13
13:51
Спасибо, теперь хоть понятно что строка не подключается, ото просто выкидывало...
19 ETurdymuratov
 
22.07.13
14:10
(10)
Это шутка была серьезной?
20 ДенисЧ
 
22.07.13
14:11
(19) Это была не шутка.
1с на ителовском встроенном видео на максимуме аппаратного ускорения, бывает, вылетает.
Сам офигел, когда в первый раз увидел.
21 ДенисЧ
 
22.07.13
14:11
*интеловском
22 George Wheels
 
22.07.13
14:16
Попробуй вместо Provider=... и Data Source=...
указать Driver={Microsoft ODBC for Oracle};Server=ТвойIP;Database=ТвояБаза
23 George Wheels
 
22.07.13
14:17
(22)+ Server=IPСервера
24 Maxus43
 
22.07.13
14:19
строку вобще например так собери, вроде работало

Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.ConnectionString = "Provider=MSDAORA;Password="+pwd+";User ID="+uid+";Data Source="+database+";Persist Security Info=True;CharSet=AMERICAN_AMERICA.CL8MSWIN1251;";
25 George Wheels
 
22.07.13
14:29
26 Maxus43
 
22.07.13
14:31
(25) ну так уж тогда, http://www.connectionstrings.com/oracle
автору оракл надо
27 George Wheels
 
22.07.13
14:32
(26) Логично. Не ту ссылку скопировал.
28 sda553
 
22.07.13
14:40
(17) Ну так показывай теперь фрагмен файла tnsnames.ora как у тебя там имена прописаны
29 mistеr
 
22.07.13
15:09
(0) Выкидывай msdaora (и odbc) и ставь родной клиент. Можно Instant Client, с дополнительными телодвижениями строго по инструкции.

Говорю как ораклист со стажем.
30 sda553
 
22.07.13
15:56
(29) а деньги где взять на клиента родного?
31 mistеr
 
22.07.13
16:01
(30) С каких пор он стоит денег?
32 ДенисЧ
 
22.07.13
16:06
(30) Инстанс клиент безплатен
33 mistеr
 
22.07.13
16:15
(32) Полный тоже.
34 Мэс33
 
22.07.13
17:45
Рабочий код соединения:
где
-(Oracle in instantclient10_2 ) - драйвер в системных источниках данных
- VOracle - Имя драйвера

Устанавливал instantclient10_2.

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

Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.ConnectionString = "DRIVER={Oracle in instantclient10_2};Data Source=VOracle;User ID="+ЛогинSiebel+";Password="+ПарольSiebel+";";
Соединение.CursorLocation = 3;
Соединение.Open();

RS = Новый COMОбъект("ADODB.Recordset");
RS.CursorType = 1;
Command = Новый COMОбъект ("ADODB.Command");
       
Command.CommandText = "ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MM-YYYY HH:MI:SS'";
Command.ActiveConnection = Соединение;
Command.CommandType = 1;
Command.Execute();

Command.CommandText = "текст запроса"; // ваш запрос

Command.Execute();
RS = Command.execute();
   
RS.movefirst();

-- далее перебор
Пока НЕ RS.EOF() Цикл
    // обработка полученных данных по RS.<ИмяПоля>.name и RS.<ИмяПоля>.Value

    RS.MoveNext();                          
КонецЦикла;
35 beholder
 
22.07.13
18:05
(0) сделай udl файл и попробуй соединится через него, если получится скопируй строку подключения оттуда.
Если не получается - шамань с драйверами и клиентами оракла.

ЗЫ однажды мучались с такой фигней: то работает то не работает. А у нас был кластер из трех серверов. Оказалось что админы установили дрова на одном, а про остальные два забыли.
36 ETurdymuratov
 
03.08.13
23:25
(23) Теперь выругался по другому:

{ОбщийМодуль.АвтоматизацияКиви.Модуль(25)}: Значение не является значением объектного типа (Execute)
    НаборЗаписей = Соединение.Execute(ЗапросПоДатеИСумме);
37 ETurdymuratov
 
03.08.13
23:37
(24)
... Ошибка при вызове метода контекста (Execute)
    НаборЗаписей = Соединение.Execute(ЗапросПоДатеИСумме);
по причине:
Произошла исключительная ситуация (ADODB.Connection): Операция не допускается, если объект закрыт.
38 ETurdymuratov
 
03.08.13
23:43
(29)
Достаточно будет если только на сервере 1С предприятия поставить клиента Oracle?
39 Живой Ископаемый
 
03.08.13
23:59
(38) если обращение будет идти только из серверных модулей
40 Живой Ископаемый
 
04.08.13
00:01
(36,37) ну так не закрывай соедининие, держи его открытым
41 ETurdymuratov
 
04.08.13
19:57
(40) В коде нету команды на закрытие соединения, но ошибка осталась.
42 ETurdymuratov
 
04.08.13
19:58
(39) Понял
43 Живой Ископаемый
 
04.08.13
20:33
(41)  если это соединение и ты его кладешь в хранилище, где оно например живет больше 15 минут, или какой у твоего оракла настроен таймаут, то это уже не соединение адодб, а неопределено, а у неопределено нет метода. Ехекьюте.

Понятно?
44 sda553
 
04.08.13
23:01
а зачем так много букв и объектов.
Там
соединение.open();
recordset=соединение.execute(sqlзапрос);
recordset.movefirst();
while not(recordset.eof)
{
val = recordset.field(fieldname).value;
  recordset.movenext();
}
и вроде как и все
45 Живой Ископаемый
 
04.08.13
23:21
М... В каком месте их много?
46 sda553
 
05.08.13
06:36
в 34
47 Живой Ископаемый
 
05.08.13
07:56
А, ну да