Страница 1 из 1

Слияние баз

Добавлено: 20 авг 2002, 11:50
ALEKS123
Уважаемые коллеги! Очень нужны ваши светлые головы, знания и опыт! Опишу суть проблемы. М.б. получится несколько длинновато, но уж простите.... Дело в следующем. Есть 4 галактические базы, которые долгое время функционировали каждая сама по себе - со своими каталогами (ОС, сотрудники, МЦ и проч.). Так было. Но вот настал момент, что теперь необходимо эти все базы слить в единую. И тут возникает несколько вопросов, как сделать:
1. Как сделать так, чтобы в каждой базе были свои номера офисов - 1, 2, 3, 4. Сейчас у каждой базы он "номер 1". Т.е. Как сделать, чтобы в каждом NRECe всех записей в каждой базе стоял свой номер офиса? Т.е. как в 4-ое слева знакоместо поставить соответствующую цифирь - 1, 2, 3, 4. Например, NREC имеет вид 4001303193855D8Eh. Нужно вместо 4-ой "1" поставить, например, "3" (3 номер офиса).
(прод. следует)

Re: Слияние баз (продолжение)

Добавлено: 20 авг 2002, 11:54
ALEKS123
2. Если пункт номер 1 можно сделать, то, эту операцию - операцию корректировки NRECа нужно провести по всем записям типа COMP. И здесь есть второй вопрос - как, пробегая по словарю, определить тип записи, т.е. найти записи типа COMP?

Заренне всем благодарен за ЛЮБЫЕ мысли по этому поводу.

PS. CORPO никогда не пользовались и пользоваться не будем, работаем с удаленных терминалах.

Re: Слияние баз (продолжение)

Добавлено: 20 авг 2002, 18:56
Grom
1. "Например, NREC имеет вид 4001303193855D8Eh". Проведём с ним побитовую логическую операцию 4001303193855D8Eh AND 0FFF0FFFFFFFFFFFFh = 4000303193855D8Eh. Проведём с результатом побитовую логическую операцию 4000303193855D8Eh OR 0003000000000000h = 4003303193855D8Eh. Получили то что требовалось. Хотя это вроде очевидные вещи (для программистов). ;)

ЛЮБЫЕ мысли по этому поводу

Добавлено: 20 авг 2002, 20:33
LARA
Ко 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.

Re: Спасибо

Добавлено: 21 авг 2002, 11:04
ALEKS123
Для Grom. Спасибо, просветил. Правда про побитовые операции я знаю уже лет 30. Одна загвоздочка..Попробуй сделать все что предлагаешь с данными типа COMP (не в теории). Свой первый вопрос снимаю, т.к. знаю как это сделать. Правда не так как предлагает Grom.
Для Lara. Спасибо, Ларочка. С этими двумя таблицами все понятно... Проблема в том, что полоей типа COMP около 1500. И со всеми необходимо делать одну и ту же операцию... Вот как сделать, чобы в VIPe можно было передавать имена, т.е .сделать макроподстановку....

мысли разбегаются

Добавлено: 21 авг 2002, 17:28
coolibin
надеюсь, понимаешь, что сливать-то не все базы придется? поэтому нада для начала их список сформировать.
еще. чтобы не было проблем со ссылочной целостностью можно перед операцией избавиться от dict\relate.adf

Re: мысли разбегаются

Добавлено: 21 авг 2002, 19:53
ALEKS123
ДА понятно, Coolibin, что не все базы (таблицы).... Всего около 400....

Re: мысли разбегаются

Добавлено: 21 авг 2002, 20:22
coolibin
тогда, если ты знаешь как добраться до списка полей по фильтру x$files.XE$DATATYPE=17, тогда просто фейсом сгенери лот (оччень длинный) или набор лотов с командами update.
можно не заниматься побитовой ерундой, а превратить comp - в текст, заменить один символ на нужный номер офиса и обратно превратить в comp

Re: мысли разбегаются

Добавлено: 21 авг 2002, 20:38
coolibin
update <tabla>
set pole := comp(
substr(string(pole),1,3)
+'новый номер'
+substr(string(pole,5,20)))
количество команд будет равно количеству полей из x$fields
можно в принципе сгенерить один апдейт на все комп-поля таблицы. тада будет по количеству таблиц.

Re: мысли разбегаются

Добавлено: 22 авг 2002, 10:58
ALEKS123
Спасибо за участие....

Re: мысли разбегаются

Добавлено: 23 авг 2002, 14:00
dkms
Всё немножко посложнее - никто не обещал уникальности значений nrec по всем таблицам базы :(

Re: мысли разбегаются

Добавлено: 23 авг 2002, 16:12
coolibin
Dkms, это ты о чем?

Re: Dkms, это ты о чем?

Добавлено: 30 авг 2002, 12:35
dkms
Об уникальности значений в полях nrec. :o