powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите с USE и кодировкой
13 сообщений из 13, страница 1 из 1
Помогите с USE и кодировкой
    #33586339
jonvtur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) при открытии таблицы в VFP9 SP1 у меня выдает ошибку, что "таблица нарушена востановите ее". Но в самом деле она выглядит отлично. Через VFP6 FP 2.6 все нормально - открыта?
2) есть 2 таблицы одна 1251 кодировка - в которую надо записать данные, а другая 866 кодировка из которой АППЕНДЮ все записи получается текстовое поле полный "______________ _. _."
сделал это CPZERO!
USE sprav exclusive
ZAP
CPCONVERT(1251,866,fio)
APPEND FROM p+'tel\tel'
do Tools\CPZERO\cpzero.prg with 'c:\t\sprav.dbf',1251

Но есть ли другой способ????
за ранее благодарен
...
Рейтинг: 0 / 0
Помогите с USE и кодировкой
    #33587806
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jonvtur1) при открытии таблицы в VFP9 SP1 у меня выдает ошибку, что "таблица нарушена востановите ее". Но в самом деле она выглядит отлично. Через VFP6 FP 2.6 все нормально - открыта?
Это надо понимать буквально . Значит структура действительно нарушена.

Дело в том, что в VFP9 ужесточили требования к контролю структуры. Например, достаточно распространенное повреждение структуры - это несоответствие реального (физического) количества записей и того количества, которое записано в заголовке таблицы.

Если в VFP6 или FPD2.6 таблица открывается нормально, то создайте таблицу заново и через APPEND FROM перекачайте в нее данные.

Select-SQL или COPY TO здесь не поможет. При таких глобальных перекачках для скорости файл dbf может просто копироваться. Т.е. скопируются и все ошибки.

Можно, конечно, снизить или отключить уровень контроля структуры командой

SET TABLEVALIDATE

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

jonvtur2) есть 2 таблицы одна 1251 кодировка - в которую надо записать данные, а другая 866 кодировка из которой АППЕНДЮ все записи получается текстовое поле полный "______________ _. _."
сделал это CPZERO!
USE sprav exclusive
ZAP
CPCONVERT(1251,866,fio)
APPEND FROM p+'tel\tel'
do Tools\CPZERO\cpzero.prg with 'c:\t\sprav.dbf',1251

Но есть ли другой способ????
за ранее благодарен
FoxPro и сам автоматически переведет данные из разных кодовых страниц. Но для этого должны выполняться следующие условия:

1) Сами таблицы должны иметь признак кодовой страницы.

Код: plaintext
1.
2.
USE MyTab
?CPDBF()

Должно быть значение отличное от 0. Для DOS-таблиц - 866, для Windows-таблиц - 1251.

В версии FPD2.0 этот признак вообще не проставлялся. Поэтому надо принудительно поставить кодовую страницу 866 для таких таблиц. На работу DOS-приложений это никак не повлияет.

2) Должен быть файл конфигурации CONFIG.FPW (это обычный текстовый файл) со строкой

CODEPAGE=1251

Как именно подключить этот файл читай здесь

Часть букв при вводе заменяются латинскими

Если все сделано правильно, то в среде FoxPro команда

?CPCURRENT()

должна вернуть 1251

После этого, уже можно не обращать внимания на кодовую страницу таблиц. Конвертация кодовых страниц будет происходить автоматически.
...
Рейтинг: 0 / 0
Помогите с USE и кодировкой
    #33596030
jonvtur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но у меня при открытии таблиц DOS команда CPDBF() возвращает 0 и поэтому в таблицу с CODEPAGE=1251 текстовые поля APPENDятся и в дальнейшем отображаюстя в форме в неверной кодировке!
попытаюсь объяснить:

есть tel.dbf - dos
есть spr.dbf(1251)

пишу:
use spr
zap
append from tel

в таблице spr команда ?cpdbf() выдавала 1251, после Append ?cpdbf() выдает 866. Поэтому при выводе на экран (brow) получается текстовые поля "________. _. _"
...
Рейтинг: 0 / 0
Помогите с USE и кодировкой
    #33596659
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Необходимо при помощи CPZERO.PRG установить 866 кодовую странцу для tel.dbf. На работу DOS-приложений это никак не повлияет.

2) Необходим файл конфигурации Confog.fpw со строкой CODEPAGE=1251
...
Рейтинг: 0 / 0
Помогите с USE и кодировкой
    #33596681
jonvtur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ1) Необходимо при помощи CPZERO.PRG установить 866 кодовую странцу для tel.dbf. На работу DOS-приложений это никак не повлияет.

2) Необходим файл конфигурации Confog.fpw со строкой CODEPAGE=1251
А если в данный момент у меня tel используется другим приложением DOS что произойдет? Не нарушатся ли индексы при закрытии работающего DOS-приложения?
...
Рейтинг: 0 / 0
Помогите с USE и кодировкой
    #33596816
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jonvturА если в данный момент у меня tel используется другим приложением DOS что произойдет? Не нарушатся ли индексы при закрытии работающего DOS-приложения?
Могут и нарушится. Дождись перерыва в работе и установи признак 866 кодовой страницы.

