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

HKLM\SOFTWARE\Microsoft\Jet\4.0\Engines\Xbase\DataCodePage
...
Рейтинг: 0 / 0
21.12.2005, 08:40
    #33448133
TIKO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
По кодировке Dos>>Win
Не хочу трогать реестр поскольку програмка будет работать на машинах пользователей и если что то менять то при инсталяции проги на машину а это не очень корректно по отношению к пользовательскому реестру
Есть 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
21.12.2005, 09:28
    #33448210
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
По кодировке Dos>>Win
Код: 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
21.12.2005, 11:03
    #33448511
TIKO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
По кодировке Dos>>Win
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
21.12.2005, 18:47
    #33450294
Andrew
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
По кодировке Dos>>Win
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
21.12.2005, 20:50
    #33450548
AndreyMp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
По кодировке Dos>>Win
Если об этом
автор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
22.12.2005, 07:13
    #33450825
TIKO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
По кодировке Dos>>Win
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
22.12.2005, 07:16
    #33450828
TIKO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
По кодировке Dos>>Win
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
22.12.2005, 07:20
    #33450833
TIKO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
По кодировке Dos>>Win
Если есть мысли по поводу ConnectionString?
Если нет то
Вопрос снимается!
Всем спасибо
...
Рейтинг: 0 / 0
22.12.2005, 08:26
    #33450870
По кодировке Dos>>Win
Попробовал с помощью функций MultiByteToWideChar, WideCharToMultiByte - такой же результат.

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

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

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

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

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

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
22.12.2005, 11:33
    #33451339
По кодировке Dos>>Win
TIKO, мой вариант от 10:26 не попробовал?
...
Рейтинг: 0 / 0
22.12.2005, 12:31
    #33451643
TIKO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
По кодировке Dos>>Win
Пользователь2TIKO, мой вариант от 10:26 не попробовал?
пробовал меняет на 201
но выводит так же
...
Рейтинг: 0 / 0
22.12.2005, 16:52
    #33452673
Andrew
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
По кодировке Dos>>Win
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
23.12.2005, 14:38
    #33454577
dantes
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
По кодировке Dos>>Win
Код: 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
26.12.2005, 09:13
    #33456693
shady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
По кодировке Dos>>Win
TIKO, удалось решить проблему? У меня тоже такая проблема сечас возникла. Если есть результат, то подскажи плиз как можно сделать
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / По кодировке Dos>>Win / 25 сообщений из 38, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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