Текущий объект Recordset не поддерживает обновление. Отправка через com в AD
Необходимо в AD заполнять номера телефонов. Тестирую на одном пользователе. Вылетает ошибка:
Произошла исключительная ситуация (ADODB.Field): Текущий объект Recordset не поддерживает обновление. Это связано с ограничением поставщика или с выбранным типом блокировки.
Подскажите что не так?
Ошибка возникает в моменте:
ВыборкаАДО.Fields("telephoneNumber").Value = "12345";
Произошла исключительная ситуация (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();
ПоказатьОтветы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(4) Установил перед открытием, но все равно такая же ошибка
Странно еще написано:
Настройте подключение перед открытием с помощью свойств Подключение ionString, Подключение ionTimeout и Mode. Подключение ionString — это свойство по умолчанию объекта Подключение ion.
И в тот же момент в свойстве mode написано:
Свойство Mode можно задать только при закрытии объекта Connection .
Непонятно тогда какой смысл его задавать при закрытии соединения.
СоединениеАДО.Provider = "ADSDSOObject";
СоединениеАДО.Mode = 3;
Попытка
СоединениеАДО.Open("Active Directory Provider");
Исключение
Сообщить("Ошибка при открытии Active Directory Provider: " + ОписаниеОшибки());
Возврат "не удалось получить пользователя домена";
КонецПопытки;
ПоказатьСтранно еще написано:
Настройте подключение перед открытием с помощью свойств Подключение ionString, Подключение ionTimeout и Mode. Подключение ionString — это свойство по умолчанию объекта Подключение ion.
И в тот же момент в свойстве mode написано:
Свойство Mode можно задать только при закрытии объекта Connection .
Непонятно тогда какой смысл его задавать при закрытии соединения.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот