powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / По кодировке Dos>>Win
25 сообщений из 38, страница 1 из 2
По кодировке Dos>>Win
    #33446541
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно ли поменять кодировку
Dos на Win для вывода значения через запрос в бд типа dbf (dBase,FoxPro)
через контрол Grid выводит символы в кодировке dos, нужно поменять на win для нормального отображения строковых значений
или хотя бы в состоянии recordset поменять кодировку и только потом выводить пользователю
Спасибо
...
Рейтинг: 0 / 0
По кодировке Dos>>Win
    #33447552
Andrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В ConnectionString провайдера поставьте нужную кодировку.
...
Рейтинг: 0 / 0
По кодировке Dos>>Win
    #33448086
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть ли пример?
какой именно параметр отвечает за кодировку?
Спасибо
...
Рейтинг: 0 / 0
По кодировке Dos>>Win
    #33448110
В реестре не пробовал менять OEM-ANSI?

HKLM\SOFTWARE\Microsoft\Jet\4.0\Engines\Xbase\DataCodePage
...
Рейтинг: 0 / 0
По кодировке Dos>>Win
    #33448133
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не хочу трогать реестр поскольку програмка будет работать на машинах пользователей и если что то менять то при инсталяции проги на машину а это не очень корректно по отношению к пользовательскому реестру
Есть Declare через API с другого форума любезно предоставили но не работает

возвращает null
Пользователь2 я не силен в API
если ты силен,просмотри что не так

Private Declare Function CharToOem Lib "user32" Alias "CharToOemA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
Private Declare Function OemToChar Lib "user32" Alias "OemToCharA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long

Private Sub Command1_Click()
Dim strOEM As String
Dim strWin As String

strOEM = "+T= ò ¢ð¸ªø LL+¦T"

OemToChar strOEM, strWin

Debug.Print strWin
End Sub
Спасибо
...
Рейтинг: 0 / 0
По кодировке Dos>>Win
    #33448210
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
'конвертим из ДОС в WIN
Dim strOEM As String
Dim strWin As String

strOEM = "+T= ò ¢ð¸ªø LL+¦T"
strWin = srtring(Len(strOEM), " ")
OemToChar strOEM, strWin

т.е. надо сначала выходную строку до нужного размера сделать
...
Рейтинг: 0 / 0
По кодировке Dos>>Win
    #33448511
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dim strOEM As String
Dim strWin As String

strOEM = "Tчэюё т ¦L¦ эр эръюяшЄхы№эє¦ ўрёЄ№ яхэёшш"

strWin = Space$(Len(strOEM))
или так strWin = String(Len(strOEM), " ")

CharToOem strOEM, strWin

Debug.Print strWin

поменял CharToOem
оригиал_дос="Tчэюё т ¦L¦ эр эръюяшЄхы№эє¦ ўрёЄ№ яхэёшш"
оригинал="Взнос в ПФР на накопительную часть пенсии"
возврат="Тзнос в iLi на накапительнуi часть пенсии"

не корректно выводит данные
...
Рейтинг: 0 / 0
По кодировке Dos>>Win
    #33450294
Andrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TIKOЕсть ли пример?

Код: plaintext
1.
2.
3.
4.
Dim db As New ADODB.Connection, rs As New ADODB.Recordset
db.CursorLocation = adUseClient
db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\;Extended Properties=DBASE 5.0;"
rs.Open "select * from KLDOH1.dbf", db, adOpenStatic, adLockReadOnly
Set DataGrid1.DataSource = rs
...
Рейтинг: 0 / 0
По кодировке Dos>>Win
    #33450548
AndreyMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если об этом
авторPrivate Declare Function CharToOem Lib "user32" Alias "CharToOemA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
Private Declare Function OemToChar Lib "user32" Alias "OemToCharA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long

То надоело выкладывать.
...
Рейтинг: 0 / 0
По кодировке Dos>>Win
    #33450825
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andrew TIKOЕсть ли пример?

Код: plaintext
1.
2.
3.
4.
Dim db As New ADODB.Connection, rs As New ADODB.Recordset
db.CursorLocation = adUseClient
db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\;Extended Properties=DBASE 5.0;"
rs.Open "select * from KLDOH1.dbf", db, adOpenStatic, adLockReadOnly
Set DataGrid1.DataSource = rs

где именно параметр кодовой страницы в этом примере?
...
Рейтинг: 0 / 0
По кодировке Dos>>Win
    #33450828
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreyMpЕсли об этом
авторPrivate Declare Function CharToOem Lib "user32" Alias "CharToOemA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
Private Declare Function OemToChar Lib "user32" Alias "OemToCharA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long

То надоело выкладывать.
ни кто не заставляет
спасибо
что касается примера то тоже самое не правильно выводит
...
Рейтинг: 0 / 0
По кодировке Dos>>Win
    #33450833
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если есть мысли по поводу ConnectionString?
Если нет то
Вопрос снимается!
Всем спасибо
...
Рейтинг: 0 / 0
По кодировке Dos>>Win
    #33450870
Попробовал с помощью функций MultiByteToWideChar, WideCharToMultiByte - такой же результат.

TIKOВопрос снимается!

TIKO, побороть удалось?
...
Рейтинг: 0 / 0
По кодировке Dos>>Win
    #33450903
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пользователь2Попробовал с помощью функций MultiByteToWideChar, WideCharToMultiByte - такой же результат.

TIKOВопрос снимается!

