Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.28;
Скачать: CL | DM;

Вниз

Кодировка dBase при использовании ADO +Jet 4.0   Найти похожие ветки 

 
mvg_first ©   (2004-02-19 10:00) [0]

Мне нужно выполнять SQL Запросы к таблицам dBase. Я положил на форму AdoConnection TAdoQuery DataSource и dbGrid.

В свойстве ConnectionString указал "Provider = Microsoft.Jet.OLEDB.4.0; Data Source= C:\temp; Extended properties="dBase 5.0";";

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

Каким образом и где что нужно поменять (я так понимаю именно в ConnectionString) что бы русские значения полей отображались корректно.


 
mvg_first ©   (2004-02-19 10:07) [1]

На всякий случай уточню может для кого будет более понятно с чем борюсь.
Таблицы к которым хочу выполнять запросы - это dbf - таблицы программы 1С предприятие.

Ну и еще скажу что когда пробовал открывать эти таблицы просто блокнотом то все русские значения читались замечательно.


 
Opilki_Inside ©   (2004-02-19 10:17) [2]

Попробуй открыть файл *.dbf с помощью какого-нить редактора типа FAR"a и 30 символ замени на "&" это русская кодировка


 
mvg_first ©   (2004-02-19 10:25) [3]

Вся проблема в том что- ничего менять в этих DBF нельзя. Ибо как та прога что я пришу это лишь вспомогательная система для более быстрого формирования отчетов и более широких вариантов поиска в БД. Поэтому все запросы планируется только ReadOnly характера, ну и понято что никаких изменений в структуре файлов быть недолжно. На них будет продолжать работать 1С


 
mvg_first ©   (2004-02-19 10:29) [4]

Еще если вдруг возникнет вопрос - почему не через BDE. Скажу - ADO сейчас есть почти на каждой машине работающей под W2k BDE придется устанавливать везде где нужно запустить мою прогу - а это меня не устраивает :)


 
Opilki_Inside ©   (2004-02-19 10:38) [5]

а скопировать файлы которые ты собираешься открыть в другую директорию и изминить 30-ый символ?
Да и вобще, ты посмотри на 30-ый символ, может там уже "&" и стоит... или хотя бы попрорбуй, может и не в этом дело вобще...


 
sniknik ©   (2004-02-19 10:41) [6]

> Еще если вдруг возникнет вопрос - почему не через BDE.
почитай, особенно последний пост
http://delphimaster.net/view/3-1076774946/

> Скажу - ADO сейчас есть почти на каждой машине...
а вот jet-а чаше нет на новых установках.

> Таблицы к которым хочу выполнять запросы - это dbf - таблицы программы 1С предприятие.
попробуй такую строку для них
Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DRIVER={Microsoft Visual FoxPro Driver};UID=;SourceDB=C:\temp;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;"


 
mvg_first ©   (2004-02-19 10:59) [7]

Opilki_Inside
Это кардинально не тот метод которым я хочу пользоваться, я знаю одно 1С их показыват по русски, блокнотом или другим текстовым (не UNICODE) отображаются по русски. Значит и моя программа должна это видеть. И основная суть вопроса это какую конфигурационную строку задать в ADOConnection


 
mvg_first ©   (2004-02-19 11:14) [8]

sniknik
Попробовал:
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EOleException with message "[Microsoft][ODBC Driver Manager] Driver does not support this function". Process stopped. Use Step or Run to continue.


 
mvg_first ©   (2004-02-19 11:16) [9]

Когда это вылетает?
Когда говорю
ADOConnection.Connected := true;


 
mvg_first ©   (2004-02-19 11:20) [10]

Попробовал ставить эту строку не программно а использовать кномполку Build  - оказывается нет у меня в ODBC такого драйвера :) Может по этому?


 
mvg_first ©   (2004-02-19 11:35) [11]

Как вариант решения найдено следующее (где найдено? - в справке по JET файл JETSQL40.CHM поставляется вместе с оффисом)
В регистре в ключе

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Xbase

меняем значение у реквизита DataCodePage на ANSI и телемаркет


 
sniknik ©   (2004-02-19 11:51) [12]

mvg_first ©   (19.02.04 11:20) [10]
возможно, читал на мелкософте что с какойто версии не включаются, можно доставить, оттудаже с мелкософта.
но это родные драйвера для 1C таблиц.

