|
Строка подключения
|
|||
---|---|---|---|
#18+
Доброго времяни суток. Люди добрые, подскажите пожалусто, как можно в строке подключения OBDC драйвера(DRIVER={Microsoft Visual FoxPro Driver}) указать нужную кодовую страницу. В таблице неуказана кодовая страница. 29 поле = 0. Кодировка таблицы DOSовская. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2009, 17:38 |
|
Строка подключения
|
|||
---|---|---|---|
#18+
The Dim!Доброго времяни суток. Люди добрые, подскажите пожалусто, как можно в строке подключения OBDC драйвера(DRIVER={Microsoft Visual FoxPro Driver}) указать нужную кодовую страницу. В таблице неуказана кодовая страница. 29 поле = 0. Кодировка таблицы DOSовская. Никак. Впишите в этот байт нужное значение. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2009, 18:06 |
|
Строка подключения
|
|||
---|---|---|---|
#18+
Х.м. тогда, возможно, посоветуете драйвер или какой-то механизм который позволяет работать с таблице в нужной мне кодировке, которую можно указать программно. Откуда тогда драйвер берёт кодовую страницу, из региональных настроек операционой системы? Кроме того, в топиках этой ветки форума, приводится масса примеров чтения из таблиц с указнием их кодовых страниц, как тогда сам Fox работает с таблицами позволяя такое? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2009, 19:05 |
|
Строка подключения
|
|||
---|---|---|---|
#18+
Если речь идет о файлах DBF, созданных в приложениях под DOS, то можно попробовать использовать старые драйвера {Microsoft dBase Driver (*.dbf)} Примеры строк подключения можно посмотреть здесь Connection strings for DBF / FoxPro Дело в том, что если кодовая страница файла DBF не указана явно, то FoxPro предполагает, что данные в нем записаны в текущей кодовой странице среды FoxPro. Весь вопрос в том, какая именно кодовая страница среды FoxPro устанавливается. Точнее, откуда она берется. В русскоязычной локализации Windows при использовании старых драйверов для DOS-версий будет использоваться 866 кодовая страница. Что, в данном случае, и требуется. А для Windows-версий (Visual FoxPro) используется кодовая страница 1251. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2009, 20:16 |
|
Строка подключения
|
|||
---|---|---|---|
#18+
ВладимирМВесь вопрос в том, какая именно кодовая страница среды FoxPro устанавливается. Точнее, откуда она берется. В русскоязычной локализации Windows при использовании старых драйверов для DOS-версий будет использоваться 866 кодовая страница. Что, в данном случае, и требуется. А для Windows-версий (Visual FoxPro) используется кодовая страница 1251. А как узнать какая кодовая страница установлена в среде Fox Pro и можно ли изменить эту кодовую страницу? Если я правильно Вас понял, то Вы имеете в виду что кодовая страница берется из региональных настроек операционной системы(тогда из региональных настроек должны подтягиваться и разделители в датах, числах и их форматы и т.д... тоесть всё то что называется "collation sequence"). Раз нельзя драйверу принудительно(в строке подключения или как-то иначе) указать кодовую страницу, то прочитать таблицу с кодовой страницей отличной от текущей кодовой страницы операционки непредставляется возможным, если только в самой таблице явно не указана кодовая страница. Так получается? Но почему и главное как программамы типа "Налогоплатильщик ЮЛ" и той же 1С(под рукой ничего другово в формате Fox Pro нету), в таблицах которых не указана кодовая страница(29 байт = 0) удаётся правильно отображать их содержимое. Вот сейчас пробовал менять значение 29 байта на разные кодовые страницы и несмотря на это, указанные программы корректно отображали содержимое соответствующих таблиц. А вот если я подключался серез ODBC драйвера(из MS SQL сервера) то результатом был вывод иероглифов в том случае когда содержимое 29 байта не соответствовало той кодовой странице в которой в действительности кодировались символы... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2009, 22:12 |
|
Строка подключения
|
|||
---|---|---|---|
#18+
The Dim!Если я правильно Вас понял, то Вы имеете в виду что кодовая страница берется из региональных настроек операционной системы(тогда из региональных настроек должны подтягиваться и разделители в датах, числах и их форматы и т.д... Фокс может это подтягивать. Но может и не подтягивать. :) тоесть всё то что называется "collation sequence"). С каких это пор последовательности/порядки сортировки (sequence) вдруг стали связаны с разделителями? :) Раз нельзя драйверу принудительно(в строке подключения или как-то иначе) указать кодовую страницу, то прочитать таблицу с кодовой страницей отличной от текущей кодовой страницы операционки непредставляется возможным, если только в самой таблице явно не указана кодовая страница. Так получается? Вроде так. Но почему и главное как программамы типа "Налогоплатильщик ЮЛ" и той же 1С(под рукой ничего другово в формате Fox Pro нету), в таблицах которых не указана кодовая страница(29 байт = 0) удаётся правильно отображать их содержимое. 1. 1С к фоксу отношения не имеет и пишет/читает по-своему. 2. DBF - далеко не всегда читается фоксом. Форматов под одним расширением несколько и они не полностью совместимы. Вот сейчас пробовал менять значение 29 байта на разные кодовые страницы и несмотря на это, указанные программы корректно отображали содержимое соответствующих таблиц. Потому, что они на него вообще внимания не обращают. Они считают, что все такие файлы в какой-то одной кодировке. А вот если я подключался серез ODBC драйвера(из MS SQL сервера) то результатом был вывод иероглифов в том случае когда содержимое 29 байта не соответствовало той кодовой странице в которой в действительности кодировались символы... Так и должно быть. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2009, 22:38 |
|
Строка подключения
|
|||
---|---|---|---|
#18+
Раз задача не решается в лоб, то попробуем зайти с другой стороны :) Фокса у меня нет, и с ним никогда не работал. Есть MS SQL Server и провайдер(какой посоветуете использовать, в основном буду читать данные и очень редко создавать таблицы и добавлять в них данные) для фоксовых таблиц. Возможно ли: 1. Подключившись через ODBC провайдер установить кодовую страницу, тоесть изменить значение 29 байта на нужное мне. В таком случае ненужно будет указывать кодовую страницу в строке подключения. 2. Опять же подключившись через ODBC провайдера перекодировать всю таблицу из одной кодировки в другую. Провайдер VPF позволяет выполнять, по средствам ExecScript, команды фокса может можно как-то выполнить мои задачи? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2009, 23:13 |
|
Строка подключения
|
|||
---|---|---|---|
#18+
The Dim!Провайдер VPF позволяет выполнять, по средствам ExecScript, команды фокса может можно как-то выполнить мои задачи? Execsript и прочее может VFP OLEDB provider. Главное не зацикливаться на ODBC. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2009, 10:00 |
|
Строка подключения
|
|||
---|---|---|---|
#18+
А подскажите, пожалусто, команды VPF которые позваляют установть кодовуюс страницу в dbfке. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2009, 11:01 |
|
Строка подключения
|
|||
---|---|---|---|
#18+
The Dim!А подскажите, пожалусто, команды VPF которые позваляют установть кодовуюс страницу в dbfке. Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2009, 11:12 |
|
Строка подключения
|
|||
---|---|---|---|
#18+
проходящий.The Dim!А подскажите, пожалусто, команды VPF которые позваляют установть кодовуюс страницу в dbfке. Код: plaintext
Уважаемый проходящий. Иж извените за назойливость, а это "do cpzero with <file>, <codepage>" сохранит в 29 байте dbfки код нужной мне кодовой страницы. Так ? И ещё вопрос. Если в dbf указана кодовая страница, то преобразование кодировок происходит автоматичеси. Тоесть, драйвер перекодирует содержимое таблицы к текущей кодой странице cp1251 Win. Я правильно понимаю ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2009, 11:26 |
|
Строка подключения
|
|||
---|---|---|---|
#18+
The Dim!проходящий.The Dim!А подскажите, пожалусто, команды VPF которые позваляют установть кодовуюс страницу в dbfке. Код: plaintext
Уважаемый проходящий. Иж извените за назойливость, а это "do cpzero with <file>, <codepage>" сохранит в 29 байте dbfки код нужной мне кодовой страницы. Так ? А есть другие варианты? :) Или в моем ответе удалось прочитать что-то между строк? Но там всего одна строка, откуда междустрочие?! :) На всякий случай: cpzero не встроенная команда, а программа cpzero.prg, которая идет в поставке с фоксом. А командой является do, запускающая на исполнение программу cpzero. И ещё вопрос. Если в dbf указана кодовая страница, то преобразование кодировок происходит автоматичеси. Тоесть, драйвер перекодирует содержимое таблицы к текущей кодой странице cp1251 Win. Я правильно понимаю ? Содержимое таблицы не перекодируется. Таблица и ее содержимое останется в своей кодовой странице. Просто драйвер при чтении и записи будет делать прозрачно необходимые преобразования. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2009, 11:41 |
|
Строка подключения
|
|||
---|---|---|---|
#18+
Выложите сюда ваши dbf - попробую поэксперементировать ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2009, 11:58 |
|
Строка подключения
|
|||
---|---|---|---|
#18+
-=AlexiS=-Выложите сюда ваши dbf - попробую поэксперементировать Спасибо за участие :). Но мне самому интересно разобраться с проблемой кодировок. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2009, 12:09 |
|
Строка подключения
|
|||
---|---|---|---|
#18+
Вы пробовали открывать в каком-нибудь текстовом редакторе обычные текстовые файлы, созданные в DOS-кодировке? Текст получается совершенно не читаемый. Почему? Да потому, что текстовый редактор предполагает, что весь текст имеет вполне определенную кодировку. Ту, в которой он сейчас и работает. Если редактор "продвинутый", то у него есть пункт меню вроде "Выбрать кодировку". Вы выбираете этот пункт и текст сразу становится "читаемым". Почему? Потому что вы явно указали как именно надо читать этот текст. Обратите внимание на два момента: 1. Есть некий способ чтения "по умолчанию" 2. В случае явного указания, способ чтения меняется, если это возможно У текстового файла нет признака, по которому текстовый редактор мог бы однозначно определить как читать данные, поэтому пользователь вынужден указывать это вручную. Для файлов DBF такой признак может быть записан в 29 байте заголовка. Это и будет являться явным указанием сменить способ чтения, если "текстовый редактор" на это способен . Если изначально текстовый файл был пустым, то совершенно не важно, какой именно способ чтения "по умолчанию" используется в данном текстовом редакторе. Записанный и сохраненный текст будет прекрасно читаться при повторном открытии. Ведь и при записи и при чтении был использован один и тот же режим "по умолчанию". Именно поэтому 1С прекрасно записывает/читает данные из DBF-таблиц не "заморачиваясь" с установкой признака кодовой страницы. Ведь и чтение и запись происходит в одном "текстовом редакторе" в одном режиме "по умолчанию". А вот если запись произошла в одном текстовом редакторе, а чтение осуществляется в другом, то вот тут-то проблемы и начинаются. Ведь у каждого текстового редактора используются собственные режимы чтения по умолчанию. Это значит, что у нас есть две принципиальные возможности. 1. Каким-то образом явно указать режим чтения данных, если у текстового редактора есть возможность выбора режимов чтения 2. Выбрать такие текстовые редакторы, которые имеют одинаковые режимы чтения "по умолчанию" Возвращаясь к файлам DBF, вопрос заключается в том, что именно выступает в качестве "текстового редактора" для чтения DBF-файлов. Как следствие, какой именно алгоритм "по умолчанию" будет использован. Если данные беруться из таблиц через ODBC или ADO, то в качестве "текстового редактора" выступает драйвер ODBC или ADO. Даже не программа! А именно и только драйвер . Старые драйвера автоматически читали данные в кодовой странице DOS, указанной в данной операционной системе. Вне зависимости от факта наличия признака кодовой страницы. Просто в те времена он еще не использовался. Новые, соответственно в кодовой странице Windows или с учетом указанного признака кодовой страницы, если он указан явно. Поскольку вы подключаетесь к файлам DBF, которые не имеют признака кодовой страницы, то единственным способом решения для вас становится выбор соответствующего драйвера. Что я вам и предложил. PS: Прежде, чем задавать вопросы дальше, настоятельно советую сначала попробовать использовать разные драйвера. Несколько минут экспериментов лучше для понимания, чем несколько часов теории. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2009, 12:14 |
|
Строка подключения
|
|||
---|---|---|---|
#18+
проходящий.А есть другие варианты? :) Или в моем ответе удалось прочитать что-то между строк? Но там всего одна строка, откуда междустрочие?! :) На всякий случай: cpzero не встроенная команда, а программа cpzero.prg, которая идет в поставке с фоксом. А командой является do, запускающая на исполнение программу cpzero. Ну мало ли... может кодировка установистся только на текущий сеанс работы с dbf, и do cpzero with <file>, <codepage> нужно указывать при кажом новом подключении... Вот и переспрасил. проходящий.Содержимое таблицы не перекодируется. Таблица и ее содержимое останется в своей кодовой странице. Просто драйвер при чтении и записи будет делать прозрачно необходимые преобразования. А как поведёт себя драйвер, если в таблице выставлена.. ну какая нибудь кодировка, отличная от кирилицы. Ну - уже просто чисто теоритически - какой нибудь мангольский или древникитайская :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2009, 12:15 |
|
Строка подключения
|
|||
---|---|---|---|
#18+
The Dim!проходящий.А есть другие варианты? :) Или в моем ответе удалось прочитать что-то между строк? Но там всего одна строка, откуда междустрочие?! :) На всякий случай: cpzero не встроенная команда, а программа cpzero.prg, которая идет в поставке с фоксом. А командой является do, запускающая на исполнение программу cpzero. Ну мало ли... может кодировка установистся только на текущий сеанс работы с dbf, и do cpzero with <file>, <codepage> нужно указывать при кажом новом подключении... Вот и переспрасил. А это принцип жизни такой - постоянно самому себе придумывать трудности? Какие еще сеансы работы если речь о записи байта в файле отдельной программой? А по окончании сеанса он будет автоматом писаться обратно? Чем? А кто, где, когда и зачем запоминал предыдущее его состояние? проходящий.Содержимое таблицы не перекодируется. Таблица и ее содержимое останется в своей кодовой странице. Просто драйвер при чтении и записи будет делать прозрачно необходимые преобразования. А как поведёт себя драйвер, если в таблице выставлена.. ну какая нибудь кодировка, отличная от кирилицы. Ну - уже просто чисто теоритически - какой нибудь мангольский или древникитайская :) Ну и вопросики... А если вспомнить результаты своих экспериментов? А если почитать ответ ВладимирМ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2009, 12:33 |
|
Строка подключения
|
|||
---|---|---|---|
#18+
Я прекрасно понимаю, что именно драйвера работают с таблицами - драйвера выступают в роли посредника между приложением и собственно dbf. И именно от выбора того или иного провайдера зависит что "видет" приложение и какие функции ему(приложению) доступны. ВладимирМ PS: Прежде, чем задавать вопросы дальше, настоятельно советую сначала попробовать использовать разные драйвера. Несколько минут экспериментов лучше для понимания, чем несколько часов теории. Вот именно, что просидев и поэксперементировав на практике, и прищел сюда спросить как оно работает. Просто у нас много файлов в формате dbf - первый байт 0x03 :) - и уних 29 байт = 0. Мне приходится работать с ними из MS SQL Server на х64 платформы, для которой не так уж и много драйверов. Ну собственно, как я поминаю, дело не в провайдерах. Всё дело в том, что в таблице неуказана кодовая страница а посему, какой бы я провайдер не использовал, он не сможет определить кодировку. Да, конечно, можно поэксперементировав с драйверами найти тот самый у которого в текущей локализации операционки будет стоять нужная страница. Но это ведь игра в кошки-мышки. Набор доспупных драйверов зависет от архитектуры(х86 или х64). А кодовая страница привязана к текущему языку операционной системы. Помоему, по крайней мере для меня, наиболее премлимый вариант когда я буду dbf таблицы обрабатывать за два прохода. В первом установливать 29 байт в нужное значение. Я знаю от куда в какой кодировке приходят, вот на основе этого и буду выбирать какую кодовую станицу установить. Ну а вторым проходом буду делать всё что нужно с таблицей, так как в ней уже указана кодировка можно использовать практически любой драйвер которй может работать с dbf. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2009, 12:40 |
|
Строка подключения
|
|||
---|---|---|---|
#18+
проходящий.А это принцип жизни такой - постоянно самому себе придумывать трудности? Какие еще сеансы работы если речь о записи байта в файле отдельной программой? А по окончании сеанса он будет автоматом писаться обратно? Чем? А кто, где, когда и зачем запоминал предыдущее его состояние? Ну и вопросики... А если вспомнить результаты своих экспериментов? А если почитать ответ ВладимирМ? Нет, ну что Вы так. Я же просто уточнил. Спасибо за Ваши ответы и внимание к моему топику. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2009, 12:48 |
|
Строка подключения
|
|||
---|---|---|---|
#18+
0x03 FoxBASE+/Dbase III plus, no memo То, что 29 байт не заполнен, говорит о том, что, скорее всего, использовалась DOS-кодировка. А старые драйвера входят в поставку операционной системы "по умолчанию". Ничего специально устанавливать не надо. По приведенной ссылке могли бы еще заметить и ряд других драйверов для работы со старыми DOS-таблицами. Так что, никаких проблем быть не должно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2009, 12:51 |
|
Строка подключения
|
|||
---|---|---|---|
#18+
ВладимирМ0x03 FoxBASE+/Dbase III plus, no memo Я имел в виду что невозможно точно определить какой именоо формат. ВладимирМТо, что 29 байт не заполнен, говорит о том, что, скорее всего, использовалась DOS-кодировка. А старые драйвера входят в поставку операционной системы "по умолчанию". Ничего специально устанавливать не надо. Вот именно что "скорее всего" и "возможно". ВладимирМПо приведенной ссылке могли бы еще заметить и ряд других драйверов для работы со старыми DOS-таблицами. Так что, никаких проблем быть не должно. [/quot] Видел, пробывал их... и через Jet ядро прбывал. Но с 29 байтом = 0 получал только иероглифы. На двух машинах. На обоих Win2k3 EE Eng + MUI. Одна х68 а вторая х64. На обоих установлен MS SQL server 2005. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2009, 12:59 |
|
Строка подключения
|
|||
---|---|---|---|
#18+
The Dim!На обоих Win2k3 EE Eng + MUI Скорее всего, проблема именно в этом. Т.е. в том, что это английская локализация. В этом случае, текущая кодовая страница DOS будет 437. Если есть возможность, попробуйте проверить закачку на машинах, где установлена русская локализация Windows. Если не пытаться устанавливать признак кодовой страницы в файлах DBF, то надо попробовать делать конвертацию по факту получения. Т.е. уже средствами самого SQL-сервера. Как вариант: закачку делать во временные таблицы, у которых все символьные поля явно объявить с нужным COLLATION. А потом попытаться пербросить данные из этой временной таблицы в другую, с нужной кодировкой. Правда, не уверен, что SQL сделает автоматическую трансляцию кодовых страниц. Я такое ни разу не пробовал. Возможно, задачу перекачки данных будет проще решить через Integration Services. Кажется, там есть возможность явного указания кодовой страницы. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2009, 13:45 |
|
Строка подключения
|
|||
---|---|---|---|
#18+
Дома стоит Win2k русская, попробую. SQL перекодировать ничево не будет. Во временную таблицу с нужным COLLATION... Если нужно отработать с только с теми данными - да, как вариант. Но если мне нужно добавить или отредактировать записи, то всеравно таже проблема с разными кодировками. Попробую для каждого нового dbf делать "do cpzero with <file>, <codepage>" через VPF OLEDB провайдера. Я думаю так будет проще и.. навернее правильнее. Да и на моих серверах этот вариант работат несмотря на локализацию. Пока что руки не доходят - отчётный период... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2009, 14:05 |
|
Строка подключения
|
|||
---|---|---|---|
#18+
Я попробовал поискать на этом же сайте, но в форуме по MS SQL (вопрос-то о нем, а не о FoxPro). Оказалось, там очень много уже чего понаписали на эту тему. Практически все варианты перебрали здесь /topic/180672 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2009, 14:22 |
|
|
start [/forum/topic.php?fid=41&msg=35829581&tid=1586744]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 352ms |
total: | 505ms |
0 / 0 |