Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Строка подключения / 25 сообщений из 25, страница 1 из 1
19.02.2009, 17:38
    #35828076
The Dim!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строка подключения
Доброго времяни суток.

Люди добрые, подскажите пожалусто, как можно в строке подключения OBDC драйвера(DRIVER={Microsoft Visual FoxPro Driver}) указать нужную кодовую страницу.
В таблице неуказана кодовая страница. 29 поле = 0.
Кодировка таблицы DOSовская.
...
Рейтинг: 0 / 0
19.02.2009, 18:06
    #35828171
Строка подключения
The Dim!Доброго времяни суток.

Люди добрые, подскажите пожалусто, как можно в строке подключения OBDC драйвера(DRIVER={Microsoft Visual FoxPro Driver}) указать нужную кодовую страницу.
В таблице неуказана кодовая страница. 29 поле = 0.
Кодировка таблицы DOSовская.
Никак. Впишите в этот байт нужное значение.
...
Рейтинг: 0 / 0
19.02.2009, 19:05
    #35828289
The Dim!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строка подключения
Х.м. тогда, возможно, посоветуете драйвер или какой-то механизм который позволяет работать с таблице в нужной мне кодировке, которую можно указать программно.

Откуда тогда драйвер берёт кодовую страницу, из региональных настроек операционой системы?

Кроме того, в топиках этой ветки форума, приводится масса примеров чтения из таблиц с указнием их кодовых страниц, как тогда сам Fox работает с таблицами позволяя такое?
...
Рейтинг: 0 / 0
19.02.2009, 20:16
    #35828408
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строка подключения
Если речь идет о файлах DBF, созданных в приложениях под DOS, то можно попробовать использовать старые драйвера

{Microsoft dBase Driver (*.dbf)}

Примеры строк подключения можно посмотреть здесь

Connection strings for DBF / FoxPro

Дело в том, что если кодовая страница файла DBF не указана явно, то FoxPro предполагает, что данные в нем записаны в текущей кодовой странице среды FoxPro.

Весь вопрос в том, какая именно кодовая страница среды FoxPro устанавливается. Точнее, откуда она берется.

В русскоязычной локализации Windows при использовании старых драйверов для DOS-версий будет использоваться 866 кодовая страница. Что, в данном случае, и требуется. А для Windows-версий (Visual FoxPro) используется кодовая страница 1251.
...
Рейтинг: 0 / 0
19.02.2009, 22:12
    #35828525
The Dim!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строка подключения
ВладимирМВесь вопрос в том, какая именно кодовая страница среды FoxPro устанавливается. Точнее, откуда она берется.

В русскоязычной локализации Windows при использовании старых драйверов для DOS-версий будет использоваться 866 кодовая страница. Что, в данном случае, и требуется. А для Windows-версий (Visual FoxPro) используется кодовая страница 1251.

А как узнать какая кодовая страница установлена в среде Fox Pro и можно ли изменить эту кодовую страницу?

Если я правильно Вас понял, то Вы имеете в виду что кодовая страница берется из региональных настроек операционной системы(тогда из региональных настроек должны подтягиваться и разделители в датах, числах и их форматы и т.д... тоесть всё то что называется "collation sequence").
Раз нельзя драйверу принудительно(в строке подключения или как-то иначе) указать кодовую страницу, то прочитать таблицу с кодовой страницей отличной от текущей кодовой страницы операционки непредставляется возможным, если только в самой таблице явно не указана кодовая страница.
Так получается?

Но почему и главное как программамы типа "Налогоплатильщик ЮЛ" и той же 1С(под рукой ничего другово в формате Fox Pro нету), в таблицах которых не указана кодовая страница(29 байт = 0) удаётся правильно отображать их содержимое.
Вот сейчас пробовал менять значение 29 байта на разные кодовые страницы и несмотря на это, указанные программы корректно отображали содержимое соответствующих таблиц. А вот если я подключался серез ODBC драйвера(из MS SQL сервера) то результатом был вывод иероглифов в том случае когда содержимое 29 байта не соответствовало той кодовой странице в которой в действительности кодировались символы...
...
Рейтинг: 0 / 0
19.02.2009, 22:38
    #35828555