Это разовая операция. Как правило, DOS-приложения игнорируют 29 байт (где записан этот признак). Хотя, если приложение написано на Clipper, то, время от времени, этот байт может очищаться при выполнении некоторых операций Clipper.

Если эта таблица открыта в режиме Shared, то можно перед закачкой данных создать копию таблиц (только НЕ средствами FoxPro). В этой копии установить признак 866 кодовой страницы и работать уже с этой копией.

Скопировать можно, используя, например, объект FileSysytemObject

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
lcFile2Copy="C:\A FSO Testing\javascript_lessons.jpg" && что копируем
lcWhere2Copy="C:\A_test\javascript_lessons1.jpg"      && куда копируем
llOverWrite = .T.
loFSO = CREATEOBJECT('Scripting.FileSystemObject')
If loFSO.FileExists(lcFile2Copy)
   loTFile=loFSO.GetFile(lcFile2Copy)
   loTFile.Copy(lcWhere2Copy,llOverWrite)
Endif
Release loFSO

Подробнее об объекте FileSystemObject можно почитать здесь

http://kodu.neti.ee/~juri4/vfpplus/vbs_fso_01_ru.htm
...
Рейтинг: 0 / 0
Помогите с USE и кодировкой
    #33596855
jonvtur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот именно что эту таблицу у меня использует Clipper при том что ее используют непрерывно сразу несколько пользователей!

А может мне в рабочей области своей проги создать файлы такое же при открытии их zap-ить и командой copy file копировать затем закрывать файлы и уже cpzero.prg исправлять кодовую страницу. И в дальнейшем работать с новыми таблицами?
...
Рейтинг: 0 / 0
Помогите с USE и кодировкой
    #33596914
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jonvturА может мне в рабочей области своей проги создать файлы такое же при открытии их zap-ить и командой copy file копировать затем закрывать файлы и уже cpzero.prg исправлять кодовую страницу. И в дальнейшем работать с новыми таблицами?
Попробуй. Может и получиться... Хотя, COPY FILE - не будет работать с открытыми таблицами. Попробуй сделать копирование DOS-таблиц таким способом:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
USE (p+'tel\tel.dbf') SHARED
COPY TO telCopy.dbf

CLOSE TABLE ALL
DO CPZERO.PRG WITH "telCopy.dbf", 866 

USE sprav exclusive
ZAP
APPEND FROM telCopy.dbf
Не проверял, но вроде это должно работать.

Здесь принципиально важно установить признак кодовой страницы ДО операций чтения/записи.
...
Рейтинг: 0 / 0
Помогите с USE и кодировкой
    #33597003
jonvtur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо Владимир!
Запарка получилась из-за того что в оболочке Фокса, после очистки задается вопрос в какой кодировке следует открыть файл. При компиляции в ЕГЗешнике запрос не выводится а сразу переходит на выполнение команды cpzero!
...
Рейтинг: 0 / 0
Помогите с USE и кодировкой
    #33597039
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос задается ТОЛЬКО еслии вы открываете таблицу exclusive
С уважением, Алексей
...
Рейтинг: 0 / 0
Помогите с USE и кодировкой
    #33598228
CodePage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все-таки, наверное, не есть гуд прописывать что-то в заголовке файла, тем более, что файл может быть заблокирован другими пользователями. Не правильнее ли при открытии файла проверять кодовую страницу, если она есть явно прописанная - то повезло, если нет, что при чтении/записи использовать CPCONVERT? Например так:

Код: plaintext
1.
2.
3.
4.
5.
6.
IF CPDBF()= 0 
   insert into aaa (a,b) values (cpconvert( 1251 , 866 ,ca),cpconvert( 1251 , 866 ,cb)
ELSE
   insert into aaa (a,b) values (ca,cb)
ENDIF 

...
Рейтинг: 0 / 0
Помогите с USE и кодировкой
    #33598303
jonvtur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во первых в проекте мне приходится открывать таблицы EXCLUSIVE чтобы их очистить и упаковать!

И использую не открытие таблицы а лишь всего добавляю из имеющихся,
поэтому мне нереально добавлять цикл для проверки кодовой страницы!

Пробывал извращался с исходной таблицей (в которую добавляю) и cp-конвертил поля все равно извращение получается!
дошел до того: создал таблицы локально, скопировал в них из имеющихся (copy to) затем cpzero поменял кодовую страницу на 866 и уже из них я добавлял в .dbf (с кодировкой 1251), с которой в дальнейшем работаю!
на экране все прикрасно видится!


Большое спасибо всем, кто принял участие в разборе, казалось бы небольшой проблемы!
...
Рейтинг: 0 / 0
Помогите с USE и кодировкой
    #33698730
petkata
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуй OEMTOANSI().
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите с USE и кодировкой
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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