Страница 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.  