mvg_first ©   (19.02.04 11:35) [11]
если бы посмотрел ссылку, то увидел бы анологичное решение, а также  возможную дырку для глюков. (установлено/неустановлено BDE)


 
mvg_first ©   (2004-02-19 12:15) [13]

sniknik ©   (19.02.04 11:51) [12]
Прикол в том что ссылку я читал (но видать не все видел :) :) )
В чем дырка для глюков? В хелпе как раз написано что:

DataCodePage Этот параметр используется только в том случае, если на данном компьютере не установлено приложение BDE.
Определяет способ сохранения текстовых страниц. Возможные значения:

OEM — Преобразования из OEM в ANSI и из ANSI в OEM выполняются.
ANSI — Преобразования из OEM в ANSI и из ANSI в OEM не выполняются.
По умолчанию задается значение «OEM». Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.


Но при этом у меня получается BDE установлен (ставился по умолчанию вместе с дельфином) и все равно этот параметр значение имеет :) Потому как помог. Получается на машинах где его нет тоже поможет - исходя из инструкции выше :)


 
sniknik ©   (2004-02-19 12:27) [14]

> Но при этом у меня получается BDE установлен (ставился по умолчанию вместе с дельфином) и все равно этот параметр значение имеет :)
т.е. у тебя счас все зашибись? инфа по русски?
могу сделать вывод что в BDE у драйверов dBase и(или) Foxpro (не могу так сказать какой влияет) стоит ленгдрайвер "ascii" ANSI (ANCYRR, без конвертации), поставь на оба dBASE RUS cp866 и проверь свою прогу еще раз на русские буквы. (после изменений программу надо перестартовать).
(???) ну как? а это основное значение в россии для прог использующих BDE.


 
mvg_first ©   (2004-02-19 12:54) [15]

Ну тут ты прав. Спорить не буду. Как это можно обойти?

На вскидку только два варианта - или пользователь сам выполняет переключение в программе если видит нечитаемые данные или одно из двух :)

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

Или каким то образом проверять что установлено на машиен какой ленгдрайвер установлен для dBase и менять его находу. Если стоит не Ansi.

Кстати как программно проверить установленно ли БДЕ и какой ленгдрайвер у ДБэйс???


 
sniknik ©   (2004-02-19 13:00) [16]

> Ну тут ты прав.
а до этого значит был не прав? ну чтож, спасибо.


 
mvg_first ©   (2004-02-19 13:05) [17]

Ну вот - начинается (я где-то это говорил) Блин у меня жена точно так же все наровит перекрутить :)
Кстати скачал поставил драйвера для Visual Fox Pro 6 - и все заработало


 
mvg_first ©   (2004-02-19 13:06) [18]

Респект!


 
Anatoly Podgoretsky ©   (2004-02-19 13:11) [19]

Весь вопрос а какой формат у таблиц из 1С
Для dBase ниже 7 поддержана только одна русская кодировка 866, для Фокспро 2.6 + две 866 и 1251
Возможно еще использовать машинную кодировку "ascii" ANSI

После этого возникает следующий вопрос, работа с JET различается установлен БДЕ или нет, в первом случае используются настройки из БДЕ, во втором из указанных ключей. По умолчанию преобразование из OEM в ANSI


 
sniknik ©   (2004-02-19 13:29) [20]

> Ну вот - начинается (я где-то это говорил) Блин у меня жена точно так же все наровит перекрутить :)
а ты поменяй стиль разговора, вместо того чтобы (относительно жены) говорить "ну сейчас ты права дорогая" говори "дорогая! ты как всегда права" (даже если это не так), посмотриш будут ли "перекруты". (это я о том что это в основном от тебя зависит)

> Кстати скачал поставил драйвера для Visual Fox Pro 6 - и все заработало
все? сомнительно, все никогда работать не будет. попробуй индекс создать в этом конкретном случае (Visual FoxPro).

Anatoly Podgoretsky ©   (19.02.04 13:11) [19]
> Весь вопрос а какой формат у таблиц из 1С
в 1С пока встречал только 1251. возможно есть и вторая в более ранних версиях, но с ними к счастью не работаю. (и так головной боли хватает, еще и это делить)


 
mvg_first ©   (2004-02-19 13:30) [21]

