четверг, 26 апреля 2012 г.

Переход

Года три назад решили перейти на новую версию "АС-Библиотека-3" 3.3.58. Технологий перехода много, но для начала выбрали самую простую - через выгрузку записей из старой версии и загрузку в новую (выдачи, естественно, просто скопировали с помощью "Access"). Однако первая же проверка показала, что записи легли криво. Например, запрос:
select count(*) from All__Delivery D
 where not exists (select B.BookID from All__Book B where B.BookID = D.BookID)
дал кучу записей о выдачах экземпляров, которых нет в БД! И наоборот.
В результате, комбинируя "перезаливку" с реструктуризацией, базу удалось конвертировать. Но вопрос надолго завис в воздухе.
Недавно сделал простой эксперимент, который прояснил ситуацию. Ты можешь повторить его сам, если интересно. Лучше на "Demo" - не придется отматывать назад.
Итак, запускаем "Каталогизатор" и делаем выборку всех записей (в демо их немного). Находим простую (однотомник, при этом должен быть экземпляр, проще говоря, инвентарный номер, поэтому общая часть не подойдёт и экземпляр должен быть один для простоты, общности это не нарушает) и запомним её номер

выгружаем её в файл с сохранением локальных полей.


Далее загружаем "Администратор", подключаемся к базе и делаем два запроса на вкладке "SQL":
select max(DocID) from Demo__Doc


и
select max(BookID) from All__Book


Первый даёт DocID записи с максимальным значением в таблице Demo__Doc, вторая максимальный BookID экземпляра. У меня 81 и 121 соответственно. Запомним их. Теперь откроем "Каталогизатор» -Ом сохранённую в файл запись и откорректируем Mark поля 001, 8993 и 200a так:
001 = z3950://127.0.0.1/Demo/7 - до
001 = z3950://127.0.0.1/Demo/91 - после

8993 = 7 - до
8993 = 131 - после

200a = Почему погиб социализм - до
200a = Почему погиб социализм 1 - после

то есть просто добавим по 10 сверх максимальных (10 не принципиально можно любое). Кроме того добавим к заглавию любой символ (для отличия, иначе получим дублет). Сохраним запись в тот же файл. Сначала жмём на галочку "сохранить", а потом на значке "сохранить в файл все записи" (у нас одна).
Теперь импортируем запись в БД (Demo), не забыв поставить галочку "Сохранять номера записей".


И что стало с номерами?
001 = z3950://127.0.0.1/Demo/91
200a = Почему погиб социализм 1
8993 = 122 вместо 131



то есть, номер записи сохранился, а номер экземпляра стал на единицу больше максимального. А поскольку в "выдачи пишутся" номера экземпляров, а не записей и возникла "каша".