Имя: Пароль:
1C
1С v8
Помогите соединитьться с Oracle через OO4O
0 Child_Men
 
26.09.14
11:10
Работаю на платформе 8.3
На машине установлен клиент Oracle 9.2



Не удается соединиться с Oracle через Oracle Objects for OLE

Для соединения использую код:

    Попытка
        ORAsession = Новый COMОбъект("OracleInProcServer.XOraSession");
        ORAdb = ORAsession.OpenDatabase("ИмяБазы", "Логин/Пароль",0);
        Сообщить("подключение есть");
    Исключение
        Сообщить("подключения нет");
        Возврат;
    КонецПопытки;
1 Dmitry1c
 
26.09.14
11:11
Сообщить(ОписаниеОшибки());

выведи
2 Dmitry1c
 
26.09.14
11:11
(1) в ветви исключения
3 Child_Men
 
26.09.14
11:16
Выдает

{Форма.Форма1.Форма(55)}: Ошибка при вызове конструктора (COMОбъект): -2147221005(0x800401F3): Недопустимая строка с указанием класса
4 МихаилМ
 
26.09.14
11:23
"InProcServer"
Вам ничего не говорит
5 Child_Men
 
26.09.14
11:35
(4) Нет
6 DES
 
26.09.14
11:37
Установил пакет от ORACLE ?
7 DES
 
26.09.14
11:38
Oracle Data Access Components (ODAC) 11.2.0.3.0
8 Child_Men
 
26.09.14
11:41
(6) Да
9 DES
 
26.09.14
11:52
вот рабочий код на 7.7
Функция ПодключитьсяКБазеOralce(Base,Login,Pass)
    Перем РезультатПодключения;
    
    РезультатПодключения = 0;
    Попытка
        OraSession = СоздатьОбъект("OracleInProcServer.XOraSession");
        Если Константа.Отладка=Да Тогда    
            Сообщить("Подключаюсь к базе "+ Base + " как " + Login+"/"+Pass);
        КонецЕсли;
        OraDatabase = OraSession.OpenDatabase(Base,Login+"/"+Pass,);
        Если Константа.Отладка=Да Тогда        
            Сообщить("Connected to: " + OraDatabase.Connect()+"@"+OraDatabase.DatabaseName());
            Сообщить("OO4O Version: " + OraSession.OIPVersionNumber());
            Сообщить("Oracle Version: " + OraDatabase.RDBMSVersion());
        КонецЕсли;
        
        OraDatabase.Parameters.Add("num_N_PERSON_ID",   0,  ORAPARAM_INPUT_OUTPUT);OraDatabase.Parameters("num_N_PERSON_ID").ServerType = ORATYPE_NUMBER;
        OraDatabase.Parameters.Add("num_N_DOC_ID",      0,  ORAPARAM_OUTPUT);OraDatabase.Parameters("num_N_DOC_ID").ServerType = ORATYPE_NUMBER;
        OraDatabase.Parameters.Add("num_N_ACCOUNT_ID",  0,  ORAPARAM_OUTPUT);OraDatabase.Parameters("num_N_ACCOUNT_ID").ServerType = ORATYPE_NUMBER;
        OraDatabase.Parameters.Add("vch_VC_ACCOUNT",    0,  ORAPARAM_OUTPUT);OraDatabase.Parameters("vch_VC_ACCOUNT").ServerType = ORATYPE_NUMBER;
        OraDatabase.Parameters.Add("Info",              "", ORAPARAM_OUTPUT);OraDatabase.Parameters("Info").ServerType = ORATYPE_VARCHAR2;
        OraDatabase.Parameters.Add("num_N_USER_ID",           0, ORAPARAM_INPUT);OraDatabase.Parameters("num_N_USER_ID").ServerType = ORATYPE_NUMBER;
        OraDatabase.Parameters.Add("vch_VC_TEL_NUMBER"     , "", ORAPARAM_INPUT);OraDatabase.Parameters("vch_VC_TEL_NUMBER").ServerType = ORATYPE_VARCHAR2;
        OraDatabase.Parameters.Add("FORWHO_ACCOUNT_ID",       0, ORAPARAM_INPUT);OraDatabase.Parameters("FORWHO_ACCOUNT_ID").ServerType = ORATYPE_NUMBER;
        OraDatabase.Parameters.Add("num_N_ACCOUNT_ID_Payer",  0, ORAPARAM_INPUT);OraDatabase.Parameters("num_N_ACCOUNT_ID_Payer").ServerType = ORATYPE_NUMBER;
        OraDatabase.Parameters.Add("num_N_SUM",               0, ORAPARAM_INPUT);OraDatabase.Parameters("num_N_SUM").ServerType = ORATYPE_NUMBER;
        OraDatabase.Parameters.Add("dt_D_LOAD",               0, ORAPARAM_INPUT);OraDatabase.Parameters("dt_D_LOAD").ServerType = ORATYPE_DATE;
        OraDatabase.Parameters.Add("vch_VC_REM",              0, ORAPARAM_INPUT);OraDatabase.Parameters("vch_VC_REM").ServerType = ORATYPE_VARCHAR2;
        РезультатПодключения = 1;
    Исключение
        Попытка
            Сообщить(OraSession.LastServerErrText);              
            Возврат OraSession.LastServerErr;
        Исключение
            Сообщить("Не установлен OO4O", "!!!");
        КонецПопытки;
    КонецПопытки;
    Возврат РезультатПодключения;
КонецФункции
10 Велимудр
 
26.09.14
12:00
(9) вот бы еще описание переменных ORATYPE_NUMBER ... увидеть
11 Jaap Vduul
 
26.09.14
12:04
(3)Варианты:
- Не установлен ODAC с OO4O
- Код из (0) выполняется в 64битном процессе
- Не хватает прав на чтение соответсвующих веток реестра
12 Child_Men
 
26.09.14
13:20
(11) Установлена 64-разрядная Windows 7
13 DES
 
26.09.14
14:42
(10) зачем?
это не имеет отношения к теме
14 DES
 
26.09.14
14:44
ORASQL_DEFAULT     = 0;
    ORASQL_NO_AUTOBIND = 1;
    ORASQL_FAILEXEC    = 2;
    ORASQL_NONBLK      = 4;
    
    ORAPARAM_INPUT        = 1;
    ORAPARAM_OUTPUT       = 2;
    ORAPARAM_INPUT_OUTPUT = 3;
    ORATYPE_VARCHAR2 = 1;
    ORATYPE_NUMBER   = 2;
    ORATYPE_SINT     = 3;
    ORATYPE_FLOAT    = 4;
    ORATYPE_VARCHAR  = 9;
    ORATYPE_DATE     = 12;
    ORATYPE_UINT     = 68;
    ORATYPE_CHAR     = 96;
    ORATYPE_CHARZ    = 97;
    ORATYPE_BFLOAT   = 100;
    ORATYPE_BDOUBLE  = 101;
    ORATYPE_OBJECT   = 108;
    ORATYPE_REF      = 110;
15 DES
 
26.09.14
14:45
(11) + ODAC установлен криво