Собственно проблема в том, что если в заголовке DBF-ки 29-й байт не установлен в 65(HEX), а в файле есть строковые значения с русскими буквами - получаю "кракозяблы". Установить это байт в нужное значения - не имею права (файл сетевой и не я его "хозяин").
Ради примера взял два одинаковых файла по содержимому, отличие в лишь в том, что в одном файле 29-й байт установлен в нужное значение, а в другом - нет.

Соединяюсь так:

Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.Open("Provider=VFPOLEDB.1;Data Source=" + ПутьСпр + ";Collating Sequence=MACHINE;EXCLUSIVE=NO");

Как и "положено", в одном случае получаю кириллический символы, в другом "кракозяблы". При этом сравнил все свойства Соединение, для обоих файлов они абсолютно идентичны (ну кроме ID сесси - это понятно). Т.о. получаем, что значение этого байта в свойствах не отображается и я не могу на него повлиять устанавливая параметры подключения (но изначально пробовал и Collating Sequence=RUSSIAN и CODEPAGE=866 - не помогло).
Как же заставить провайдера читать данные в нужной мне кодировке?
---
"Остановился я на запасном варианте с перекодом"(с)
Михаил (iRounder).
Могут быть проблемы с записью и разделенным режимом.
А в Advantage декларируют возможность одновременного использования БД с другими приложениями.
P.S.
Про "внешние источники" - это не основная идея. :-)
---
iRounder, элементарно "Ватсон" - копишь себе во врем хранилище, меняешь 29-й и читаешь, после прочтения удаляешь!
---
Это когда нужно только чтение. А что делать когда нужна еще и запись в файл?
---
Предложу информацию для размышления:
http://msdn.microsoft.com/en-us/library/6zae4f2a(v=vs.80).aspx
http://msdn.microsoft.com/en-us/library/39z0s4ax(v=vs.80).aspx
http://msdn.microsoft.com/en-us/library/xx9t4706(v=vs.80).aspx
Т.е. узнаём CP файла. Запрещаем преобразование. Выполняем преобразование руками в нужную кодировку. Нет? ;-)
---
+ к (7) сообщению.
Вроде, можно и без "SET NOCPTRANS" получить результат.
Примерно так:
CPCONVERT(CPDBF(), 1251, cExpression)
---
Как всегда - напишу не в тему. ;-)
Думаю, задача стоит шире, чем она обозначена в теме форума.
Вот тексты:
"нужна еще и запись в файл"(с)
"читать из него или писать в него в режиме совместного доступа"(с)
"С ним работают из досового FoxPro 2.6"(с)
Делаю вывод. ;-)
Надо осваивать вот это:
http://devzone.advantagedatabase.com/dz/webhelp/Advantage11.1/index.html
Составная часть "Advantage ODBC Driver" бесплатна, если не использовать клиент серверный режим, а работать в "файловом" режиме.
Скачать это можно тут:
http://devzone.advantagedatabase.com/dz/content.aspx?key=31
Это, если хотеть использовать х64 и иметь "полноценную" совместимость с Windows 7/8.
Или скачать тут:
http://devzone.advantagedatabase.com/dz/content.aspx?key=20&Release=13
http://devzone.advantagedatabase.com/dz/content.aspx?key=20&Release=10
Менее продвинутые версии.

Но, вопрос порядка сортировки в индексах должен тестироваться и изучаться при совместной работе с базой данных поддерживаемой "FoxPro 2.6". Благо, в комплекте с "Advantage Database Server" есть утилита настройки таблиц "перекодировки". Бесплатная... :-)
---
Михаил (iRounder).
Дам информацию для начала "пути". ;-)

Скачиваем и устанавливаем обязательно для эксплуатации:
"Platforms for Advantage ODBC Driver Release 9.1"
http://devzone.advantagedatabase.com/dz/content.aspx?key=20&Release=13∏=14

Скачиваем и устанавливаем полезные компоненты для разработки:
"Advantage Data Architect Release 9.1 for Windows 32-bit"
http://devzone.advantagedatabase.com/dz/content.aspx?key=20&Release=13∏=8&Platform=6
"Platforms for Advantage Client Engine Release 9.1"
http://devzone.advantagedatabase.com/dz/content.aspx?key=20&Release=13∏=5

Рекомендую устанавливать все составляющие в пакетах установки.
В процессе установки будут запрашиваться языковые настройки.
Надо везде выбирать:
ANSI=Russian
OEM=RUSSIAN
Их можно потом поменять. Но, лучше сразу поставить. ;-)

