Пуск » Настройка » Панель управления » Язык и региональные стандарты = закладка "Языки", поставить галочку "Установить поддержку языков с письмом иероглифами".
Согласиться с предложением ОС о том, что потребуется дополнительно 230 Мб свободного места на винте, после копирования файлов перезагрузить комп.
FireFenix писал(а):Пуск » Настройка » Панель управления » Язык и региональные стандарты = закладка "Языки", поставить галочку "Установить поддержку языков с письмом иероглифами".
Согласиться с предложением ОС о том, что потребуется дополнительно 230 Мб свободного места на винте, после копирования файлов перезагрузить комп.
Andrey Fedorov писал(а):1.
Можно поставить нормальный Microsoft OLE DB Provider for Visual FoxPro 9.0 и подключайся к dbf-кам через него, забыв об ODBC как о страшном сне.
2.
Можно перехватить ошибку и сказать на нее Resume - коннект и откроется...
P.S
По мне так лучше вариант 1.
Andrey Fedorov писал(а):Примеры с OLEDB и ODBC в приложенном файле. Для того чтобы OLEDB-провайдер правильно воспринимал кодировку она должна быть указана в 29-м байте DBF-файла - сравни мой RAION.DBF со своим. Может этом можно указать в строке подключения, но я уже не помню...
Для смены кодировок можно воспользоваться утилиткой CPDBF - см в соответствующем каталоге. Описание есть там же.
alibek писал(а):Ну не конвертируй, а заменяй байт в файле в своей программе (перед открытием файла).
Andr222 писал(а):Да, с приложенным файлом OLEDB-провайдер работает. Пробовал утилиткой конвертировать файл DBF, тоже работает.
Andr222 писал(а):И почему ODBC правильно воспринимает кодировку, вот только иногда выдает ошибку о неподдерживаемой сортировке?
Andr222 писал(а):Как это сделать? Можно примерчик!
Option Explicit
Public Sub Main()
OpenODBC
OpenOLEDB
End Sub
Public Sub OpenOLEDB()
Dim cn As New ADODB.Connection, r As New ADODB.Recordset
Dim sFile As String
SetCodePageDbf App.Path & "\RAION.DBF"
On Error GoTo Err_
cn.CursorLocation = adUseClient
cn.Provider = "VFPOLEDB.1"
cn.Open "Data Source=""" & App.Path & """;Collating Sequence=RUSSIAN"
r.Open "SELECT * FROM RAION ORDER BY [NAME]", cn, adOpenStatic, adLockReadOnly
Debug.Print
Debug.Print "--== OpenOLEDB ==--"
Do Until r.EOF
Debug.Print r!Name
r.MoveNext
Loop
Exit Sub
Err_:
MsgBox Err.Description, vbCritical
End Sub
Public Sub OpenODBC()
Dim cn As New ADODB.Connection, r As New ADODB.Recordset
On Error GoTo Err_
cn.CursorLocation = adUseClient
cn.Provider = "MSDASQL.1"
cn.Open "Persist Security Info=False;Data Source=dBASE Files;Initial Catalog=""" & App.Path & """"
r.Open "SELECT * FROM RAION ORDER BY [NAME]", cn, adOpenStatic, adLockReadOnly
Debug.Print
Debug.Print "--== OpenODBC ==--"
Do Until r.EOF
Debug.Print r!Name
r.MoveNext
Loop
Exit Sub
Err_:
If Err.Number = -2147467259 Then If cn.Errors(0).NativeError = -5026 Then Resume
MsgBox Err.Description, vbCritical
End Sub
Public Sub SetCodePageDbf(sFile As String, Optional iNewCodePage As Byte = &H26)
Dim iHFile As Integer, iCP As Byte
iHFile = FreeFile
Open sFile For Binary Access Read Write Lock Write As #iHFile
Get #iHFile, 30, iCP
If iCP <> iNewCodePage Then Put #iHFile, 30, iNewCodePage
Close #iHFile
End Sub
Andr222 писал(а):НЕеее. Я про примерчик программного изменения 29-го байтика в DBF файле на VB 6.0.
Andr222 писал(а):И еще вопрос- Что работает быстрее с DBF -----ОDBC или OLEDB?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 98