Строка подключения
The Dim!Если я правильно Вас понял, то Вы имеете в виду что кодовая страница берется из региональных настроек операционной системы(тогда из региональных настроек должны подтягиваться и разделители в датах, числах и их форматы и т.д...
Фокс может это подтягивать. Но может и не подтягивать. :)
тоесть всё то что называется "collation sequence").
С каких это пор последовательности/порядки сортировки (sequence) вдруг стали связаны с разделителями? :)

Раз нельзя драйверу принудительно(в строке подключения или как-то иначе) указать кодовую страницу, то прочитать таблицу с кодовой страницей отличной от текущей кодовой страницы операционки непредставляется возможным, если только в самой таблице явно не указана кодовая страница.
Так получается?

Вроде так.

Но почему и главное как программамы типа "Налогоплатильщик ЮЛ" и той же 1С(под рукой ничего другово в формате Fox Pro нету), в таблицах которых не указана кодовая страница(29 байт = 0) удаётся правильно отображать их содержимое.

1. 1С к фоксу отношения не имеет и пишет/читает по-своему.
2. DBF - далеко не всегда читается фоксом. Форматов под одним расширением несколько и они не полностью совместимы.

Вот сейчас пробовал менять значение 29 байта на разные кодовые страницы и несмотря на это, указанные программы корректно отображали содержимое соответствующих таблиц.
Потому, что они на него вообще внимания не обращают. Они считают, что все такие файлы в какой-то одной кодировке.
А вот если я подключался серез ODBC драйвера(из MS SQL сервера) то результатом был вывод иероглифов в том случае когда содержимое 29 байта не соответствовало той кодовой странице в которой в действительности кодировались символы...
Так и должно быть.
...
Рейтинг: 0 / 0
19.02.2009, 23:13
    #35828584
The Dim!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строка подключения
Раз задача не решается в лоб, то попробуем зайти с другой стороны :)

Фокса у меня нет, и с ним никогда не работал. Есть MS SQL Server и провайдер(какой посоветуете использовать, в основном буду читать данные и очень редко создавать таблицы и добавлять в них данные) для фоксовых таблиц.

Возможно ли:
1. Подключившись через ODBC провайдер установить кодовую страницу, тоесть изменить значение 29 байта на нужное мне. В таком случае ненужно будет указывать кодовую страницу в строке подключения.
2. Опять же подключившись через ODBC провайдера перекодировать всю таблицу из одной кодировки в другую.

Провайдер VPF позволяет выполнять, по средствам ExecScript, команды фокса может можно как-то выполнить мои задачи?
...
Рейтинг: 0 / 0
20.02.2009, 10:00
    #35828964
Строка подключения
The Dim!Провайдер VPF позволяет выполнять, по средствам ExecScript, команды фокса может можно как-то выполнить мои задачи?
Execsript и прочее может VFP OLEDB provider. Главное не зацикливаться на ODBC.
...
Рейтинг: 0 / 0
20.02.2009, 11:01
    #35829147
The Dim!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строка подключения
А подскажите, пожалусто, команды VPF которые позваляют установть кодовуюс страницу в dbfке.
...
Рейтинг: 0 / 0
20.02.2009, 11:12
    #35829186
Строка подключения
The Dim!А подскажите, пожалусто, команды VPF которые позваляют установть кодовуюс страницу в dbfке.
Код: plaintext
do cpzero with <file>, <codepage>
...
Рейтинг: 0 / 0
20.02.2009, 11:26
    #35829239
The Dim!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строка подключения
проходящий.The Dim!А подскажите, пожалусто, команды VPF которые позваляют установть кодовуюс страницу в dbfке.
Код: plaintext
do cpzero with <file>, <codepage>


Уважаемый проходящий.
Иж извените за назойливость, а это "do cpzero with <file>, <codepage>" сохранит в 29 байте dbfки код нужной мне кодовой страницы. Так ?

И ещё вопрос.
Если в dbf указана кодовая страница, то преобразование кодировок происходит автоматичеси. Тоесть, драйвер перекодирует содержимое таблицы к текущей кодой странице cp1251 Win.
Я правильно понимаю ?
...
Рейтинг: 0 / 0
20.02.2009, 11:41
    #35829283
Строка подключения
The Dim!проходящий.The Dim!А подскажите, пожалусто, команды VPF которые позваляют установть кодовуюс страницу в dbfке.
Код: plaintext
do cpzero with <file>, <codepage>


