Слияние баз
Модераторы: m0p3e, edward_K, Модераторы
-
- Местный житель
- Сообщения: 278
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Москва
- Контактная информация:
Слияние баз
Уважаемые коллеги! Очень нужны ваши светлые головы, знания и опыт! Опишу суть проблемы. М.б. получится несколько длинновато, но уж простите.... Дело в следующем. Есть 4 галактические базы, которые долгое время функционировали каждая сама по себе - со своими каталогами (ОС, сотрудники, МЦ и проч.). Так было. Но вот настал момент, что теперь необходимо эти все базы слить в единую. И тут возникает несколько вопросов, как сделать:
1. Как сделать так, чтобы в каждой базе были свои номера офисов - 1, 2, 3, 4. Сейчас у каждой базы он "номер 1". Т.е. Как сделать, чтобы в каждом NRECe всех записей в каждой базе стоял свой номер офиса? Т.е. как в 4-ое слева знакоместо поставить соответствующую цифирь - 1, 2, 3, 4. Например, NREC имеет вид 4001303193855D8Eh. Нужно вместо 4-ой "1" поставить, например, "3" (3 номер офиса).
(прод. следует)
1. Как сделать так, чтобы в каждой базе были свои номера офисов - 1, 2, 3, 4. Сейчас у каждой базы он "номер 1". Т.е. Как сделать, чтобы в каждом NRECe всех записей в каждой базе стоял свой номер офиса? Т.е. как в 4-ое слева знакоместо поставить соответствующую цифирь - 1, 2, 3, 4. Например, NREC имеет вид 4001303193855D8Eh. Нужно вместо 4-ой "1" поставить, например, "3" (3 номер офиса).
(прод. следует)
-
- Местный житель
- Сообщения: 278
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Москва
- Контактная информация:
Re: Слияние баз (продолжение)
2. Если пункт номер 1 можно сделать, то, эту операцию - операцию корректировки NRECа нужно провести по всем записям типа COMP. И здесь есть второй вопрос - как, пробегая по словарю, определить тип записи, т.е. найти записи типа COMP?
Заренне всем благодарен за ЛЮБЫЕ мысли по этому поводу.
PS. CORPO никогда не пользовались и пользоваться не будем, работаем с удаленных терминалах.
Заренне всем благодарен за ЛЮБЫЕ мысли по этому поводу.
PS. CORPO никогда не пользовались и пользоваться не будем, работаем с удаленных терминалах.
Re: Слияние баз (продолжение)
1. "Например, NREC имеет вид 4001303193855D8Eh". Проведём с ним побитовую логическую операцию 4001303193855D8Eh AND 0FFF0FFFFFFFFFFFFh = 4000303193855D8Eh. Проведём с результатом побитовую логическую операцию 4000303193855D8Eh OR 0003000000000000h = 4003303193855D8Eh. Получили то что требовалось. Хотя это вроде очевидные вещи (для программистов).
Подход к делу: СДЕЛАЛ и ... ЗАБЫЛ, а ОНО пусть САМО работает (не люблю возвращаться и повторяться).
-
- Постоянный обитатель
- Сообщения: 173
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Новосибирск
- Контактная информация:
ЛЮБЫЕ мысли по этому поводу
Ко 2 пункту.
(может это прописные истины, но все же)
Есть такая таблица, X$FIELDS называется, за номер 2 по порядку. Вот там и лежат описания всех полей которые встречаются в Галке.
параметр значение
Номер таблицы 2
Имя X$FIELDS
Местоположение DICT
Основной файл Field.adf
Файл-продолжение DICT
№ имя поля заголовок поля тип size
1 XE$CODE Код поля Word 2
2 XE$FILECODE Код таблицы Word 2
3 XE$NAME Идентификатор поля String 21
4 XE$TITLE Заголовок поля String 41
5 XE$DATATYPE Тип поля Byte 1
6 XE$OFFSET Смещение в записи Word 2
7 XE$SIZE Размер поля Word 2
8 XE$DEC Кол. десятичных знаков после точки Byte 1
9 XE$ATTR Атрибуты Word 2
т е интересующие поля имеют тип 17, из таблицы за номером XE$FILECODE, наименование таблицы к которой относится поле можно взять из табл 1 X$FILES.
(может это прописные истины, но все же)
Есть такая таблица, X$FIELDS называется, за номер 2 по порядку. Вот там и лежат описания всех полей которые встречаются в Галке.
параметр значение
Номер таблицы 2
Имя X$FIELDS
Местоположение DICT
Основной файл Field.adf
Файл-продолжение DICT
№ имя поля заголовок поля тип size
1 XE$CODE Код поля Word 2
2 XE$FILECODE Код таблицы Word 2
3 XE$NAME Идентификатор поля String 21
4 XE$TITLE Заголовок поля String 41
5 XE$DATATYPE Тип поля Byte 1
6 XE$OFFSET Смещение в записи Word 2
7 XE$SIZE Размер поля Word 2
8 XE$DEC Кол. десятичных знаков после точки Byte 1
9 XE$ATTR Атрибуты Word 2
т е интересующие поля имеют тип 17, из таблицы за номером XE$FILECODE, наименование таблицы к которой относится поле можно взять из табл 1 X$FILES.
Если долго мучится, что-нибудь получится. :))) ОБЯЗАТЕЛЬНО!!!!!!!
-
- Местный житель
- Сообщения: 278
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Москва
- Контактная информация:
Re: Спасибо
Для Grom. Спасибо, просветил. Правда про побитовые операции я знаю уже лет 30. Одна загвоздочка..Попробуй сделать все что предлагаешь с данными типа COMP (не в теории). Свой первый вопрос снимаю, т.к. знаю как это сделать. Правда не так как предлагает Grom.
Для Lara. Спасибо, Ларочка. С этими двумя таблицами все понятно... Проблема в том, что полоей типа COMP около 1500. И со всеми необходимо делать одну и ту же операцию... Вот как сделать, чобы в VIPe можно было передавать имена, т.е .сделать макроподстановку....
Для Lara. Спасибо, Ларочка. С этими двумя таблицами все понятно... Проблема в том, что полоей типа COMP около 1500. И со всеми необходимо делать одну и ту же операцию... Вот как сделать, чобы в VIPe можно было передавать имена, т.е .сделать макроподстановку....
мысли разбегаются
надеюсь, понимаешь, что сливать-то не все базы придется? поэтому нада для начала их список сформировать.
еще. чтобы не было проблем со ссылочной целостностью можно перед операцией избавиться от dict\relate.adf
еще. чтобы не было проблем со ссылочной целостностью можно перед операцией избавиться от dict\relate.adf
-
- Местный житель
- Сообщения: 278
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Москва
- Контактная информация:
Re: мысли разбегаются
ДА понятно, Coolibin, что не все базы (таблицы).... Всего около 400....
Re: мысли разбегаются
тогда, если ты знаешь как добраться до списка полей по фильтру x$files.XE$DATATYPE=17, тогда просто фейсом сгенери лот (оччень длинный) или набор лотов с командами update.
можно не заниматься побитовой ерундой, а превратить comp - в текст, заменить один символ на нужный номер офиса и обратно превратить в comp
можно не заниматься побитовой ерундой, а превратить comp - в текст, заменить один символ на нужный номер офиса и обратно превратить в comp
Re: мысли разбегаются
update <tabla>
set pole := comp(
substr(string(pole),1,3)
+'новый номер'
+substr(string(pole,5,20)))
количество команд будет равно количеству полей из x$fields
можно в принципе сгенерить один апдейт на все комп-поля таблицы. тада будет по количеству таблиц.
set pole := comp(
substr(string(pole),1,3)
+'новый номер'
+substr(string(pole,5,20)))
количество команд будет равно количеству полей из x$fields
можно в принципе сгенерить один апдейт на все комп-поля таблицы. тада будет по количеству таблиц.
-
- Местный житель
- Сообщения: 278
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Москва
- Контактная информация:
Re: мысли разбегаются
Спасибо за участие....
Re: мысли разбегаются
Всё немножко посложнее - никто не обещал уникальности значений nrec по всем таблицам базы
Re: мысли разбегаются
Dkms, это ты о чем?
Re: Dkms, это ты о чем?
Об уникальности значений в полях nrec.