Anatoly Podgoretsky ©   (19.02.04 13:11) [19]
Спасибо за дополнительное разъяснение касательно форматов. Но уже выснили что формат Visual FoxPro

Нашли оптимальный способ открытия, используя драйвер ODBC.

Но у меня сразу же вопрос в догонку. Етстовая база на которой я тренировался находится у меня в каталоге C:\Temp. Там все работает. А вот когда я попробовал настроится на рабочую базу которая у меня лежит в d:\Projects\1C_Config"s\kondceh\ прога рукается говорит таблица sc148.dbf не может быть найдена или шо то в этом духе. Я так понимаю что указывать путь содержит знак " для ODBC драйвера - есть некорретное поведение. Но мне то надо открыть именно так? 1С ведь открывает эту базу и успешно ею пользуется.

Вопрос на ту же тему только чуть по другому Подключиться к БД FOXPRO  не указывая каталог, так что бы талицы искались в текущем каталоге где и расположенна программа.


 
mvg_first ©   (2004-02-19 13:33) [22]

Ух и стиль блин. Прошу прощения за грамматику и стиль -спешу побольше задать вопросов - вот и получается такое :(


 
sniknik ©   (2004-02-19 14:06) [23]

два варианта
1
настроить путь в ODBC алиасе и конект делать через него, так
Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DSN=Visual FoxPro Tables;"
(считаем что здесь путь задан ;о))
2
задавать коротким досовским путем
будет так
d:\Projects\1C_Con~1\kondceh\
но тоже возможны глюки (с тем же успехом может быть 2 в конце, если есть еще аналогичное начало)
лутше его програмно получить, есть функция такая (искать лень, а на память не помню).

может и еще как можно, не в курсе.


 
mvg_first ©   (2004-02-19 14:26) [24]

Еще один вариант.
Тянем вот отсюда
http://download.microsoft.com/download/4/3/f/43fbe7c7-81ae-4a0e-acc1-8532a99c5d2d/vfpoledb.exe

OLE Provider For Visual FoxPro устанавливаем и наслаждаемся жизнью :).
Подключается на все каталоги, и все культурно и красиво показывает. Ну и я так понимаю ODBC не используется.


 
sniknik ©   (2004-02-19 15:36) [25]

mvg_first ©   (19.02.04 10:29) [4]
> Еще если вдруг возникнет вопрос - почему не через BDE. Скажу - ADO сейчас есть почти на каждой машине работающей под W2k BDE > придется устанавливать везде где нужно запустить мою прогу - а это меня не устраивает :)
с чего начали, к чему пришли
> OLE Provider For Visual FoxPro устанавливаем и наслаждаемся жизнью :).
от одной установки в пользу другой ...

ты скажи, индексы создавать пробовал? > sniknik ©   (19.02.04 13:29) [20]
или оно тебе не нужно?


 
mvg_first ©   (2004-02-19 16:06) [26]

sniknik ©   (19.02.04 15:36) [25]
>от одной установки в пользу другой ...
Установка установке рознь. BDE напорядок неудобнее. Да и мне кажется всех прелестей SQL он не позволит. Да и для подключения именно к этим DBF все равно придется использовать драйвер ODBC.
Ну и еще есть один аспект о котором я ранее не упоминал, у меня уже есть программа которая работает через ADO но с SQL  базой. Пэтому даже при всех прочих равных условиях Адо для меня более приоритетно.

А насчет индексов - не создавал, потому что 1С в принципе сама их создает где нужно. А там где не создаст врядли они помогут мне так кажется.



Страницы: 1 вся ветка

Текущий архив: 2004.03.28;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.021 c
7-1073129488
Ilg
2004-01-03 14:31
2004.03.28
Смена разрешения экрана


14-1077718833
Undert
2004-02-25 17:20
2004.03.28
MySQL


1-1078391917
AlexanderSK
2004-03-04 12:18
2004.03.28
Доступ к объекту из нескольких потоков


8-1068984660
Yagoda
2003-11-16 15:11
2004.03.28
Как избавится от мигания PaintBox-а ?


1-1078919810
Ш-К
2004-03-10 14:56
2004.03.28
Bin to XML