Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Опять CODEPAGE / 10 сообщений из 10, страница 1 из 1
23.05.2005, 18:52:27
    #33080817
Starpom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять CODEPAGE
Здравствуйте.

Данные: VFP9, clipper 5.1, базы сетевые.

Задача: Несколько раз в день из базы в clipper'e берутся данные, выборочно. Есть поля с текстом. Все берущиеся базы в 866.

Вопрос: В хелпе прочитал, что к текущей cpodepage(1251) VFP9 переводит автоматом. Ан нет. Не подскажите, что нужно сделать, а то постоянно пользоваться "CPCONVERT" в запросах (и не только) муторно.

Доп.Инфо: Базу открываю в SHARED, пользуюсь SELECT, в сonfig.fpw стоит codepage = 1251.

Заранее спасибо.
...
Рейтинг: 0 / 0
23.05.2005, 18:56:06
    #33080824
St_Alex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять CODEPAGE
Так поставь codepage=866
...
Рейтинг: 0 / 0
23.05.2005, 19:03:17
    #33080840
Starpom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять CODEPAGE
Так основная программа работает с 1251 и 866 мне НЕ нужна.
...
Рейтинг: 0 / 0
23.05.2005, 19:06:23
    #33080848
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять CODEPAGE
У таблиц Clipper по умолчанию вообще не проставлен признак кодовой страницы.

FoxPro автоматом никогда не выставляет признак кодовой страницы. Хотя, при определенных настройках он может спросить (вывести диалог) какой признак кодовой страницы проставить.

В поставке FoxPro есть такая программа CPZERO.PRG находится

(каталог FoxPro)\Tools\CPZERO\CPZERO.PRG

При помощи нее можно выставить нужный признак кодовой страницы

DO CPZERO.PRG WITH "MyTable.dbf",866

На работу программы Clipper - это никак не повлияет. Следует только помнить, что для такой установки необходим единоличный доступ к таблице.

Проверить текущую кодовую старницу таблицы можно после ее открытия функцией

?CPDBF()
...
Рейтинг: 0 / 0
23.05.2005, 19:31:39
    #33080894
Starpom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять CODEPAGE
Да, это помогло (а я думал чего это CPDBF выдает 0).
НО ... эти дурацкие файлы создаются 2-3 раза в месяц clipper'ом (причем в других директориях и естественно с 0 CP). А каждый раз ездить с фоксом и конвертить не могу (далеко), да и в офисе сидят девочки-одуванчик им не "по зубам".

Возможно ли это сделать програмно. Например как-то принудительно при открытии сказать что он в 866 CP?

P.S.
Clipper программу курочить нельзя, нет исходников.
...
Рейтинг: 0 / 0
23.05.2005, 21:01:40
    #33080974
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять CODEPAGE
Странный ты какой-то. Тебе дали программу. Какие проблемы сделать пункт меню, при выборе которого и будет запускаться эта программа устанавливая у всех таблиц нужную кодовую страницу? Можешь ее автоматом запускать, если оказалось что CPDBF()=0. Ну, там обработчик ошибок навесить, ADIR() прикрутить и т.п.

Кстати, из всей это программы по сути нужны только несколько строчек

Код: plaintext
1.
2.
3.
4.
m.fp_in = FOPEN(m.fname, 2 )
* Now poke the codepage id into byte  29 
=FSEEK(m.fp_in, 29 )
=FWRITE(m.fp_in,CHR( 101 ))
=FCLOSE(m.fp_in)

Здесь m.fname - это имя файла. Можно с путем доступа.
CHR(101) - это как раз код 866 кодовой страницы

Все остальное в этой программе различные проверки и настройки.

На всякий случай.

Открыть программу CPZERO.PRG на просмотр можно также как и обычный PRG-файл

Код: plaintext
MODIFY COMMAND (home()+'tools\cpzero\cpzero.prg')
...
Рейтинг: 0 / 0
24.05.2005, 08:20:48
    #33081179
Трезвый
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять CODEPAGE
Clipper часто просто обнуляет кодовую страницу у своих файлов - не только при создании... Я когда-то делал так: при ОТКРЫТИИ баз в VFP проверял кодовую страницу, если нулевая - ставим нужную и работаем...

Нет необходимости в ОТДЕЛЬНОМ пункте меню (хотя можно и сделать...), при траблах (clipper влез, обнулил...) достаточно ПЕРЕЗАПУСТИТЬ программу VFP (на это девочек-одуванчиков хватит :D)
...
Рейтинг: 0 / 0
24.05.2005, 09:11:17
    #33081241
ser57
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять CODEPAGE
Напиши маленькую процедурку, в которой проверяй наличие в заголовке открываемой таблицы признака кодовой страницы. Сlipper При обработке таблицы файл признака запирает его.
Все фоксовские таблицы его имеют и поэтому этот разряд заголовка заполнен, если разряд не заполнен - это таблица DOC проставь CP866. За основу возьми код CPZERO.PRG. Если название таблицы известно, то посмотри в сторону команды COPY TO .....
Кстати, а кто тебе запрещает задачу решить наоборот - после формирования таблицы предназначенной для обработки в фоксе -прописать там сразу после ее закрытия признак кодовой таблицы 866. Пример тебе дан выше.
...
Рейтинг: 0 / 0
24.05.2005, 10:20:35
    #33081381
Starpom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять CODEPAGE
Всем большое спасибо.

Решил без меню, просто при открытии проверить и переоткрыть.
Жалко
Код: plaintext
copy to  
мне не подходит.

Только меня очень удивило (особенно после просмотра исходника CPZERO.PRG), что в фоксе нет стандартного действия для указания страницы, хотя при открытии отдельной базы появляется диалог выбора CP. Странно это возможность есть, а программной реализации нет.
...
Рейтинг: 0 / 0
24.05.2005, 11:03:26
    #33081530
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять CODEPAGE
StarpomТолько меня очень удивило (особенно после просмотра исходника CPZERO.PRG), что в фоксе нет стандартного действия для указания страницы, хотя при открытии отдельной базы появляется диалог выбора CP. Странно это возможность есть, а программной реализации нет.
А как ты думаешь, ЧТО делает этот диалог? Он делает все то же самое. При этом диалог возникает только при выполнении следующих условий:

Включена настройка SET CPDIALOG ON

Таблица открывается в режиме EXCLUSIVE

В заголовке таблицы нет признака кодовой страницы

Т.е., по сути, это примерно такая последовательность действий:

Код: plaintext
1.
2.
3.
4.
5.
USE MyTable EXCLUSIVE
IF CPDBF()= 0 
	USE IN MyTable
	DO CPZERO.PRG WITH "MyTable.dbf", 866 
ENDIF
USE MyTable EXCLUSIVE

Автоматизировать это невозможно! На каком основании программа должна модифицировать структуру заголовка таблицы? А если очень надо, то вот тебе инструмент (программа CPZERO.PRG)
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Опять CODEPAGE / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]