Форум » [x]Harbour » Перенос базы из RU866 в UTF8 ? » Ответить

Перенос базы из RU866 в UTF8 ?

Andrey: Всем привет. Собрался переносить базу из кодировки RU866 в UTF8. Мемо-поля не хочу использовать. Как быть с длинными текстовыми данными ? Допустим адрес в поле С-250, как делать для новой базы с UTF8 ? Заводить два поля для адреса ? А как тогда разбивать и переносить из RU866 в UTF8 ?

Ответов - 62, стр: 1 2 3 4 All

petr707: Вопрос - какой профит хотите получить от этой операции ?

Andrey: DBF нужна для перевода данных на сайт. Показ DBF на странице сайта с помощью руби. Сайт делаю не я. В базе текстовые поля для перевода в UTF8 нужно увеличивать в 2 раза. Если текстовое поле меньше 127 то хорошо. Можно в новой структуре базы в UTF8 допустим было C 40 - делаем С 80. А если поле С-255, как его перевести в UTF8 ? С 500 в DBF нет, значит нужно 2 поля заводить. Для мемо поля делал раньше так UTF8->MADRES := RU866->MADRES. Таких текстовых полей штук 10. Ручками переписывать придётся, т.е. самая простая операция типа так: UTF8->ADRES1 := SUBSTR(RU866->ADRES,1,127) UTF8->ADRES2 := SUBSTR(RU866->ADRES,127) Правильно ? Или ещё что то надо учитывать ? С UTF8 не работал....

petr707: Зачем же рабочую базу с движком обработки корежить ?! Сделайте экспорт ( по расписанию или по кнопке) и пусть "руби" его (этот/эти файлы экспорта) отображает. Полагаю, что ему лучше подсунуть что-то другое , чем dbf в UTF-8 ( скорее всего xml ) Вообще-то это называется "витрина данных"


Andrey: petr707 пишет: Полагаю, что ему лучше подсунуть что-то другое , чем dbf в UTF-8 Нет не лучше. Данные будут на LetoDb в базе, а руби будет отображать данные по запросу, напрямую из DBF. Из-за этого и нужна UTF-8.

SergKis: Andrey Попробуй [pre2] REQUEST HB_CODEPAGE_UTF8EX USE InpDB ALIAS INP VIA 'RU866' NEW nInp := select() dbCreate('OutDB', aStru, 'DBFCDX', .T., 'OUT', , 'UTF8EX') DO WHILE ! ( nInp )->( EOF() ) переносим данные из INP в OUT ( nInp )->( dbSkip(1) ) ENDDO или REQUEST HB_CODEPAGE_UTF8EX ... hb_cdpSelect( "UTF8EX" ) ... USE InpDB ALIAS INP VIA 'RU866' NEW ... [/pre2]

Pasha: Когда-то в харборе была возможность работы с символьными полями длиной до 64к: dbCreate('test', {{"C1", "C", n1, n2}}) поле C1 имело длину n2*256+n1 символов (байт) Затем эту фичу убрали. Но в комментариях она еще осталась: src\rtl\rdd\workarea.c функция hb_waCreateFields /* Too many people reported the behavior with code below as a Clipper compatibility bug so I commented this code, Druzus. #ifdef HB_CLP_STRICT dbFieldInfo.uiLen = uiLen; #else dbFieldInfo.uiLen = uiLen + uiDec * 256; #endif */ Если раскомментировать этот код, и пересобрать харбор (hbrdd.lib), то фича появится вновь

SergKis: поля длиной 500, 1024, 1024*4 создаются и работают

Haz: SergKis пишет: поля длиной 500, 1024, 1024*4 создаются и работают 500 точно, остальное не пробовал проверил DBFCDX - точно все создает

Andrey: SergKis пишет: поля длиной 500, 1024, 1024*4 создаются и работают Блин, вообще не знал... Это получатся только Харбор умеет - работать с текстовыми полями > 255 символами ?

SergKis: SergKis пишет:USE InpDB ALIAS INP VIA 'RU866' NEW USE InpDB ALIAS INP VIA 'DBFCDX' NEW CODEPAGE 'RU866' такое хотел написать

Новичок: Та же беда, хочу все БД перенести с кодировки 866 на UTF8 /*уже ВЕЗДЕ сталкиваюсь с данной проблемой/, следовательно требуется увеличить максимальное количество символов с текстовыми полями (>255). Возможно уже стоит убрать лимит в 255 символов ? *тем более требуется больше символов (конечно в разумных пределах, произведение Война и Мир не собираюсь впихивать ), чтобы не использовать мемо-поля или делить текст на несколько полей

Andrey: Новичок пишет: Возможно уже стоит убрать лимит в 255 символов ? Теперь нет лимита для CDX драйвера, можно больше поле делать. До скольких можно - не знаю. Делал 512.

Новичок: ДА еще, между делом, вопросик, на FOXPRO индексы нет-нет да слетали(причем чаще чем хотелось бы), приходилось постоянно проверять и реиндексировать, как обстоят дела у Harbour с DBFCDX ? к примеру, использую NTX (и ранее на Clipper), практически не слетает.

SergKis: Andrey пишет До скольких можно - не знаю. Делал 512. SergKis пишет поля длиной 500, 1024, 1024*4 создаются и работают Haz пишет проверил DBFCDX - точно все создает

Новичок: Паранойя с CDX пока осталась (не хочу пока по граблям скакать), а для NTX не увеличили ? *надо попробовать, благо сделал прогу которая сама анализирует на наличие БД и его индексов, автоматически создает/восстанавливает

alkresin: Новичок пишет: как обстоят дела у Harbour с DBFCDX ? Ни в Клиппере с версии 5.2, ни в Харборе проблем с CDX нет - отказался от ntx уже лет как 25 назад.

Новичок: *Проблемы были... ну бог с ним Создал 1024, даже 40000 - создало через NTX ! проверил через DBVIEW - вроде пашет, ток 40 000 DBVIEW париться с текстовым полем) попробую программно - запись, считывание, индексацию...

Andrey: А зачем такое большое текстовое поле ? Уж лучше с мемо тогда работать, там вообще ограничение в 2 Гбайта.

Новичок: *просто хотел проверить максимальное ограничение, кстати и какое макс.ограничение ? *да мне лично хватит и 1024 (utf8 1024/2=512), что кстати сейчас и проверяю...

Новичок: Короче проверил (1024) Запись и Считывание работает - 1024 символа При индексации NTX - идет ограничение на 256



полная версия страницы