Далее надо настроить ODBC. Все параметры относящиеся к СУБД можно будет потом перекрывать параметрами строки подключения. Пример настройки на картинке ниже.
У меня возникли проблемы настройки ODBC в Windows XP x64 (ядро от Windows 2003 x64). В настройках "Data Sources (ODBC)" не появилась строка драйвера Advantage. Там, вообще, ничего не появилось. ;-)
Решается путем замены маршрута вызова
%SystemRoot%\system32\odbcad32.exe
на
%SystemRoot%\SysWOW64\odbcad32.exe

Для проверки использовал вот такой текст от "семерки":

```1c
    //--------------------------------------
    Процедура Выполнить()
    Перем Кон,Рек,Буф;
    Кон=";
    Кон=Кон+"DSN=ADS;"; // или "Driver={Advantage StreamlineSQL ODBC};";
    Кон=Кон+"DataDirectory=D:\_User;";
    Кон=Кон+"DefaultType=FoxPro;";
    Кон=Кон+"ServerTypes=1;";
    Кон=Кон+"AdvantageLocking=OFF;";
    Кон=Кон+"CharSet=OEM;";
    Кон=Кон+"Language=OEM;";
    Кон=Кон+"Locking=RECORD;";
    Кон=Кон+"MaxTableCloseCache=100;";
    Кон=Кон+"MemoBlockSize=64;";
    Кон=Кон+"Rows=FALSE;";
    Кон=Кон+"TrimTrailingSpaces=FALSE;";
    Кон=Кон+"Compression=ALWAYS;";
    Кон=Кон+"CommType=TCP_IP;";
    Кон=Кон+"RightsChecking=OFF;";
    АДО=СоздатьОбъект("ADODB.Connection");
    АДО.Open(Кон);
    Рек=АДО.Execute("SELECT * FROM Test");
    Пока Рек.EOF=0 Цикл
    Буф=";
    Для Н=0 По Рек.Fields.Count-1 Цикл
    Буф=Буф+СокрЛП(Строка(Рек.Fields(Н).Value))+"|";
    КонецЦикла;
    Сообщить(Буф);
    Х=Рек.MoveNext;
    КонецЦикла;
    АДО.Close();
    КонецПроцедуры
    //--------------------------------------
```

Думаю, не составит большого труда его изобразить в "восьмерке".
Делайте проверку для "проблемной" таблицы с CDX файлом, созданной приложением на FoxPro 2.6. Т.е. берите копию файлов из промышленной эксплуатации.
Если наш тест пройдет, то следующим шагом будет вопрос - "dynamic collations". Т.е. изменение параметра "Language=OEM | ANSI | named collation" строки подключения. Для этого желательно выяснить, что задано в эксплуатируемой системе на FoxPro. Но, скорее всего, придется писать тесты для сравнения порядка сортировки в среде FoxPro. Т.е. желателен контакт с программистами этой системы. Хотя, можем написать и сами... :-)
---
Скажите, а advantage поддерживает dbf файлы формата dBASE IV? кажется у него с этим проблемы.
---
Владимир (Spacer).
Я "проблемы" не проверял. Высылайте мне файлы. Проверю...
---
Спасибо за отклик, прикрепил два небольших файлика.
Кажется это формат dBASE VII, у меня что-то не получилось его в advantage открыть.
Я хотел использовать его в 1С во внешнем источнике данных.
В конфигураторе таблица и поля нормально определились, а при попытке открыть таблицу источника в 1С выдает ошибку:

Ошибка внешней базы данных:
ошибка при выполнении запроса
по причине:
Ошибка ODBC. SQLSTATE: HY000
Номер ошибки: 7200
Описание: [iAnywhere Solutions][Advantage SQL][ASA] Error 7200: AQE Error: State = HY000; NativeError = 7014; [iAnywhere Solutions][Advantage SQL][ASA] Error 7014: Invalid DBF table. D:\pharmsm\Data\refland.dbf Table name: refland