TIKO, побороть удалось?
Нет нечаго путного
на других форумах предлагают через Fox или Delphi залезть в структуру dbf
и поменять кодовую страницу а програмно через VB ни кто не знает
думаю самому функцию написать по символьно менять значение вроде переводчика, долго и не практично, да еще в грид вводить придется через циклы рекордсета без датасурса.
...
Рейтинг: 0 / 0
По кодировке Dos>>Win
    #33450947
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TIKO попробуй подключиться через ODBC
...
Рейтинг: 0 / 0
По кодировке Dos>>Win
    #33450960
Так советуют?

"Байтик там в заголовке DBF надо проверять и при необходимости править по
смещению 29. Он отвечает за кодовую страницу. Chr(0) - отсутствует кодовая
страница (будет отображена умолчальная для открывшей таблицу проги),
Chr(101) - 866, Chr(201) - 1251. Для других кодовых страниц - соответственно
другие символы."
...
Рейтинг: 0 / 0
По кодировке Dos>>Win
    #33450975
AndreyMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПопробовал с помощью функций MultiByteToWideChar, WideCharToMultiByte - такой же результат.
До вольно странно. Приложенной выше функцией пользуюсь довольно давно и никаких проблем никогда не возникало. Правда я работал только с текстовыми файлами. Может база не в DOS (866) кодировке, или зашифрована.
...
Рейтинг: 0 / 0
По кодировке Dos>>Win
    #33451000
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте пример с ConnectionStrings.com.
"Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=c:\myvfpdbfolder;Exclusive=No;Collate=Machine;NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO"
Список доступных коллейшенов здесь .
...
Рейтинг: 0 / 0
По кодировке Dos>>Win
    #33451070
У меня тоже когда-то была проблема с кодировкой в dbf. В связи с тем, что у меня реестр править нельзя, приходилось искать альтернативные способы.

"Вылечил" так:

Код: 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.
Type typSwop
    strDelta As String *  29 
    byteString As Byte
End Type

Sub ChangeDbfCodepage( _
  strFileName As String)
    Dim typRecord As typSwop
    Dim hFile As Long

    On Error GoTo HandleError
    
    hFile = FreeFile
    
    If Len(Dir(strFileName)) >  0  Then
        Open strFileName For Random As hFile Len = Len(typRecord)
        
        Get hFile,  1 , typRecord
        
        If typRecord.byteString <>  201  Then
            typRecord.byteString =  201 
            Put hFile,  1 , typRecord
        End If
        
        Get hFile,  1 , typRecord
        
        If typRecord.byteString <>  201  Then
            MsgBox "Не удалось изменить кодировку."
        End If
        
        Close hFile
    Else
        MsgBox "Файла по указанному пути - нет."
    End If

ExitHere:
    Exit Sub

HandleError:
    Select Case Err.Number
        Case Else
            MsgBox Err.Number & ": " & Err.Description
    End Select
    Resume ExitHere
End Sub
...
Рейтинг: 0 / 0
По кодировке Dos>>Win
    #33451263
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть один параметр в соединении

CODEPAGE = 1251
через фокс определил парамтр страницы для вывада нормальных строковых
ANSI 1251
но в коннекте в виде
s.Open "DBQ=" _
& "C:\L;DefaultDir=C:\L;Deleted=1;Driver={Microsoft dBase Driver (*.dbf)}" _
& ";DriverId=533;FIL=dBase 5.0;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=600" _
& ";SafeTransactions=0;Statistics=0;Threads=3;UID=admin;UserCommitSync=Yes;"

пробовал вставить CODEPAGE = 1251 не риагирует
решение где то рядом надо порыться в инете и пробовать
...
Рейтинг: 0 / 0
По кодировке Dos>>Win
    #33451339
TIKO, мой вариант от 10:26 не попробовал?
...
Рейтинг: 0 / 0
По кодировке Dos>>Win
    #33451643
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пользователь2TIKO, мой вариант от 10:26 не попробовал?
пробовал меняет на 201
но выводит так же
...
Рейтинг: 0 / 0
По кодировке Dos>>Win
    #33452673
Andrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TIKO Andrew TIKOЕсть ли пример?

Код: plaintext
1.
2.
3.
4.
Dim db As New ADODB.Connection, rs As New ADODB.Recordset
db.CursorLocation = adUseClient
db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\;Extended Properties=DBASE 5.0;"
rs.Open "select * from KLDOH1.dbf", db, adOpenStatic, adLockReadOnly
Set DataGrid1.DataSource = rs

где именно параметр кодовой страницы в этом примере?
это я протупил. забил что это в дос кодировке. Jet на лету перекодирует. Или байт меняй из VB.
...
Рейтинг: 0 / 0
По кодировке Dos>>Win
    #33454577
dantes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
'конвертим из ДОС в WIN
Dim strOEM As String
Dim strWin As String

strOEM = "+T= ò ¢ð¸ªø LL+¦T"
' неправильно
'strWin = srtring(Len(strOEM), " ")
' надо так
strWin = srtring(Len(strOEM), " ") & CHR( 0 )
OemToChar strOEM, strWin
...
Рейтинг: 0 / 0
По кодировке Dos>>Win
    #33456693
shady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TIKO, удалось решить проблему? У меня тоже такая проблема сечас возникла. Если есть результат, то подскажи плиз как можно сделать
...
Рейтинг: 0 / 0
25 сообщений из 38, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / По кодировке Dos>>Win
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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