Уважаемый проходящий.
Иж извените за назойливость, а это "do cpzero with <file>, <codepage>" сохранит в 29 байте dbfки код нужной мне кодовой страницы. Так ?

А есть другие варианты? :) Или в моем ответе удалось прочитать что-то между строк? Но там всего одна строка, откуда междустрочие?! :)
На всякий случай: cpzero не встроенная команда, а программа cpzero.prg, которая идет в поставке с фоксом. А командой является do, запускающая на исполнение программу cpzero.

И ещё вопрос.
Если в dbf указана кодовая страница, то преобразование кодировок происходит автоматичеси. Тоесть, драйвер перекодирует содержимое таблицы к текущей кодой странице cp1251 Win.
Я правильно понимаю ?
Содержимое таблицы не перекодируется. Таблица и ее содержимое останется в своей кодовой странице. Просто драйвер при чтении и записи будет делать прозрачно необходимые преобразования.
...
Рейтинг: 0 / 0
20.02.2009, 11:58
    #35829341
-=AlexiS=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строка подключения
Выложите сюда ваши dbf - попробую поэксперементировать
...
Рейтинг: 0 / 0
20.02.2009, 12:09
    #35829393
The Dim!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строка подключения
-=AlexiS=-Выложите сюда ваши dbf - попробую поэксперементировать

Спасибо за участие :). Но мне самому интересно разобраться с проблемой кодировок.
...
Рейтинг: 0 / 0
20.02.2009, 12:14
    #35829411
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строка подключения
Вы пробовали открывать в каком-нибудь текстовом редакторе обычные текстовые файлы, созданные в DOS-кодировке? Текст получается совершенно не читаемый. Почему? Да потому, что текстовый редактор предполагает, что весь текст имеет вполне определенную кодировку. Ту, в которой он сейчас и работает.

Если редактор "продвинутый", то у него есть пункт меню вроде "Выбрать кодировку". Вы выбираете этот пункт и текст сразу становится "читаемым". Почему? Потому что вы явно указали как именно надо читать этот текст.

Обратите внимание на два момента:

1. Есть некий способ чтения "по умолчанию"
2. В случае явного указания, способ чтения меняется, если это возможно

У текстового файла нет признака, по которому текстовый редактор мог бы однозначно определить как читать данные, поэтому пользователь вынужден указывать это вручную. Для файлов DBF такой признак может быть записан в 29 байте заголовка. Это и будет являться явным указанием сменить способ чтения, если "текстовый редактор" на это способен .

Если изначально текстовый файл был пустым, то совершенно не важно, какой именно способ чтения "по умолчанию" используется в данном текстовом редакторе. Записанный и сохраненный текст будет прекрасно читаться при повторном открытии. Ведь и при записи и при чтении был использован один и тот же режим "по умолчанию".

Именно поэтому 1С прекрасно записывает/читает данные из DBF-таблиц не "заморачиваясь" с установкой признака кодовой страницы. Ведь и чтение и запись происходит в одном "текстовом редакторе" в одном режиме "по умолчанию".

А вот если запись произошла в одном текстовом редакторе, а чтение осуществляется в другом, то вот тут-то проблемы и начинаются. Ведь у каждого текстового редактора используются собственные режимы чтения по умолчанию.

Это значит, что у нас есть две принципиальные возможности.

1. Каким-то образом явно указать режим чтения данных, если у текстового редактора есть возможность выбора режимов чтения
2. Выбрать такие текстовые редакторы, которые имеют одинаковые режимы чтения "по умолчанию"


Возвращаясь к файлам DBF, вопрос заключается в том, что именно выступает в качестве "текстового редактора" для чтения DBF-файлов. Как следствие, какой именно алгоритм "по умолчанию" будет использован.

Если данные беруться из таблиц через ODBC или ADO, то в качестве "текстового редактора" выступает драйвер ODBC или ADO. Даже не программа! А именно и только драйвер .

Старые драйвера автоматически читали данные в кодовой странице DOS, указанной в данной операционной системе. Вне зависимости от факта наличия признака кодовой страницы. Просто в те времена он еще не использовался.

Новые, соответственно в кодовой странице Windows или с учетом указанного признака кодовой страницы, если он указан явно.

Поскольку вы подключаетесь к файлам DBF, которые не имеют признака кодовой страницы, то единственным способом решения для вас становится выбор соответствующего драйвера. Что я вам и предложил.