Вот строка подключения которую я использовал:
Driver={Advantage StreamlineSQL ODBC};
DataDirectory=D:\pharmsm\Data;
DefaultType=FoxPro;
ServerTypes=1;
AdvantageLocking=OFF;
CharSet=OEM;
Language=OEM;
Locking=RECORD;
MaxTableCloseCache=100;
MemoBlockSize=64;
Rows=FALSE;
TrimTrailingSpaces=FALSE;
Compression=ALWAYS;
CommType=TCP_IP;
RightsChecking=OFF;
---
DefaultType=FoxPro; Эти файлики точно не FoxPro.
---
Возможно. Там есть четыре варианта на выбор:
Advantage, Visual FoxPro, FoxPro и Clipper. Я вроде уже все кроме Advantage перепробовал.
---
И не Visual FoxPro, и не FoxPro. Про остальные не скажу.
---
Владимир (Spacer).
Думаю, что это формат dBASE 7.
http://www.autopark.ru/ASBProgrammerGuide/DBFSTRUC.HTM
И как мы видим - ADS его не поддерживает.
---
а нельзя проще? использовать:

```1c
    ДБФ = Новый XBase;
```

ну и дальше по тексту
---
Этот формат dbf XBase тоже не может читать.
У меня получилось его прочитать с помощью специальной компоненты - аналога XBase от фирмы OKSi,
взятой из конфигурации "Управление аптечной сетью".
Просто хотелось большего - иметь всегда подключенную к базе связку из 3-х таблиц dbf.
Думал что advantage мне в этом поможет, так как считал его достаточно продвинутым.
---
Дабавляю вознаграждение.
---
Установить это байт в нужное значения - не имею права (файл сетевой и не я его "хозяин"). - судя по этому, ты только читать можешь, а по поводу редактить ничего не писалось!
А есть ли способ подменять его по сети? Если да - тогда всё тоже самое, только ещё копишь его по сети!
Ну, а на худой конец - перепарси его Exceleм !
---
Нет возможности ничего с ним делать кроме читать из него или писать в него в режиме совместного доступа.
---
Повторю - файл сетевой в режиме совместного доступа. С ним работают из досового FoxPro 2.6 Я не могу ни захватывать его монопольно, ни изменять заголовок.
---
Вы случайно не мне это сказали? ;-)
---
А как насчет, не биться головой о стену и читать как получится, а содержимое полей перекодировывать в нужный вид уже после чтения, соответственно, зеркально обратно при записи?
---
Уже предложил в (7) сообщении.
Автор темы не реагирует... :-)
---
hogik, да ладно, на лавры особо не претендую. Все зависит от мотивации: если решить задачу то ничего, живет, если спортивный интерес, тогда дело плохо )
---
"на лавры особо не претендую"(с)
Петр (peterxx).
Мне эти "лавры" - фиолетово.
Хочется адекватной реакции автора темы. Очень странный текст в (9) сообщении. Такое впечатление, что на Инфостарт-е опять ссылки не открываются простым нажатием... :-)
---
Это как запасной вариант.
(12) Был далек от работы - поэтому и не реагировал.
Сейчас буду пробоват то, что посоветовали.
---
В общем странно ведет себя провайдер.
Пытаюсь получить кодовую страницу таблицы
Пров = Соединение.Execute("CPDBF()");
В итоге все время возвращает 0 - независимо от того, указана ли в заголовке DBF кодовая страница или нет.
---
"...странно ведет себя провайдер...В итоге все время возвращает 0"(с)
Михаил (iRounder).
Думаю, ничего странного. ;-) Эта функция должна выполняться для:
"Returns the code page with which an open table has been marked."(с)
А она у Вас открыта?
Используйте явное указание ИЗВЕСТНОЙ Вам кодовой страницы при использовании CPCONVERT().

Но, повторю еще раз. Ваш путь описан в (15) сообщении.
И "копать" в эту сторону: http://infostart.ru/public/90666/
---
Внешними источниками я умею пользоваться. Читаю данные из Oracle. Здесь же нужно работать без механизма внешних источников данных.
Остановился я на запасном варианте с перекодом. Но за потраченное на вопрос время завтра перечислю вознаграждение.
Спасибо.
---
"Остановился я на запасном варианте с перекодом"(с)
Михаил (iRounder).
Могут быть проблемы с записью и разделенным режимом.
А в Advantage декларируют возможность одновременного использования БД с другими приложениями.
P.S.
Про "внешние источники" - это не основная идея. :-)
---
У нас выходные до понедельника. Кое-что попробую дома - но отвечать буду "медленно".
Контакта с программистами FoxPro 2.6 скорее всего не получится. Работа ведется примерно с 10 разными dbf-ками из разных подсистем. В некоторых кодовая страница указана (866), в некоторых не указана.
---
И да - хочу отметить, что hogik вернул выплаченное ему вознаграждение с объяснением, что участвовал в обсуждении из интереса, а не из-за $m.