Автор | Сообщение |
|
| постоянный участник
|
Пост N: 244
Зарегистрирован: 13.10.05
|
|
Отправлено: 09.10.11 15:15. Заголовок: Кодировка OEM в таблицах
Похоже MINIGUI по умолчанию заточен на кодировку ANSI при работе с базами?Просто настроить на работу с таблицами в кодировке OEM не получится? Надо везде применять конвертацию hb_OemToAnsi ? Или есть другое решение ?
|
|
|
Новых ответов нет
, стр:
1
2
All
[см. все]
|
|
|
| moderator
|
Пост N: 258
Зарегистрирован: 11.02.10
|
|
Отправлено: 09.10.11 16:07. Заголовок: Vlad04 пишет: есть ..
Vlad04 пишет: Да, есть Надо использовать команду USE ( имя базы ) ALIAS ( алиас ) CODEPAGE "RU866" // SHARED NEW предварительно объявив REQUEST HB_CODEPAGE_RU866 Конкретный пример применения есть в папке minigui\samples\Applications\DBFview
|
|
|
|
| постоянный участник
|
Пост N: 245
Зарегистрирован: 13.10.05
|
|
Отправлено: 09.10.11 16:52. Заголовок: Не получается - ни в..
Не получается - ни в программе сделать , ни через DBFview открыть в нормальном виде. В DBFview на выбор в меню пункта Table -> Code Page появляется ListBox, в котором нет вариантов для выбора - <no codepage set>
|
|
|
|
| постоянный участник
|
Пост N: 246
Зарегистрирован: 13.10.05
|
|
Отправлено: 09.10.11 16:58. Заголовок: При переходе в меню ..
При переходе в меню DBFview на русский язык - в ListBox появляется выбор страницы, но фактически изменение не происходит!
|
|
|
|
| moderator
|
Пост N: 259
Зарегистрирован: 11.02.10
|
|
Отправлено: 09.10.11 17:44. Заголовок: Vlad04 пишет: При п..
Vlad04 пишет: цитата: | При переходе в меню DBFview на русский язык - в ListBox появляется выбор страницы |
| Только что проверил пример DBFview - все работает нормально! По шагам: 1) откомпилировал DBFview с помощью батника compile.bat 2) открыл базу в OEM кодировке - вижу кракозябры 3) установил русский язык в программе 4) снова открыл предыдущую базу и нажал на кнопочной панели картинку с буквой "А" - Кодировка 5) выбрал в открывшемся окне пункт меню "Русский DOS (866)" и теперь вижу на экране нормальный русский текст в открытой базе
|
|
|
|
| постоянный участник
|
Пост N: 247
Зарегистрирован: 13.10.05
|
|
Отправлено: 09.10.11 18:18. Заголовок: Я так и делал И еще..
Я так и делал И еще много раз так же и шрифты менял - результат кракозябры Выложил файл (таблицу) http://www.fayloobmennik.net/1051820 Можете взглянуть, может у меня dbf какой-то неправильный - я его средствами хХарбор и создаю.
|
|
|
|
| постоянный участник
|
Пост N: 248
Зарегистрирован: 13.10.05
|
|
Отправлено: 09.10.11 19:18. Заголовок: Вот форма , в которо..
|
|
|
|
| moderator
|
Пост N: 260
Зарегистрирован: 11.02.10
|
|
Отправлено: 09.10.11 20:15. Заголовок: Vlad04 пишет: И еще..
Vlad04 пишет: цитата: | И еще много раз так же и шрифты менял - результат кракозябры |
| Разобрался: Вам надо было закрыть базу после русификации утилиты DBFview, а затем открыть ее снова (еще лучше просто закрыть программу и запустить ее повторно). Проверил на Вашей OEM-базе - все показывает нормально после установки DOS-кодировки
|
|
|
|
| постоянный участник
|
Пост N: 249
Зарегистрирован: 13.10.05
|
|
Отправлено: 10.10.11 08:33. Заголовок: Да, после последних ..
Да, после последних инструкций цитата: | закрыть базу после русификации утилиты DBFview, а затем открыть ее снова |
| все увидел НОРМАЛЬНО. Целое шаманство!. Спасибо А как с примером программы (http://www.fayloobmennik.net/1051975)? Там должна таблица сразу открываться в нужной кодировке.
|
|
|
|
| постоянный участник
|
Пост N: 2541
Зарегистрирован: 12.09.06
|
|
Отправлено: 11.01.13 00:37. Заголовок: Что то не въеду я в ..
Что то не въеду я в перекодировку-открытие баз в МиниГуи.... Открываю базу (866), создаю свою базу в RU1251, переписываю поля из 866 (по условию) и пустая база на выходе, с количеством записей отобранных по условию, т.е. в числовых полях 0, а в текстовых ПУСТО. Вот примерный код... Скрытый текст #include "minigui.ch" REQUEST HB_CODEPAGE_RU1251, HB_CODEPAGE_RU866 REQUEST DBFCDX, DBFFPT FUNCTION CopyNewDbf() ..... SET LANGUAGE TO RUSSIAN // язык SET CODEPAGE TO RUSSIAN // кодовая страница SET Date TO GERMAN RDDSETDEFAULT('DBFCDX') ....... // открытие базы-источника bErrHandler := ErrorBlock( { | VAR | BREAK( VAR ) } ) BEGIN SEQUENCE USE ( cFileDbf2 ) Alias MASTER NEW SHARED CODEPAGE( "RU866" ) RECOVER MsgStop( "БАЗА " + cFileDbf2 + " уже открыта !", "Ошибка !" ) RETURN END SEQUENCE ErrorBlock( bErrHandler ) // создание базы cFileDbf := M->cPath_Pass+M->cFile_Pass AADD( aDbf , {"KODFIRMA" ,"N", 5,0 } ) AADD( aDbf , {"FIRMA" ,"C", 25,0 } ) AADD( aDbf , {"KODFIO" ,"N", 5,0 } ) AADD( aDbf , {"FIO" ,"C", 25,0 } ) AADD( aDbf , {"PUSTO" ,"C", 10,0 } ) DBCreate( cFileDbf, aDbf ) USE ( cFileDbf ) Alias TEMP_PASS NEW EXCLUSIVE SELECT MASTER GOTO TOP DO WHILE !EOF() IF !DELETED() IF MASTER->KMASTER > 0 IF MASTER->KSITE == 1 SELECT TEMP_PASS APPEND BLANK FIELD->KODFIRMA := M->nFirmaKod FIELD->FIRMA := M->cFirmaName FIELD->KFIO := MASTER->KMASTER FIELD->FIO := MASTER->MASTER FIELD->PUSTO := MASTER->PASS ENDIF ENDIF ENDIF SELECT MASTER SKIP ENDDO CLOSE TEMP_PASS .....
| Что не так делаю ? Уже пробовал: USE ( cFileDbf2 ) Alias MASTER CODEPAGE "RU866" NEW EXCLUSIVE DBCreate( cFileDbf, aDbf ) USE ( cFileDbf ) Alias TEMP_PASS CODEPAGE "RU1251" NEW EXCLUSIVE Все бестолку.... Вот результирующий файл - http://files.mail.ru/Y243DW Harbour MiniGUI Extended Edition 2.1.8 - 2012.12.12
|
|
|
|
| |
Пост N: 27
Зарегистрирован: 07.06.08
|
|
Отправлено: 11.01.13 11:04. Заголовок: При чем здесь Minigu..
При чем здесь Minigui, у Вас просто операция присваивания символьной строки, которая никаких перекодировок не делает. Поставьте в операцию присваиванию функцию перекодировки.
|
|
|
|
| постоянный участник
|
Пост N: 2542
Зарегистрирован: 12.09.06
|
|
Отправлено: 11.01.13 12:57. Заголовок: a_sidorov пишет: пр..
a_sidorov пишет: цитата: | просто операция присваивания символьной строки, которая никаких перекодировок не делает. Поставьте в операцию присваиванию функцию перекодировки. |
| Ставил, всё бестолку ! А цифровые поля почему тогда не переписывают ? Базу результата выложил специально ! Там все цифровые поля по нулям, а текстовые - пустышка. Что не так делаю ?
|
|
|
|
|
| Администратор
|
Пост N: 2652
Зарегистрирован: 23.05.05
|
|
Отправлено: 11.01.13 15:19. Заголовок: Andrey пишет: SET C..
Andrey пишет: цитата: | SET CODEPAGE TO RUSSIAN // кодовая страница |
| Эта команда эквивалентна вызову HB_SETCODEPAGE( "RU1251" ) Поскольку для результирующего файла кодовая страница не указана, то используется RU1251 Поскольку для исходного файла указана кодовая страница RU866, данные из него автоматически перекодируются в RU1251. Если результирующий файл тоже должен быть в RU866, при его открытии надо указать эту кодовую страницу. При записи в этот файл данные будут подвергнуты обратной конвертации: RU1251 ->RU866
|
|
|
|
| постоянный участник
|
Пост N: 2543
Зарегистрирован: 12.09.06
|
|
Отправлено: 11.01.13 15:54. Заголовок: Pasha пишет: Поскол..
Pasha пишет: цитата: | Поскольку для результирующего файла кодовая страница не указана, то используется RU1251 |
| Да никакая кодовая страница не используется ! Пустая база создается ! SET LANGUAGE TO RUSSIAN // язык SET CODEPAGE TO RUSSIAN // кодовая страница Делал для МиниГуи - как Григорий рекомендовал ! Т.е. полная засада по БД в МиниГуи... А может это Harbour 3.2 виноват ? Вот сделал пример отдельный - http://files.mail.ru/FM6EIP Пишу в базу: FIELD->FIO := "Test write !" FIELD->PUSTO := REPLICATE("¤",10) Даже и не записывается... Пустые поля и все ! Что то нужно добавить... А что не знаю ?
|
|
|
|
| Администратор
|
Пост N: 2653
Зарегистрирован: 23.05.05
|
|
Отправлено: 11.01.13 16:03. Заголовок: Тогда вопрос не в ко..
Тогда вопрос не в кодовой странице. Файл получается пустой, срабатывает только append. Попробуйте сделать промежуточный dbCommit(), и вывод на экран значений полей результирующего файла сразу после присваивания.
|
|
|
|
| |
Пост N: 28
Зарегистрирован: 07.06.08
|
|
Отправлено: 11.01.13 16:13. Заголовок: Вместо FIELD->FI..
Вместо FIELD->FIO:= нужно писать TEMP_PASS->FIO:=MASTER->MASTER, тогда все работает
|
|
|
|
| Администратор
|
Пост N: 2654
Зарегистрирован: 23.05.05
|
|
Отправлено: 11.01.13 16:21. Заголовок: a_sidorov пишет: Вм..
a_sidorov пишет: цитата: | Вместо FIELD->FIO:= нужно писать TEMP_PASS->FIO:=MASTER->MASTER, тогда все работает |
| Это такая фича minigui, что ли ? Он перекрывает стандартные обозначения ?
|
|
|
|
| |
Пост N: 2599
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.01.13 16:23. Заголовок: Andrey пишет: FIELD..
Andrey пишет: цитата: | FIELD->FIO := "Test write !" |
| Оригинально ;) FIELD это что у вас , алиас ?
|
|
|
|
| Администратор
|
Пост N: 2655
Зарегистрирован: 23.05.05
|
|
Отправлено: 11.01.13 16:34. Заголовок: Dima пишет: Оригина..
Dima пишет: цитата: | Оригинально ;) FIELD это что у вас , алиас ? |
| Не просто оригинально ;) Это таки фича hmg Код FIELD->KODFIRMA := M->nFirmaKod FIELD->FIRMA := M->cFirmaName FIELD->KFIO := MASTER->KMASTER FIELD->FIO := HB_OEMTOANSI(MASTER->MASTER) FIELD->PASSWORD := HB_OEMTOANSI(MASTER->PASS) FIELD->PUSTO := HB_OEMTOANSI(MASTER->PASS) Транслируется препроцессором в _HMG_SYSDATA[404] := "->KODFIRMA := M->nFirmaKod" _HMG_SYSDATA[404] := "->FIRMA := M->cFirmaName" _HMG_SYSDATA[404] := "->KFIO := MASTER->KMASTER" _HMG_SYSDATA[404] := "->FIO := HB_OEMTOANSI(MASTER->MASTER)" _HMG_SYSDATA[404] := "->PASSWORD := HB_OEMTOANSI(MASTER->PASS)" _HMG_SYSDATA[404] := "->PUSTO := HB_OEMTOANSI(MASTER->PASS)" Это неожиданное (мягко говоря) преобразование делает вот эта команда из i_altsysnax.ch: #xcommand FIELD <field>; =>; _HMG_ActiveControlField := <"field">
|
|
|
|
| |
Пост N: 2600
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.01.13 17:14. Заголовок: Pasha Необычно ;)..
Pasha Необычно ;)
|
|
|
|
| |
Пост N: 29
Зарегистрирован: 07.06.08
|
|
Отправлено: 11.01.13 17:23. Заголовок: Это не необычно, это..
Это не необычно, это труба. У меня Field-> на каждой строке, а была идея перевода программ на MINIGUI
|
|
|
Новых ответов нет
, стр:
1
2
All
[см. все]
|
|