Имя: Пароль:
1C
 
Текущий объект Recordset не поддерживает обновление. Отправка через com в AD
0 Lazzz
 
17.10.24
07:50
Необходимо в 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 = "SELECT ADsPath,userAccountControl,displayName,sAMAccountName,Mail,givenName,sn,telephoneNumber FROM '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();
1 Волшебник
 
17.10.24
07:49
КомандаАДО = "UPDATE ..."
2 osa1C
 
17.10.24
09:08
(1) Станислав, как можно форматировать программный код как в (0)? Для меня есть такая возможность, или это только для модераторов?
3 Мультук
 
17.10.24
09:13
(2)

см рис
4 Волшебник
 
17.10.24
09:36
(2) тег PRE
5 osa1C
 
17.10.24
09:47
(3) (4) благодарю
6 Lazzz
 
17.10.24
09:53
(1) Не очень понял как это использовать. Это свойство CommandText Должно быть = "Update ..." или что то другое?
7 Волшебник
 
17.10.24
10:00