|
|
|
Связь с dbf III в ACCESS или MS Visual Studio 2005
|
|||
|---|---|---|---|
|
#18+
Понимаю, что подобных вопросов было много и, возможно, постю не в ту ветку, но все таки... Имеется старая старая база, написана еще на FoxPro 2.6. и dbf III вер. в кодировке 866 Как пример, таблица Test Код: plaintext 1. 2. Проблема: 1. Если я создаю связь в Access(через ODBC), то данные поля Name выводятся в виндовой кодировке, соответственно кракозябры. Как Access можно заставить понять что надо кодировку другую выбирать. Через BDE администратора уже поменял LangDriver на "dBASE RUS cp866". Не помогло. В реестре параметры Jet менял. Не помогло... Что можно сделать? 2. Если отказаться от Access и делать все в Visual Studio 2005 (C#), то возникает проблема другого рода. Данные отображаются в корректном виде, но я не могу создать параметризированный запрос. При создании запроса вида Код: plaintext 1. Помогите советом, вроде не тупой, но тут в тупике целый день... P.S. Суть коннекта в том, что после поиска нужной записи еще необходимо будет обновить некоторые записи. Но это уже вопрос другой.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2008, 09:12 |
|
||
|
Связь с dbf III в ACCESS или MS Visual Studio 2005
|
|||
|---|---|---|---|
|
#18+
MdelПонимаю, что подобных вопросов было много и, возможно, постю не в ту ветку, но все таки... Имеется старая старая база, написана еще на FoxPro 2.6. и dbf III вер. в кодировке 866 Как пример, таблица Test Код: plaintext 1. 2. Проблема: 1. Если я создаю связь в Access(через ODBC), то данные поля Name выводятся в виндовой кодировке, соответственно кракозябры. Как Access можно заставить понять что надо кодировку другую выбирать. Через BDE администратора уже поменял LangDriver на "dBASE RUS cp866". Не помогло. В реестре параметры Jet менял. Не помогло... Что можно сделать? 2. Если отказаться от Access и делать все в Visual Studio 2005 (C#), то возникает проблема другого рода. Данные отображаются в корректном виде, но я не могу создать параметризированный запрос. При создании запроса вида Код: plaintext 1. Помогите советом, вроде не тупой, но тут в тупике целый день... P.S. Суть коннекта в том, что после поиска нужной записи еще необходимо будет обновить некоторые записи. Но это уже вопрос другой.. Не знаю как в С#, но в С++ есть функция CharToOEM(), которая решает вопросы преобразования Win->DOS; также есть функция OEMToChar(), которая решает обратное преобразование. Посмотри MSDN, RTFM... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2008, 09:24 |
|
||
|
Связь с dbf III в ACCESS или MS Visual Studio 2005
|
|||
|---|---|---|---|
|
#18+
досовый фокс частенько игнорирует установку кодовой страницы в заголовке DBF (ставит 0) Структуру заголовка DBF можешь в инете поискать. Там один байт за кодовую страницу отвечает. Вероятно если поставить кодовую страницу 866 то твоя DBF начнет корректно обрабатываться. Тут почитай В файле утилитка для простановки 866 кодовой страницы. Досовская, длинные имена не понимает. запускать: SET866.EXE MyDBF.DBF ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2008, 09:35 |
|
||
|
Связь с dbf III в ACCESS или MS Visual Studio 2005
|
|||
|---|---|---|---|
|
#18+
Dima Tдосовый фокс частенько игнорирует установку кодовой страницы в заголовке DBF (ставит 0) Структуру заголовка DBF можешь в инете поискать. Там один байт за кодовую страницу отвечает. Вероятно если поставить кодовую страницу 866 то твоя DBF начнет корректно обрабатываться. Тут почитай В файле утилитка для простановки 866 кодовой страницы. Досовская, длинные имена не понимает. запускать: SET866.EXE MyDBF.DBF Вся фишка в том что я не могу никаким образом менять структуру базы. то есть есть доступ только на изменение ДАННЫХ, но не структуры... база конфиденциальная.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2008, 09:46 |
|
||
|
Связь с dbf III в ACCESS или MS Visual Studio 2005
|
|||
|---|---|---|---|
|
#18+
Станислав С...кий Не знаю как в С#, но в С++ есть функция CharToOEM(), которая решает вопросы преобразования Win->DOS; также есть функция OEMToChar(), которая решает обратное преобразование. Посмотри MSDN, RTFM... Данные преобразование будет происходить только на клиенте или опять же менять в базе туда-сюда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2008, 09:47 |
|
||
|
Связь с dbf III в ACCESS или MS Visual Studio 2005
|
|||
|---|---|---|---|
|
#18+
MdelВся фишка в том что я не могу никаким образом менять структуру базы. то есть есть доступ только на изменение ДАННЫХ, но не структуры... база конфиденциальная.. Это не изменение структуры это штатное состояние таблицы. Как раз отсуствие признака кодовой страницы это нарушение структуры таблицы. Либо прийдется при экспорте перегонять позаписьно с конвертацией текстовых полей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2008, 09:52 |
|
||
|
Связь с dbf III в ACCESS или MS Visual Studio 2005
|
|||
|---|---|---|---|
|
#18+
MdelВся фишка в том что я не могу никаким образом менять структуру базы. то есть есть доступ только на изменение ДАННЫХ, но не структуры... база конфиденциальная.. MdelДанные преобразование будет происходить только на клиенте или опять же менять в базе туда-сюда? Если так, то туда-сюда, со всем вытекающим геммороем. Если кодовая страница в заголовке случайно появится, то все сглючит. Надо проверку что CP=0 Давно, когда переводил проги с FPD на VFP. В досовой проге делал следующее - после индексирования и упаковки запускал простановку кодовой страницы, т.к. теряется она похоже после команды PACK, которая по сути создает новую DBF и записывает ее на место старой. Я бы это изменением структуры не назвал, т.к. FPD ни как не использует кодовую страницу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2008, 09:59 |
|
||
|
Связь с dbf III в ACCESS или MS Visual Studio 2005
|
|||
|---|---|---|---|
|
#18+
1. Создать текстовый файл config.fpw 1.1. В нём написать одну строчку CODEPAGE = AUTO 1.2. Положить рядом с табличками 2. Использовать OLEDB Provider for VFP 9 3. Так же при выборке данных можно использовать CPCONVERT(), хотя чЁ то в ф-ия поддерживаемых провайдером этой ф-ии нет, странно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2008, 10:03 |
|
||
|
Связь с dbf III в ACCESS или MS Visual Studio 2005
|
|||
|---|---|---|---|
|
#18+
Mdel Станислав С...кий Не знаю как в С#, но в С++ есть функция CharToOEM(), которая решает вопросы преобразования Win->DOS; также есть функция OEMToChar(), которая решает обратное преобразование. Посмотри MSDN, RTFM... Данные преобразование будет происходить только на клиенте или опять же менять в базе туда-сюда? CharToOEM() / OEMToChar() меняют данные на клиенте. Вы вообще-то в MSDN заглядывали, описание функций читали? Алгоритм такой: 1. Считать текстовое поле ( Field("<Имя_поля>") ) из Recordset в массив (char *); 2. Массив преобразовать при помощи CharToOEM(); 3. Выдать преобразованный массив "клиенту" на просмотр/редактирование... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2008, 10:09 |
|
||
|
Связь с dbf III в ACCESS или MS Visual Studio 2005
|
|||
|---|---|---|---|
|
#18+
Станислав С...кийАлгоритм такой: 1. Считать текстовое поле ( Field("<Имя_поля>") ) из Recordset в массив (char *); 2. Массив преобразовать при помощи CharToOEM(); 3. Выдать преобразованный массив "клиенту" на просмотр/редактирование... Только проверку кодовой страницы еще нужно. Без нее при CP=866 в заголовке двойная конвертация пойдет. Я так обычно 866 dbf-ки читаю: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2008, 10:25 |
|
||
|
Связь с dbf III в ACCESS или MS Visual Studio 2005
|
|||
|---|---|---|---|
|
#18+
В общем, ситуация показа следующее: с кодировкой я поступил как советовал PaulWist, то есть select cpconvert(866,1251, name) from table... А теперь столкнулся с другой проблемой, что при попытке вывести грид, в котором данные берутся из 3 таблиц(1 000 000 строк в первой, 40 000 во второй и 150 в третьей), то время выполнения запроса неприлично длительное... запрос очень простой(примерно): select a.name, b.vid, c.article from a,b,c where a.id=b.id and a.c_id=c.id and a.name='имя'. Просьба к пишущим на Visual FoxPro. Где можно взять пример проекта, работающего с dbf файлом, то есть выводящего его на экран+возможность изменить нужное поле по запросу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2008, 09:07 |
|
||
|
Связь с dbf III в ACCESS или MS Visual Studio 2005
|
|||
|---|---|---|---|
|
#18+
Mdel... то время выполнения запроса неприлично длительное... запрос очень простой(примерно): select a.name, b.vid, c.article from a,b,c where a.id=b.id and a.c_id=c.id and a.name='имя'. Размеры таблиц какие? Вероятней всего индексы не используются. Если индекс имеет то же имя файла, то фокс откроет его автоматом (например My.dbf и My.cdx) в остальных случаях dbf должен быть предварительно открыт с явным указанием индекса Код: plaintext Если у тебя будет запись в dbf, то при закрытых индексах будет рассогласование DBF и индексов. Попробуй так Код: plaintext Mdel ... Просьба к пишущим на Visual FoxPro. Где можно взять пример проекта, работающего с dbf файлом, то есть выводящего его на экран+возможность изменить нужное поле по запросу? Фокс не Access, тут мышекликами много не сделаешь. Рекомендую книжку почитать для начала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2008, 09:24 |
|
||
|
Связь с dbf III в ACCESS или MS Visual Studio 2005
|
|||
|---|---|---|---|
|
#18+
Dima TРазмеры таблиц какие? Извини, сразу не заметил Mdel... 1 000 000 строк в первой, 40 000 во второй и 150 в третьей ... Тогда точно индексы не работают. Нужны индексы по B.ID, C.ID Если размер A 1 000 000 строк то еще индекс нужен по A.NAME ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2008, 09:44 |
|
||
|
Связь с dbf III в ACCESS или MS Visual Studio 2005
|
|||
|---|---|---|---|
|
#18+
Да вы поймите, что я не в фоксе пишу :) а в visual студии :) В фоксе я писал раньше (2 года назад), уже подзабыл все. И последний вопрос. Соединяюсь в студии через MS Visual FoxPro driver for OLE DB, присоединяю dsn - папку, в которой лежат 4 нужных мне dbf-ки. 3 файла построитель видит, 1-в упор не видит (которая на 1 млн записей). индекс файл на месте лежит, через другого провайдера тоже видно этот файл. Почему такое может быть? P.S. А как заставить C# читать индексы dbf III v.? В опциях ничего такого не вижу, хоть убейте... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2008, 08:44 |
|
||
|
Связь с dbf III в ACCESS или MS Visual Studio 2005
|
|||
|---|---|---|---|
|
#18+
MdelДа вы поймите, что я не в фоксе пишу :) а в visual студии :) В фоксе я писал раньше (2 года назад), уже подзабыл все. Это я из первого поста понял. Я идеологию работы пытался объяснить. MdelP.S. А как заставить C# читать индексы dbf III v.? В опциях ничего такого не вижу, хоть убейте... Еще раз: Если индекс имеет то же имя файла что и DBF, то фокс (или драйвер) откроет его автоматом (например My.dbf и My.cdx) в остальных случаях dbf должен быть предварительно открыт с явным указанием индекса У тебя одноименные? ТаблицаНа1МлнЗаписей.dbf и ТаблицаНа1МлнЗаписей.cdx ? PS А что мешает фокс запустить и выполнить тот-же запрос? Достаточно написать в окне "Command" и enter нажать. Для смены рабочей папки SET DEFAULT TO "c:\MyFolder\" Тут мало кто использует MS Visual FoxPro driver for OLE DB, т.к. из фокса оно не надо. Где-то упоминалось что драйвер покривее чем сам фокс работает. Попробуй сначала из фокса добиться чего тебе надо, а потом через драйвер повторить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2008, 09:23 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=35064352&tid=1588267]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
48ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 247ms |
| total: | 366ms |

| 0 / 0 |
