Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / DBF. oem/ansi converter / 25 сообщений из 51, страница 1 из 3
04.10.2006, 11:46
    #34031005
Slice
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBF. oem/ansi converter
Как средствами вижал бэйсика конвртнуть дбэфину из оем в анси? с помошью библиотеки
Код: plaintext
1.
Public Declare Function OemToChar Lib "user32" Alias "OemToCharA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
приходится писать CUI, так как она отлетает после одного выполнения. приходится переоткрывать программу
...
Рейтинг: 0 / 0
04.10.2006, 12:02
    #34031094
orunbek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBF. oem/ansi converter
на hiprog.com был готовый класс который работает с DBF файлами без никаких дополнительных бибилиотек напрямую работает
...
Рейтинг: 0 / 0
04.10.2006, 12:29
    #34031191
AndreyMp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBF. oem/ansi converter
Легко.
Код: 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
04.10.2006, 13:02
    #34031323
Slice
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBF. oem/ansi converter
спасибо
...
Рейтинг: 0 / 0
04.10.2006, 13:09
    #34031361
AndreyMp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBF. oem/ansi converter
Всегда рад помочь. К тому же на таком (не подлизываясь к модерам) уважаемом форуме! (сам админ, но на менее уважаемом сайте. На своем собственном.) :))
...
Рейтинг: 0 / 0
04.10.2006, 17:21
    #34032648
Slice
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBF. oem/ansi converter
Оказывается, что еще не совсем спасибо))))))))))))))))
Дело в том, что мне приходит файлик в OEM, мне надо его залить на SQL.
есть процедурка, о которой говорил я в самом начале (которая отлетает), так вот, она переписывает один байт и поидее этот файл становится с виндовой кодировкой. А ваша процедура, Уважаемый AndreyMp , уже работает с содержимым. С содержимым мне по выбранному пути вообще работать не надо, если только на SQL сервере, так как содержимое заливается все через DTS. Так вот, нет ли способа изменить кодировку самого файла?
...
Рейтинг: 0 / 0
05.10.2006, 07:30
    #34033366
orunbek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBF. oem/ansi converter
Говорил же вам на hiprog.com есть класс для работы с DBF-файлами Кривцова А.
вот выложил пример конвертации с помощью этого класса.
класс был взят с сайта hiprog.com.
...
Рейтинг: 0 / 0
05.10.2006, 07:31
    #34033367
orunbek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBF. oem/ansi converter
Примерчик чуть-чуть кривоватый, но отшлифовать не составит труда
...
Рейтинг: 0 / 0
05.10.2006, 12:15
    #34034130
Slice
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBF. oem/ansi converter
Спасибо, порадовало
...
Рейтинг: 0 / 0
24.11.2006, 08:43
    #34152138
Rustygold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBF. oem/ansi converter
orunbekГоворил же вам на hiprog.com есть класс для работы с DBF-файлами Кривцова А.
вот выложил пример конвертации с помощью этого класса.
класс был взят с сайта hiprog.com.

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

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

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

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

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

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

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

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

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

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

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

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

С уважением, Николай.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / DBF. oem/ansi converter / 25 сообщений из 51, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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