Текущий объект Recordset не поддерживает обновление. Отправка через com в AD

1. user1934472 16.10.24 14:49 Сейчас в теме
Необходимо в AD заполнять номера телефонов. Тестирую на одном пользователе. Вылетает ошибка:
Произошла исключительная ситуация (ADODB.Field): Текущий объект Recordset не поддерживает обновление. Это связано с ограничением поставщика или с выбранным типом блокировки.

Подскажите что не так?
Ошибка возникает в моменте:
ВыборкаАДО.Fields("telephoneNumber").Value = "12345";

    
    КомандаАДО    = Новый COMОбъект("ADODB.Command");
    СоединениеАДО = Новый COMОбъект("ADODB.Connection");
     
    СоединениеАДО.Provider = "ADSDSOObject";
    Попытка
        СоединениеАДО.Open("Active Directory Provider");    
    Исключение
        Сообщить("Ошибка при открытии Active Directory Provider: " + ОписаниеОшибки());
        Возврат "не удалось получить пользователя домена";
    КонецПопытки;
     
    КомандаАДО.ActiveConnection = СоединениеАДО;
     
    Попытка
        RootDSE = ПолучитьCOMОбъект("LDAP://RootDSE");
    Исключение
        Сообщить("Ошибка ПолучитьCOMОбъект(LDAP://RootDSE): " + ОписаниеОшибки());
        Возврат "не удалось получить пользователя домена";
    КонецПопытки;
     
    ТекущийДомен = RootDSE.Get("defaultNamingContext");
    Сообщить("ТекущийДомен: " + ТекущийДомен);
     
    Попытка
        ОбъектТекущегоДомена = ПолучитьCOMОбъект("LDAP://" + ТекущийДомен); 
    Исключение
        Сообщить("Ошибка ПолучитьCOMОбъект "+"LDAP://" + ТекущийДомен+": " + ОписаниеОшибки());
        Возврат "не удалось получить пользователя домена";
    КонецПопытки;
          
    ДоменноеИмя = "UserTest";
    
    //Фильтр = "(&(objectCategory=person)(objectClass=user))";
    
    КомандаАДО.CommandText = "SEL ECT ADsPath,userAccountControl,displayName,sAMAccountName,Mail,givenName,sn,telephoneNumber FR OM 'LDAP://"+"Syn.local"+"' WHERE objectClass='"+"user"+"'"+" and sAMAccountName='"+ДоменноеИмя+"'";    
    КомандаАДО.Properties("Page Size").Value     = 100;
    КомандаАДО.Properties("Timeout").Value       = 30;
    КомандаАДО.Properties("Cache Results").Value = Ложь;
        
    Попытка
        ВыборкаАДО = КомандаАДО.Execute();  
    Исключение
        Сообщить("Ошибка Execute(): " + ОписаниеОшибки());
        Возврат "не удалось получить пользователя домена";
    КонецПопытки;    
        
    Пока НЕ ВыборкаАДО.EOF Цикл
         
        Если ВыборкаАДО.Fields("userAccountControl").Value = 514 ИЛИ
            ВыборкаАДО.Fields("userAccountControl").Value = 546 ИЛИ
            ВыборкаАДО.Fields("userAccountControl").Value = 66050 Тогда
            
        Иначе
               Если НЕ ЗначениеЗаполнено(СокрЛП(ВыборкаАДО.Fields("telephoneNumber").Value)) Тогда
                
                ВыборкаАДО.Fields("telephoneNumber").Value = "12345";
                                        
            КонецЕсли;    
            
        КонецЕсли;
         
        ВыборкаАДО.MoveNext();
                
    КонецЦикла;
     
    ВыборкаАДО.Close();
    СоединениеАДО.Close();    
    


Показать
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 81 16.10.24 16:25 Сейчас в теме
(1) recordSet нужно формировать в режиме записи данных, по-умолчанию - в режиме чтения.
3. user1934472 16.10.24 16:28 Сейчас в теме
(2) Не подскажите как в данном режиме сделать?
4. nomad_irk 81 16.10.24 17:03 Сейчас в теме
5. user1934472 16.10.24 17:41 Сейчас в теме
(4) Установил перед открытием, но все равно такая же ошибка

СоединениеАДО.Provider = "ADSDSOObject"; 
    СоединениеАДО.Mode = 3;
    Попытка
        СоединениеАДО.Open("Active Directory Provider");    
    Исключение
        Сообщить("Ошибка при открытии Active Directory Provider: " + ОписаниеОшибки());
        Возврат "не удалось получить пользователя домена";
    КонецПопытки;

Показать


Странно еще написано:
Настройте подключение перед открытием с помощью свойств Подключение ionString, Подключение ionTimeout и Mode. Подключение ionString — это свойство по умолчанию объекта Подключение ion.

И в тот же момент в свойстве mode написано:
Свойство Mode можно задать только при закрытии объекта Connection .
Непонятно тогда какой смысл его задавать при закрытии соединения.
6. nomad_irk 81 17.10.24 08:03 Сейчас в теме
(5) Нашел вот чего, может поможет.
7. user1934472 17.10.24 09:47 Сейчас в теме
(6) Попробую, спасибо за помощь.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот