|
26.07.2007, 15:47 | #1 |
Участник
|
Замена inventDimId во всех таблицах
Существует inventDim.InventdimId == "сан1"
Как Заменить во всех таблицах в базе этот inventDimId на другой , например сан2? Может сталкивался кто? Пробую через tablesRoot = TreeNode::findNode(\\Data Dictionary\\Tables); Но что-то совсем запуталась... Заранее спасибо... |
|
26.07.2007, 15:58 | #2 |
Участник
|
неужели никто не сталкивался?
Да не поверю, что никто ничего такого не изменял значение поля по всем таблицам...;-) |
|
26.07.2007, 16:00 | #3 |
Участник
|
Цитата:
Сообщение от fialka
Существует inventDim.InventdimId == "сан1"
Как Заменить во всех таблицах в базе этот inventDimId на другой , например сан2? Может сталкивался кто? Пробую через tablesRoot = TreeNode::findNode(\\Data Dictionary\\Tables); Но что-то совсем запуталась... Заранее спасибо... |
|
26.07.2007, 16:02 | #4 |
Участник
|
|
|
26.07.2007, 16:14 | #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). |
26.07.2007, 16:55 | #6 |
Участник
|
|
|
27.07.2007, 00:17 | #7 |
Member
|
А чем вас не устроил
inventDim.renamePrimaryKey(); ?
__________________
С уважением, glibs® |
|
20.08.2007, 16:29 | #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, законченный пример, отражение, таблица |
|
|