PS: Прежде, чем задавать вопросы дальше, настоятельно советую сначала попробовать использовать разные драйвера. Несколько минут экспериментов лучше для понимания, чем несколько часов теории.
...
Рейтинг: 0 / 0
20.02.2009, 12:15
    #35829413
The Dim!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строка подключения
проходящий.А есть другие варианты? :) Или в моем ответе удалось прочитать что-то между строк? Но там всего одна строка, откуда междустрочие?! :)
На всякий случай: cpzero не встроенная команда, а программа cpzero.prg, которая идет в поставке с фоксом. А командой является do, запускающая на исполнение программу cpzero.


Ну мало ли... может кодировка установистся только на текущий сеанс работы с dbf, и do cpzero with <file>, <codepage> нужно указывать при кажом новом подключении...
Вот и переспрасил.


проходящий.Содержимое таблицы не перекодируется. Таблица и ее содержимое останется в своей кодовой странице. Просто драйвер при чтении и записи будет делать прозрачно необходимые преобразования.

А как поведёт себя драйвер, если в таблице выставлена.. ну какая нибудь кодировка, отличная от кирилицы. Ну - уже просто чисто теоритически - какой нибудь мангольский или древникитайская :)
...
Рейтинг: 0 / 0
20.02.2009, 12:33
    #35829474
Строка подключения
The Dim!проходящий.А есть другие варианты? :) Или в моем ответе удалось прочитать что-то между строк? Но там всего одна строка, откуда междустрочие?! :)
На всякий случай: cpzero не встроенная команда, а программа cpzero.prg, которая идет в поставке с фоксом. А командой является do, запускающая на исполнение программу cpzero.


Ну мало ли... может кодировка установистся только на текущий сеанс работы с dbf, и do cpzero with <file>, <codepage> нужно указывать при кажом новом подключении...
Вот и переспрасил.

А это принцип жизни такой - постоянно самому себе придумывать трудности? Какие еще сеансы работы если речь о записи байта в файле отдельной программой? А по окончании сеанса он будет автоматом писаться обратно? Чем? А кто, где, когда и зачем запоминал предыдущее его состояние?

проходящий.Содержимое таблицы не перекодируется. Таблица и ее содержимое останется в своей кодовой странице. Просто драйвер при чтении и записи будет делать прозрачно необходимые преобразования.

А как поведёт себя драйвер, если в таблице выставлена.. ну какая нибудь кодировка, отличная от кирилицы. Ну - уже просто чисто теоритически - какой нибудь мангольский или древникитайская :)
Ну и вопросики... А если вспомнить результаты своих экспериментов? А если почитать ответ ВладимирМ?
...
Рейтинг: 0 / 0
20.02.2009, 12:40
    #35829509
The Dim!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строка подключения
Я прекрасно понимаю, что именно драйвера работают с таблицами - драйвера выступают в роли посредника между приложением и собственно dbf. И именно от выбора того или иного провайдера зависит что "видет" приложение и какие функции ему(приложению) доступны.

ВладимирМ
PS: Прежде, чем задавать вопросы дальше, настоятельно советую сначала попробовать использовать разные драйвера. Несколько минут экспериментов лучше для понимания, чем несколько часов теории.

Вот именно, что просидев и поэксперементировав на практике, и прищел сюда спросить как оно работает.

Просто у нас много файлов в формате dbf - первый байт 0x03 :) - и уних 29 байт = 0. Мне приходится работать с ними из MS SQL Server на х64 платформы, для которой не так уж и много драйверов.
Ну собственно, как я поминаю, дело не в провайдерах. Всё дело в том, что в таблице неуказана кодовая страница а посему, какой бы я провайдер не использовал, он не сможет определить кодировку.
Да, конечно, можно поэксперементировав с драйверами найти тот самый у которого в текущей локализации операционки будет стоять нужная страница. Но это ведь игра в кошки-мышки.
Набор доспупных драйверов зависет от архитектуры(х86 или х64). А кодовая страница привязана к текущему языку операционной системы.

Помоему, по крайней мере для меня, наиболее премлимый вариант когда я буду dbf таблицы обрабатывать за два прохода.
В первом установливать 29 байт в нужное значение. Я знаю от куда в какой кодировке приходят, вот на основе этого и буду выбирать какую кодовую станицу установить.
Ну а вторым проходом буду делать всё что нужно с таблицей, так как в ней уже указана кодировка можно использовать практически любой драйвер которй может работать с dbf.
...
Рейтинг: 0 / 0
20.02.2009, 12:48
    #35829538
