powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / DBF. oem/ansi converter
51 сообщений из 51, показаны все 3 страниц
DBF. oem/ansi converter
    #34031005
Slice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как средствами вижал бэйсика конвртнуть дбэфину из оем в анси? с помошью библиотеки
Код: plaintext
1.
Public Declare Function OemToChar Lib "user32" Alias "OemToCharA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
приходится писать CUI, так как она отлетает после одного выполнения. приходится переоткрывать программу
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34031094
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на hiprog.com был готовый класс который работает с DBF файлами без никаких дополнительных бибилиотек напрямую работает
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34031191
AndreyMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Легко.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
'в модуль.
Option Explicit

Enum idCodePage
    Win =  1251 
    Dos =  866 
    Koi =  20866 
    Iso =  28595 
End Enum

Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, _
        ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, _
        ByVal cchWideChar As Long) As Long
Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, _
        ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As String, _
        ByVal cchMultiByte As Long, ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long

Public Function ConvertCodePage(SourseString As String, inPage As idCodePage, outPage As idCodePage) As String
  Dim LenSourseString As Long
  Dim strFirst As String
  Dim strSecond As String
  Dim RetStrLong As Long
  LenSourseString = Len(SourseString)
  strFirst = String(LenSourseString *  2 , Chr( 0 ))
  strSecond = String(LenSourseString *  2 , Chr( 0 ))
  RetStrLong = MultiByteToWideChar(inPage, &H1, SourseString, LenSourseString, StrPtr(strFirst), LenSourseString)
  RetStrLong = WideCharToMultiByte(outPage,  0 , StrPtr(strFirst), RetStrLong, strSecond, LenSourseString *  2 , ByVal  0 ,  0 )
  ConvertCodePage = Left(strSecond, RetStrLong)
End Function
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34031323
Slice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34031361
AndreyMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всегда рад помочь. К тому же на таком (не подлизываясь к модерам) уважаемом форуме! (сам админ, но на менее уважаемом сайте. На своем собственном.) :))
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34032648
Slice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оказывается, что еще не совсем спасибо))))))))))))))))
Дело в том, что мне приходит файлик в OEM, мне надо его залить на SQL.
есть процедурка, о которой говорил я в самом начале (которая отлетает), так вот, она переписывает один байт и поидее этот файл становится с виндовой кодировкой. А ваша процедура, Уважаемый AndreyMp , уже работает с содержимым. С содержимым мне по выбранному пути вообще работать не надо, если только на SQL сервере, так как содержимое заливается все через DTS. Так вот, нет ли способа изменить кодировку самого файла?
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34033366
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Говорил же вам на hiprog.com есть класс для работы с DBF-файлами Кривцова А.
вот выложил пример конвертации с помощью этого класса.
класс был взят с сайта hiprog.com.
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34033367
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Примерчик чуть-чуть кривоватый, но отшлифовать не составит труда
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34034130
Slice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, порадовало
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34152138
Rustygold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orunbekГоворил же вам на hiprog.com есть класс для работы с DBF-файлами Кривцова А.
вот выложил пример конвертации с помощью этого класса.
класс был взят с сайта hiprog.com.

А никто не сталкивался с проблемой, что этот класс при создании нового файла названия всех столбцов добивает до 11 знаков пробелами? В итоге столбец "ID" в файле выглядит как "ID " со всеми вытикающими.
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34152536
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rustygold orunbekГоворил же вам на hiprog.com есть класс для работы с DBF-файлами Кривцова А.
вот выложил пример конвертации с помощью этого класса.
класс был взят с сайта hiprog.com.

А никто не сталкивался с проблемой, что этот класс при создании нового файла названия всех столбцов добивает до 11 знаков пробелами? В итоге столбец "ID" в файле выглядит как "ID " со всеми вытикающими.
не знаю, базы я еще не создавал, тока читал и экспорт в mdb и т.д.
насчет этого не знаю, автору не пробовали обратиться?
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34152682
Rustygold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не пробовал. Честно говоря, я не нашел на hiprog.com этого кода.

