|
VFP dBase Driver почему может криво работать функция UPPER
|
|||
---|---|---|---|
#18+
что то не то с кодировками, незнаю как и где поправить даже если тупо в запросе написать: SELECT k.name, UPPER(k.name) FROM mytable k то данные в кодировке ANSI вовсе не к верхнему регистру преобразуются, вот пример строк: возмещение земельного налога бозмегение земел¦ного налога Пеня Пен¦ разница в тарифе Lазни¦а б TаLи-е такая ерунда не тока с этим драйвером, а вообще с любым, уже пробывал разные версии ставить для dBase файлов, такое происходит у всех кроме MSjet - он нормально все преобразует, видимо он на своей волне работает, но рисовать запросы для него невозможно - по мне так слишком кривые структуры запросов подскажите что тут можно поправить чтобы нормально с кодировками драйвера работали? я пробывал в реестре(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage) кодовые страницы 1252-1255 в c_1251.nls выставить - непомогло! ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2009, 16:20 |
|
VFP dBase Driver почему может криво работать функция UPPER
|
|||
---|---|---|---|
#18+
Если в самом файле DBF не указан признак кодовой страницы, то ничего не поможет. Признак кодовой стрницы - это содержимое 29 байта заголовка файла DBF (первый байт имеет порядковый номер 0). Что там записано? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2009, 17:11 |
|
VFP dBase Driver почему может криво работать функция UPPER
|
|||
---|---|---|---|
#18+
29й байт нулевой, это так и задумано? если нет то блин.. как можно поменять этот байт у кучи файлов часто и без проблем, и на что его надо поменять? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2009, 17:56 |
|
VFP dBase Driver почему может криво работать функция UPPER
|
|||
---|---|---|---|
#18+
Если 29 байт нулевой, то, скорее всего, это таблица в DOS-кодировке. Т.е. с кодовой страницей 866. Просто в те времена не было необходимости специально контролировать кодовую страницу. Вот этот признак и не устанавливали. Вариантов решения проблемы два: 1. Отказаться от драйвера VFP, а вместо него использовать простейшие драйвера для работы с таблицами DBF. Все эти драйвера исходят из предположения, что кодовая страница как раз под DOS. И берется из настроек текущей операционной системы. Для русской локализации Windows это и будет 866 Примеры строк подключения можно посмотреть здесь Connection strings for DBF / FoxPro Кстати, все эти драйвера есть на любой машине, устанавливать их специально нет необходимости. Хотя, разумеется, возможности этих драйверов более ограничены, чем драйвера VFP 2. Принудительно поставить признак кодовой страницы в 29 байте 866 = ASCII-код 101 = h65 1251 = ASCII-код 201 = hC9 На работу DOS-приложений это не повлияет никак. Однако надо будет каждый раз проверять факт наличия значения в 29 байте, поскольку, раз приложение его не контролирует, то, при определенных условиях, может и удалять. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2009, 18:18 |
|
VFP dBase Driver почему может криво работать функция UPPER
|
|||
---|---|---|---|
#18+
отлично спасибо огромное ближайшее время поэксперементирую ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2009, 19:30 |
|
VFP dBase Driver почему может криво работать функция UPPER
|
|||
---|---|---|---|
#18+
а насчет >Кстати, все эти драйвера есть на любой машине, устанавливать их специально нет необходимости. Хотя, разумеется, возможности этих драйверов более ограничены, чем драйвера VFP не у всех драйверов есть функция UPPER, SUBSTR, LEN и другие, или они не так очевидны например в моем любимом MSjet, фуннкция приведения в верхний регистр очень оригинально обозвана: UCASE - нигде больше такого не встречал, и уже 2 раза на поиски её названия потерял больше часа, в душу она мне запала :) чет в инете пока невстречал справочников по функциям к стандартным драйверам, подскажите где их можно подглядеть? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2009, 19:47 |
|
VFP dBase Driver почему может криво работать функция UPPER
|
|||
---|---|---|---|
#18+
нет не помогло, менял нулевой 29й байт на 101 и на 201 - все также работает, и соседние байты также менял, или ты имел ввиду 29й байт в шестнадцатиричной системе? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2009, 12:54 |
|
VFP dBase Driver почему может криво работать функция UPPER
|
|||
---|---|---|---|
#18+
Если речь о vfpoledb то в подключении явно указывать кодировку Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Опытным путем установлено, что кроме стандартных в подключении можно указывать параметры из конфиг. файла, а также команды SET (но без SET), причем вместо булевых употреблять 0, -1 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2009, 17:14 |
|
VFP dBase Driver почему может криво работать функция UPPER
|
|||
---|---|---|---|
#18+
Еще один параметр - порядок сортировки Collating Sequence=MACHINE; или какой там у вас - тоже влияет ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2009, 17:17 |
|
VFP dBase Driver почему может криво работать функция UPPER
|
|||
---|---|---|---|
#18+
zloyGamerнет не помогло, менял нулевой 29й байт на 101 и на 201 - все также работает, и соседние байты также менял, или ты имел ввиду 29й байт в шестнадцатиричной системе? Это для VFP, но в отношении 29 байта для DOS-таблиц то же самое Структура табличного файла (.dbc, .dbf, .frx, .lbx, .mnx, .pjx, .scx, .vcx) В одном байте 8 бит. Это значит, что в 10-ричной системе в него можно записать число в диапазоне от 0 до 255 (2 в 8 степени минус 1). ASCII-коды - это коды в 10-ричной системе. Попробуй выполнить запрос (разумеется, через драйвер FoxPro) вида Код: plaintext
Какие значения получились? Проблемы могут быть, если CPDBF() отлично от CPCURRENT() ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2009, 18:35 |
|
VFP dBase Driver почему может криво работать функция UPPER
|
|||
---|---|---|---|
#18+
kiruha ConnectString = " |Provider=VFPOLEDB.1; |Null = Yes; |Exclusive = No; |SourceType = DBF; |Data Source=D:\DemoDB; |Mode=ReadWrite; |CODEPAGE=1251;" спасибо огроммное, чуствую такое детально-параметризированое подклюдчение к любимому драйверу спасет мир! завтра обязательно попробую отпишусь авторCollating Sequence=MACHINE; я и MACHINE и RUSSIAN пробывал - непомогает. ВладимирМ Попробуй выполнить запрос (разумеется, через драйвер FoxPro) вида SELECT CPDBF() as cpdbf, CPCURRENT() as cpCur from MyTab where recno()=1 дома неполучается, оказывается на домашнем компе вообще нет никаких драйверов для дбф ВладимирМ стати, все эти драйвера есть на любой машине, устанавливать их специально нет необходимости.нашел тока для оракла,мсскл и мсжет который отказывается работать.. ВладимирМ В одном байте 8 бит. Это значит, что в 10-ричной системе в него можно записать число в диапазоне от 0 до 255 (2 в 8 степени минус 1). ASCII-коды - это коды в 10-ричной системе. нет, ненадо, неговори мне такое, я не дерево! (но иногда чуствую себя растением :) ) видимо здесь йаили ты имел ввиду 29й байт в шестнадцатиричной системе? ты меня неправельно понял, или я неверно выразился, я имелл ввиду h29 - байт, вот его я менять ещё не пробывал... вообщем пока проблема нерешена буду эксперементировать спасибо за помощь как решу напишу ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2009, 23:18 |
|
VFP dBase Driver почему может криво работать функция UPPER
|
|||
---|---|---|---|
#18+
Официально драйвер Microsoft OLE DB Provider for Visual FoxPro 9.0 (Sp 2) http://www.microsoft.com/downloads/details.aspx?FamilyId=E1A87D8F-2D58-491F-A0FA-95A3289C5FD4&displaylang=en драйвер ODBC не поддерживается несколько лет драйвера dBase никакого отношения к fox не имеют и синтаксис свой т.е. только один драйвер Microsoft OLE DB Provider for Visual FoxPro 9.0 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2009, 10:52 |
|
VFP dBase Driver почему может криво работать функция UPPER
|
|||
---|---|---|---|
#18+
ОТЛИЧНО и ЗАМЕЧАТЕЛЬНО все работает, спасибо огроммное за невероятную помощь.. итак.., что сделал: 1) подключился: йаProvider=VFPOLEDB.1;CODEPAGE=1251;Null = Yes;SourceType = DBF;Data Source=./TDBF 2) запрос: йаSELECT CPDBF(), CPCURRENT(), t.name, UPPER(t.name), LOWER(t.name), 1 FROM myTable t 3) результат: CPDBF = 0, CPCURRENT = 1251 регистр как обычно меняется криво!! меняю 29й байт на 201 пробую все тоже самое ещё раз: 3) результат: CPDBF = 1251, CPCURRENT = 1251 регистр как обычно меняется криво!! меняю 29й байт на 101 пробую все тоже самое ещё раз: 3) результат: CPDBF = 866, CPCURRENT = 1251 и что вы думаете? все ПРОСТО ЗАМЕЧАТЕЛЬНО работает!! СПАСИБО ОГРОМНОЕ ВладимирМ за наводку на 29й байт, без тебя я бы на него не скоро вышел.. и ещё, : ВладимирМПроблемы могут быть, если CPDBF() отлично от CPCURRENT() тут ты был неправ.. хотя если менять строку подключения на: йаProvider=VFPOLEDB.1;CODEPAGE=866;Null = Yes;SourceType = DBF;Data Source=./TDBF то всеравно CPCURRENT = 1251 !! вообщем все работает (независимо от строки подключения) надо было просто нормально поменять 29й байт и !!переподключиться!!(что я видимо и не сделал прошлый раз) ещё раз всем спасибо если кому надо могу выложить програмки для пакетной смены 29го байта и выполнения запросов с вашими любимыми драйверами, пишите.. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2009, 13:11 |
|
VFP dBase Driver почему может криво работать функция UPPER
|
|||
---|---|---|---|
#18+
А если поставить SET TABLEVALIDATE TO 0 (проверка заголовка файла не выполняется) или в подключении TABLEVALIDATE=0; Все равно нужно менять 29 байт? P.S. CPCURRENT() в vfpoledb непонятно что должен показывать, конфиг. файл отсутствует в принципе, а при отсутствии функция показывает тек установку ОС (по документации). ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2009, 11:07 |
|
|
start [/forum/topic.php?fid=41&fpage=130&tid=1586569]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 127ms |
0 / 0 |