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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

P.S.
Clipper программу курочить нельзя, нет исходников.
...
Рейтинг: 0 / 0
Опять CODEPAGE
    #33080974
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странный ты какой-то. Тебе дали программу. Какие проблемы сделать пункт меню, при выборе которого и будет запускаться эта программа устанавливая у всех таблиц нужную кодовую страницу? Можешь ее автоматом запускать, если оказалось что 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
Опять CODEPAGE
    #33081179
Трезвый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Clipper часто просто обнуляет кодовую страницу у своих файлов - не только при создании... Я когда-то делал так: при ОТКРЫТИИ баз в VFP проверял кодовую страницу, если нулевая - ставим нужную и работаем...

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

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

Только меня очень удивило (особенно после просмотра исходника CPZERO.PRG), что в фоксе нет стандартного действия для указания страницы, хотя при открытии отдельной базы появляется диалог выбора CP. Странно это возможность есть, а программной реализации нет.
...
Рейтинг: 0 / 0
Опять CODEPAGE
    #33081530
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
10 сообщений из 10, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Опять CODEPAGE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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