Попробую еще сам код поковырять - может чего откопаю...
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34637637
Letter_D
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А у меня таблица, переконвертированная с помощью Кривцова А., ничем не читается. :(
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34637647
Letter_D
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В смысле: не открывается. "Объект не найден ядром..."
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34637690
Фотография gjghjc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уменьши длину названия таблицы до 8 символов и называй только латинскими буквами.
С уважением, Николай.
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34637971
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я бы не занимался никакой конвертацией ибо в DBF-ках проще правильно выставить 29-ый байтик. И ничего конвертить не нужно будет по определению.
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34637981
Letter_D
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ааа, всё равно ошибка.
Да и я вытащил ту функцию - работает неправильно, как и OemToChar и др. ботва того же плана.
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34638223
Фотография gjghjc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2AndrF а что произойдет если данные в таблице будут хранится в DOS кодировке, а Вы поставите 29 байт соответствующий Win? Помнится я ставил такие опыты... ничего хорошего из этого не вышло.

С уважением, Николай.
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34638280
Letter_D
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gjghjc2AndrF а что произойдет если данные в таблице будут хранится в DOS кодировке, а Вы поставите 29 байт соответствующий Win? Помнится я ставил такие опыты... ничего хорошего из этого не вышло.

С уважением, Николай.

И у меня тоже не вышло :(
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34638366
Фотография gjghjc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я решил проблему следующим образом.
Файлообмен у нас осуществялся при помощи dbf - файликов. Головная контора требовала WIN1251. Чтобы сильно не иметь себе и окружающим мозг я формировал и проверял файлики в DOS866, а перед отправкой конвертил их в Win при помощи програмки DbfToWin (DbfToDos обратный конвертер). Поскольку я так и не нашел как через VB корректно работать с файлами в кодировке Win1251.
Есть еще пара конвертеров DosToWin и WinToDos, но они работают медленнее и ругаются на файлы у которых длина имени не равна 8-ми символам и начинающихся не с букв а с цифр.
У DbfToDos и DbfToWin есть грабля такого рода что если файл данные в котором хранятся в Dos кодировке повторно сконвертировать в Dos то буква Х (ха) мифическим образом меняется на скобку :)

С уважением, Николай.
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34638500
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gjghjc2AndrF а что произойдет если данные в таблице будут хранится в DOS кодировке, а Вы поставите 29 байт соответствующий Win? Помнится я ставил такие опыты... ничего хорошего из этого не вышло.

И нафига это нужно? Должен стоять байт соответствующий кодировке. Обычно так все и стоит. Но дюже редко бывают случаи, когда этот байтик установлен неверно (может злые хакеры покопались, чтобы жизнь чайникам усложнить) - его надо просто выставить соответственно кодировке (возможно еще переиндексировать таблички придется). И все - таблички будут нормально читаться. Безо всяких извратов.
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34638513
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gjghjcПоскольку я так и не нашел как через VB корректно работать с файлами в кодировке Win1251.

DBF-ка должна быть создана с 29-ым байтиком указывающим на Win-кодировку. И все.
Конкретного значения не помню - оно легко находится в интернете.
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34638920
Фотография gjghjc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создавал таблички при помощи DAO и Create Table.
в 29 байте был 0.... :(

С уважением, Николай.
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34639126
Letter_D
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gjghjcСоздавал таблички при помощи DAO и Create Table.
в 29 байте был 0.... :(

С уважением, Николай.

А можно поподробней?
Какие там параметры хитрые?
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34639189
Фотография gjghjc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гугли по "Структура DBF"

С уважением, Николай.
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34639458
Letter_D
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У нас тут форум или презентация Гугла?
:(

Спасибо.
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34639509
Фотография gjghjc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну можно и в яндексе поискать... без разницы. Суть в том что если набрать в поисковике предложеное мной словосочетание то в ссылках напервой же странице ты найдешь очень много разнообразной информации о структуре DBF таблиц. Почитаешь, переваришь. Попробуешь что-то сам... поэкспериментируешь. Или мне за тебя поискать и тебе ссылки выложить???
С уважением, Николай.
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34639758
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gjghjcСоздавал таблички при помощи DAO и Create Table.
в 29 байте был 0.... :(

Ну и? По умолчанию - OEM кодировка. Выставь данный байтик ручками. Может можно одним из параметров соединения задавать, но не гарантирую ибо не задавался целью проверить.
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34639902
Фотография gjghjc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот и нет. У меня по умолчанию почему-то всегда получалась DOS. Параметры соединения почем-то игнорировались. А вот ручками выставлять байтики мне было не с руки потому как проверить 200-300 файлов в день автоматически, а потом залезть в них и ручками поправить 29 байт... Попахивает извращением. :)
Хотя теперь вот думаю, а если при записи данных в файл конвертить строки при помощи CharToOem... может что и получится :)
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34639924
Letter_D
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне структура DBF файла как-то не нужна.
И 29-й байт у меня ни на что не влияет.
Меня интересовала строка подключения через DAO, когда таблица присоединяется с ANSI-кодировкой.
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34639974
Фотография gjghjc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чур без обид.... :)
Поиск по форуму
"DAO", "OpenDatabase" "Openrecordset"

OpenDatabase(MainPath, False, False, "dBASE IV;LANGID=0x0419;CP=866;COUNTRY=0")
Вот эта строка подключается к базе dbf при этом используется кодовая страница DOS 866.
Особо обрати внимание на то что под базой понимается ПАПКА в которой лежат твои таблицы.
Длина имени таблицы не должна превышать 8 символов и называться латинскими буквами (об этом я уже писал.)

Читай, смотри если где будут затыки в коде попробуем разобраться вместе. :)

С уважением, Николай.
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34640932
Letter_D
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага.
Вот это уже дело.
Теперь бы подключиться с виндовой кодировкой.
Параметр CP=1251 - не прокатил, ни на что не повлиял.
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34641197
Фотография gjghjc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что вообще тебе нужно сделать с этими DBF??
С уважением, Николай.
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34641373
Letter_D
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Присоединить к аккессу и поработать с ним.
Вооот.
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34641446
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
DoCmd.TransferDatabase acLink, "dBase III", только_путь, acTable, "sc16.dbf", "имя_Таблицы_в_Access-е"
это Link к базе mdb
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34641504
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эх, спорщики...

Держите код создающий две разные таблички в кодировках OEM

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
Option Explicit

Public Sub Main()
    Dim cn As New ADODB.Connection
    Dim s As String, sPath As String
    
    sPath = App.Path & "\TestDBFs\"
    On Error GoTo Err_
    If Len(Dir(sPath, vbDirectory)) =  0  Then MkDir sPath
    On Error Resume Next
    s = Dir$(App.Path & "\DBF\*.dbf")
    Do While Len(s)
        Kill App.Path & "\DBF\" & s
        s = Dir$
    Loop
    On Error GoTo Err_
    
    Set cn = New ADODB.Connection
    cn.Provider = "Microsoft.Jet.OLEDB.4.0"
    cn.Open "Data Source=" & sPath & ";Extended Properties=dBASE IV"
    ' OEM
    cn.Execute "CREATE TABLE tbOEM (t TEXT(50))"
    cn.Execute "INSERT INTO tbOEM (t) VALUES ('Проверочка OEM')"
    
    ' ANSII
    cn.Execute "CREATE TABLE tbANSII (t TEXT(50))"
    If ChangeDbfCodePageToANSII(sPath & "tbANSII.DBF") Then
        cn.Execute "INSERT INTO tbANSII (t) VALUES ('Проверочка ANSII')"
    End If
    cn.Close
    Exit Sub

Err_:
    With cn.Errors
        If .Count Then
            With .Item( 0 )
                If .NativeError = - 329323426  And .Number = - 2147467259  Then Resume
            End With
        End If
    End With
    MsgBox Err.Description, vbCritical
End Sub

Public Function ChangeDbfCodePageToANSII(sDbfPath As String) As Boolean
    Dim iHFile As Integer, s As String, b As Byte
    
    On Error GoTo Err_
    iHFile = FreeFile
    Open sDbfPath For Binary Access Read Write Lock Read Write As #iHFile
    Seek #iHFile,  30 
    Get #iHFile, , b
    If b <>  87  Then
        Seek #iHFile,  30 
        Put #iHFile, , CByte( 87 )
    End If
    Close #iHFile: iHFile =  0 
    ChangeDbfCodePageToANSII = True
    Exit Function
    
Err_:
    s = Err.Description
    If iHFile Then Close #iHFile: iHFile =  0 
    MsgBox s, vbCritical
End Function
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34641510
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrFЭх, спорщики...

Держите код создающий две разные таблички в кодировках OEM и ANSII и пишущий в них строку данных. Любая из этих табличек правильно откроется в том-же Access...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
Option Explicit

Public Sub Main()
    Dim cn As New ADODB.Connection
    Dim s As String, sPath As String
    
    sPath = App.Path & "\TestDBFs\"
    On Error GoTo Err_
    If Len(Dir(sPath, vbDirectory)) =  0  Then MkDir sPath
    On Error Resume Next
    s = Dir$(App.Path & "\DBF\*.dbf")
    Do While Len(s)
        Kill App.Path & "\DBF\" & s
        s = Dir$
    Loop
    On Error GoTo Err_
    
    Set cn = New ADODB.Connection
    cn.Provider = "Microsoft.Jet.OLEDB.4.0"
    cn.Open "Data Source=" & sPath & ";Extended Properties=dBASE IV"
    ' OEM
    cn.Execute "CREATE TABLE tbOEM (t TEXT(50))"
    cn.Execute "INSERT INTO tbOEM (t) VALUES ('Проверочка OEM')"
    
    ' ANSII
    cn.Execute "CREATE TABLE tbANSII (t TEXT(50))"
    If ChangeDbfCodePageToANSII(sPath & "tbANSII.DBF") Then
        cn.Execute "INSERT INTO tbANSII (t) VALUES ('Проверочка ANSII')"
    End If
    cn.Close
    Exit Sub

Err_:
    With cn.Errors
        If .Count Then
            With .Item( 0 )
                If .NativeError = - 329323426  And .Number = - 2147467259  Then Resume
            End With
        End If
    End With
    MsgBox Err.Description, vbCritical
End Sub

Public Function ChangeDbfCodePageToANSII(sDbfPath As String) As Boolean
    Dim iHFile As Integer, s As String, b As Byte
    
    On Error GoTo Err_
    iHFile = FreeFile
    Open sDbfPath For Binary Access Read Write Lock Read Write As #iHFile
    Seek #iHFile,  30 
    Get #iHFile, , b
    If b <>  87  Then
        Seek #iHFile,  30 
        Put #iHFile, , CByte( 87 )
    End If
    Close #iHFile: iHFile =  0 
    ChangeDbfCodePageToANSII = True
    Exit Function
    
Err_:
    s = Err.Description
    If iHFile Then Close #iHFile: iHFile =  0 
    MsgBox s, vbCritical
End Function
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34641538
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чуть поправил:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
Option Explicit

Public Sub Main()
    Dim cn As New ADODB.Connection
    Dim s As String, sPath As String
    
    sPath = App.Path & "\TestDBFs\"
    On Error GoTo Err_
    If Len(Dir(sPath, vbDirectory)) =  0  Then MkDir sPath
    On Error Resume Next
    s = Dir$(sPath & "*.dbf")
    Do While Len(s)
        Kill sPath & s
        s = Dir$
    Loop
    On Error GoTo Err_
    
    Set cn = New ADODB.Connection
    cn.Provider = "Microsoft.Jet.OLEDB.4.0"
    cn.Open "Data Source=" & sPath & ";Extended Properties=dBASE IV"
    ' OEM
    cn.Execute "CREATE TABLE tbOEM (t TEXT(50))"
    cn.Execute "INSERT INTO tbOEM (t) VALUES ('Проверочка OEM')"
    
    ' ANSII
    cn.Execute "CREATE TABLE tbANSII (t TEXT(50))"
    If ChangeDbfCodePageToANSII(sPath & "tbANSII.DBF") Then
        cn.Execute "INSERT INTO tbANSII (t) VALUES ('Проверочка ANSII')"
    End If
    cn.Close
    Exit Sub

Err_:
    With cn.Errors
        If .Count Then
            With .Item( 0 )
                If .NativeError = - 329323426  And .Number = - 2147467259  Then Resume
            End With
        End If
    End With
    MsgBox Err.Description, vbCritical
End Sub

Public Function ChangeDbfCodePageToANSII(sDbfPath As String) As Boolean
    Dim iHFile As Integer, s As String, b As Byte
    
    On Error GoTo Err_
    iHFile = FreeFile
    Open sDbfPath For Binary Access Read Write Lock Read Write As #iHFile
    Seek #iHFile,  30 
    Get #iHFile, , b
    If b <>  87  Then
        Seek #iHFile,  30 
        Put #iHFile, , CByte( 87 )
    End If
    Close #iHFile: iHFile =  0 
    ChangeDbfCodePageToANSII = True
    Exit Function
    
Err_:
    s = Err.Description
    If iHFile Then Close #iHFile: iHFile =  0 
    MsgBox s, vbCritical
End Function
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34641603
Фотография gjghjc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tbANSII.DBF содержится вместо информации куча знаков вопроса....
цитирую :)
?????????? ANSII
А oem читается нормально