The Dim!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строка подключения
проходящий.А это принцип жизни такой - постоянно самому себе придумывать трудности? Какие еще сеансы работы если речь о записи байта в файле отдельной программой? А по окончании сеанса он будет автоматом писаться обратно? Чем? А кто, где, когда и зачем запоминал предыдущее его состояние?

Ну и вопросики... А если вспомнить результаты своих экспериментов? А если почитать ответ ВладимирМ?

Нет, ну что Вы так. Я же просто уточнил. Спасибо за Ваши ответы и внимание к моему топику.
...
Рейтинг: 0 / 0
20.02.2009, 12:51
    #35829548
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строка подключения
0x03 FoxBASE+/Dbase III plus, no memo

То, что 29 байт не заполнен, говорит о том, что, скорее всего, использовалась DOS-кодировка. А старые драйвера входят в поставку операционной системы "по умолчанию". Ничего специально устанавливать не надо.

По приведенной ссылке могли бы еще заметить и ряд других драйверов для работы со старыми DOS-таблицами. Так что, никаких проблем быть не должно.
...
Рейтинг: 0 / 0
20.02.2009, 12:59
    #35829581
The Dim!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строка подключения
ВладимирМ0x03 FoxBASE+/Dbase III plus, no memo

Я имел в виду что невозможно точно определить какой именоо формат.
ВладимирМТо, что 29 байт не заполнен, говорит о том, что, скорее всего, использовалась DOS-кодировка. А старые драйвера входят в поставку операционной системы "по умолчанию". Ничего специально устанавливать не надо.

Вот именно что "скорее всего" и "возможно".
ВладимирМПо приведенной ссылке могли бы еще заметить и ряд других драйверов для работы со старыми DOS-таблицами. Так что, никаких проблем быть не должно.
[/quot]
Видел, пробывал их... и через Jet ядро прбывал. Но с 29 байтом = 0 получал только иероглифы.
На двух машинах. На обоих Win2k3 EE Eng + MUI. Одна х68 а вторая х64. На обоих установлен MS SQL server 2005.
...
Рейтинг: 0 / 0
20.02.2009, 13:45
    #35829730
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строка подключения
The Dim!На обоих Win2k3 EE Eng + MUI
Скорее всего, проблема именно в этом. Т.е. в том, что это английская локализация. В этом случае, текущая кодовая страница DOS будет 437. Если есть возможность, попробуйте проверить закачку на машинах, где установлена русская локализация Windows.

Если не пытаться устанавливать признак кодовой страницы в файлах DBF, то надо попробовать делать конвертацию по факту получения. Т.е. уже средствами самого SQL-сервера.

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

Правда, не уверен, что SQL сделает автоматическую трансляцию кодовых страниц. Я такое ни разу не пробовал.

Возможно, задачу перекачки данных будет проще решить через Integration Services. Кажется, там есть возможность явного указания кодовой страницы.
...
Рейтинг: 0 / 0
20.02.2009, 14:05
    #35829778
The Dim!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строка подключения
Дома стоит Win2k русская, попробую.

SQL перекодировать ничево не будет.

Во временную таблицу с нужным COLLATION...
Если нужно отработать с только с теми данными - да, как вариант. Но если мне нужно добавить или отредактировать записи, то всеравно таже проблема с разными кодировками.

Попробую для каждого нового dbf делать "do cpzero with <file>, <codepage>" через VPF OLEDB провайдера. Я думаю так будет проще и.. навернее правильнее. Да и на моих серверах этот вариант работат несмотря на локализацию.
Пока что руки не доходят - отчётный период...
...
Рейтинг: 0 / 0
20.02.2009, 14:22
    #35829831
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строка подключения
Я попробовал поискать на этом же сайте, но в форуме по MS SQL (вопрос-то о нем, а не о FoxPro). Оказалось, там очень много уже чего понаписали на эту тему. Практически все варианты перебрали здесь

/topic/180672
...
Рейтинг: 0 / 0
20.02.2009, 14:26
    #35829843
The Dim!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строка подключения
С того и начинал.
Возможно действительно дело в том что Eng + MUI...
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Строка подключения / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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