| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Замена inventDimId во всех таблицах
			 
			
			Существует  inventDim.InventdimId == "сан1" 
		
		
		
		
		
		
		
	Как Заменить во всех таблицах в базе этот inventDimId на другой , например сан2? Может сталкивался кто? Пробую через tablesRoot = TreeNode::findNode(\\Data Dictionary\\Tables); Но что-то совсем запуталась...   Заранее спасибо...  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			неужели никто не  сталкивался? 
		
		
		
		
		
		
		
	Да не поверю, что никто ничего такого не изменял значение поля по всем таблицам...;-)  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от fialka
			 
 
			Существует  inventDim.InventdimId == "сан1" 
		
	Как Заменить во всех таблицах в базе этот inventDimId на другой , например сан2? Может сталкивался кто? Пробую через tablesRoot = TreeNode::findNode(\\Data Dictionary\\Tables); Но что-то совсем запуталась...   Заранее спасибо...  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Попробуйте такую обработку. Меняет значения по любому EDT 
		
		
		
		
		
		
		
	X++: //обработка заменяет значения полей в полях таблиц, имеющих определенный расширенный тип. static void changeValueByEDTId() { str oldValue = "сан1"; str newValue = "сан2"; Dictionary dictionary = new Dictionary(); DictTable dictTable; DictField dictField; counter counter; int i, j; #define.EDT_Id(1564) //в скобках указан идентификатор расширенного типа InventDimId, возможно у Вас он другой. void update(TableId _tableId, FieldId _fieldId) { Query q = new Query(); QueryBuildDataSource qbds; QueryRun qr; Common common; ; qbds = q.addDataSource(_tableId); qbds.update(true); qbds.addRange(_fieldId).value(strfmt('\"%1\"', oldValue)); qr = new QueryRun(q); while (qr.next()) { common = qr.getNo(1); common.(_fieldId) = newValue; common.doUpdate(); counter++; } } ; ttsbegin; for (i = 1; i <= dictionary.tableCnt(); i++) { dictTable = new DictTable(dictionary.tableCnt2Id(i)); if (!dictTable.isTmp() && !dictTable.isSystemTable() && !dictTable.isView() && !dictTable.isMap()) { for (j = 1; j <= dictTable.fieldCnt(); j++) { dictField = new DictField(dictTable.id(), dictTable.fieldCnt2Id(j)); if (dictField.typeId() == #EDT_Id) { counter = 0; update(dictTable.id(), dictField.id()); if (counter) info(strfmt("Обработана таблица %1 поле %2 <%3> записей", dictTable.name(), dictField.name(), counter)); } } } } ttscommit; info(strfmt('Проведена замена значения %1 на %2', oldValue, newValue)); }  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: mazzy (5), miklenew (1), Sergey Petrov (1). | |
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Member 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А чем вас не устроил 
		
		
		
		
		
		
			inventDim.renamePrimaryKey(); ? 
				__________________ 
		
		
		
		
	С уважением, glibs®  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Administrator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Только, скорее всего, не renamePrimaryKey(), а merge(). В смысле, если такая комбинация аналитик уже существует и где-то используется, то делать надо merge(), предварительно прочитав в System documentation, как это работает и чем это грозит. Особенно обратите внимание на вот это: 
		
		
		
		
		
		
			Цитата: 
	
		
			A duplicate key condition during the merge causes a runtime error and a ttsabort.
		
	 
				__________________ 
		
		
		
		
	Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: belugin (3), NetBus (1). | |
| Теги | 
| aot, inventdim, reflection, renameprimarykey, законченный пример, отражение, таблица | 
| 
	
	 | 
	
		
  |