С уважением, Николай.
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34641635
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gjghjctbANSII.DBF содержится вместо информации куча знаков вопроса....
цитирую :)
?????????? ANSII
А oem читается нормально

Смотрим на скриншот во вложенном файле.

P.S Откуда я знаю чем у Вас читается...
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34641779
Фотография gjghjc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А на какой версии ADO галочка стоит???
Ибо сделал все тоже самое.... содержимое tbANSII.DBF не читается :(
Вот эти версии ADO стоят у меня. Может заплатку какую привинтить???
С уважением, Николай.
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34641796
Letter_D
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смена бита по смещению 29 ничего не дает.
А обе таблицы читаются нормально, ибо в обеих записан ASCII русский текст.
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34641949
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Letter_DСмена бита по смещению 29 ничего не дает.
А обе таблицы читаются нормально, ибо в обеих записан ASCII русский текст.
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34641972
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Letter_DСмена бита по смещению 29 ничего не дает.
А обе таблицы читаются нормально, ибо в обеих записан ASCII русский текст.

Вот мои таблички.
Посмотрев их даже тем-же FAR-ом можно явно увидеть что они записались в разных кодировках.
Попробуйте прилинковать любую из них в Access-e - увидите то что я присылал на скриншоте.
Любая из них нормально откроется и из кода.

Что-же я все-же не так делаю-то, что все работает без проблем??? И притом много лет.

Ибо про 29-ый байтик я узнал еще со времен FoxPro for Dos v2.5 - лет так ~15 назад...
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34642114
Фотография gjghjc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никто не спорит с тобой, просто я пытаюсь понять почему у меня на протяжении 3-лет все попытки научится корректно работать с DBF таблицами в WIN кодировке заканчивались полным крахом. И даже сейчас когда ты дал готовый код у меня все равно ничего не получается. Мне вот что интересно. С какой версией ADO ты работаешь??? Скорее всего дело в этом... хотя.. хвост его знает. Сначала я обрадовался как слон думаю ну все.. мучения закончились.. есть красивый рабочий код, ан нет..

С уважением, Николай.
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34642438
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gjghjcСначала я обрадовался как слон думаю ну все.. мучения закончились.. есть красивый рабочий код, ан нет...

Не все еще потеряно.

Значит так - приведенный выше код я набрасывал и проверял на рабочей машине (WinXP).
Дома он не пошел (Vista) - в табличку писались вопросики.

На скорую руку внес небольшие изменения:

Так создаем таблички, чтобы они создались в старом DOS-формате (впрочем тут все как и раньше):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
    Set cn = New ADODB.Connection
    cn.Provider = "Microsoft.Jet.OLEDB.4.0"
    cn.Open "Data Source=""" & sPath & """;Extended Properties=dBASE IV"
    ' OEM
    cn.Execute "CREATE TABLE tbOEM (t CHAR(50))"
    ' ANSII
    cn.Execute "CREATE TABLE tbANSII (t TEXT(50))"
    ChangeDbfCodePageToANSII sPath & "tbANSII.DBF"

А вот через такой коннект с ними работаем дальше:

Код: plaintext
1.
2.
3.
4.
5.
6.
    Set cn = New ADODB.Connection
    cn.Provider = "VFPOLEDB.1"
    cn.Open "Data Source=""" & sPath & """;Collating Sequence=RUSSIAN"
    
    cn.Execute "INSERT INTO tbOEM (t) VALUES ('Проверочка OEM')"
    cn.Execute "INSERT INTO tbANSII (t) VALUES ('Проверочка ANSII')"

Так все заработало и дома.

------------
Что установлено на рабочей машине что там все работает без проблем я уж не помню - мне не столь часто приходится работать с Win-кодировкой в DBF-ках, чтобы на этом заостряться.
--
OLEDB-шного провайдера для FoxPro я брал здесь .
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34642585
Фотография gjghjc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, попробую помучать этот код. :)

С уважением, Николай.
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34643086
Letter_D
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я посмотрел b FAR'ом и блокнотом - в обоих таблицах текст записался ANSI русской кодировкой.
У меня стоит XP и Office 2002.
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34643123
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Letter_DЯ посмотрел b FAR'ом и блокнотом - в обоих таблицах текст записался ANSI русской кодировкой. У меня стоит XP и Office 2002.

Последний пример (с FoxPro-шным провайдером) отлично отрабатывает на рабочей и домашней машине.
--------------

Вообще-же меня сейчас больше интересует вопрос - из-за чего возникает разница в работе с DBF-ками провайдера Microsoft.Jet.OLEDB.4.0 на разных машинах...
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34644659
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrFВообще-же меня сейчас больше интересует вопрос - из-за чего возникает разница в работе с DBF-ками провайдера Microsoft.Jet.OLEDB.4.0 на разных машинах...Разные кодировки по умолчанию на уровне системы.
...
Рейтинг: 0 / 0
DBF. oem/ansi converter
    #34644696
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl AndrFВообще-же меня сейчас больше интересует вопрос - из-за чего возникает разница в работе с DBF-ками провайдера Microsoft.Jet.OLEDB.4.0 на разных машинах...Разные кодировки по умолчанию на уровне системы.

Это не причем. В обоих местах установлены русские версии Windows. Настройки везде одинаковы (по крайней мере я ничего такого в операционке не выкручиваю). В табличках явно задана их кодовая страница - так что и никакого умолчания нет. Тем не менее провайдер Microsoft.Jet.OLEDB.4.0 на одной машине отрабатывает правильно (распознавая кодовую страницу как надо), а на другой - нет. И с теми-же табличками FoxPro-шный провайдер на обоих машинах работает без проблем...
...
Рейтинг: 0 / 0
51 сообщений из 51, показаны все 3 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / DBF. oem/ansi converter
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]