Как прочесть dbf в 866 кодировке? (+)

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Kundor
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 22.11.2003 (Сб) 15:59
Откуда: Астрахань

Как прочесть dbf в 866 кодировке? (+)

Сообщение Kundor » 20.07.2006 (Чт) 9:10

Задача такая - прочитать периодически заменяемую базу в dbf формате dBaseIV. Я попробовал сделать так:
===
Set conn = New ADODB.Connection
Dim RST As New ADODB.Recordset
Path = "c:\Projects\CommPlat\"
conn.Provider = "Microsoft.Jet.OLEDB.4.0"
ConnectionString = "Data Source=" + Path + ";Extended Properties=DBASE IV"
conn.Open (ConnectionString)
ComText = "Select * from LS"
RST.ActiveConnection = conn
RST.Open ComText, conn
StartForm.FIOText = RST!fio
===
в итоге в текстовом поле получаю кракозябры вместо русских букв :( . подскажите - как справится с этим?

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Сообщение HandKot » 20.07.2006 (Чт) 10:36

Попробуй вместо Microsoft.Jet.OLEDB.4.0 использовать VisualFoxPro driver

либо используй ODBC

Kundor
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 22.11.2003 (Сб) 15:59
Откуда: Астрахань

Сообщение Kundor » 20.07.2006 (Чт) 10:50

пробовал.. :(
==
Set oConn = New ADODB.Connection
Set oRS = New ADODB.Recordset
oConn.Open "Driver={Microsoft Visual FoxPro driver};SourceType=DBF;SourceDb=c:\Projects\CommPlat\;"
Set oRS.ActiveConnection = oConn
oRS.CursorType = adOpenKeyset
oRS.LockType = adLockOptimistic
oRS.Open "select * from ls"
==
на последней команде получаю сообщение:
"Драйвер ODBC не поддерживает требуемые свойства"
:shock: мож что не так написал я ?

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Сообщение HandKot » 20.07.2006 (Чт) 11:39

а если так
Код: Выделить всё
"Provider=VFPOLEDB.1;Data Source=C:\1;Password='';Collating Sequence=MACHINE"


или тута
http://bbs.vbstreets.ru/viewtopic.php?t=2308&sid=a638cf7016aad1076df7d3321d8a1cf8

а вообще, ПОИСК рулит, такие вопросы постоянно на форумах всплывают

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 20.07.2006 (Чт) 12:56

Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=dBASE IV;Data Source=C:\DBF\MY.DBF


29-ый байтик DBF-файла указывает на его кодировку. Для 866-ой странички он должен быть равен 0.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Kundor
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 22.11.2003 (Сб) 15:59
Откуда: Астрахань

Сообщение Kundor » 20.07.2006 (Чт) 14:42

Нечто вообще странное получается. Посмотрел одним dbf-viewer-ом эту базу - смотрю - а она в русском изображается с пометкой ansi.
приписал в проект такой код:
Public Declare Function CharToOem Lib "user32" Alias "CharToOemA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
Dim source As String, destination As String

Public Function T2T(sourcestring)
destination = Space(Len(sourcestring))
rc = CharToOem(sourcestring, destination)

смотрю destination - а там должна быть фамилия имя отчество - так всё переведено на русский нормально, за исключением больших первых букв - они латинские :(
в чём прикол с этой базой???

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 20.07.2006 (Чт) 17:23

Kundor писал(а):...CharToOem...
тут вообще не к месту. Или байт править, или перебрось все в mdb и любуйся

Kundor
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 22.11.2003 (Сб) 15:59
Откуда: Астрахань

Сообщение Kundor » 21.07.2006 (Пт) 7:31

Дело в том, что эта база в таком виде будет часто присылаться извне, потому хотелось бы написать лучше код, который будет принимать её как есть.
А заодно вопросик- не подскажете кода, который бы изменил этот байтик? пжалуйста.. :)

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 21.07.2006 (Пт) 7:38

Кстати стало интересно: если прилинковать dbf к mdb и смотреть как таблицу в mdb, это дело не полечится само собою?

Kundor
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 22.11.2003 (Сб) 15:59
Откуда: Астрахань

Сообщение Kundor » 21.07.2006 (Пт) 8:01

На данный момент это вылечилось так: у меня в total commander прикручен какой-то вьювер dbf - так в нём, копаясь в этой базе обнаружил пункт в меню - Convert. Нажал - он спрашивает " Произвести конвертацию?" в итоге минут 5 лопатил он базу и после этого - мой проект открывает её без проблем, всё на русском. Что там конвертор изменил - не знаю.. Но ессно хотелось бы самому в код прописать нужные изменения базы - потому как не хочу зависеть от стороннего софта.

blinow
Обычный пользователь
Обычный пользователь
 
Сообщения: 53
Зарегистрирован: 27.06.2005 (Пн) 3:13

Сообщение blinow » 25.08.2006 (Пт) 3:38

Скачай с Microsofta "Microsoft OLE DB Provider for Visual FoxPro 9.0"


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList