Вопрос о кодировке

Рейтор К.И.
Дата: 02.11.2009 14:55:07
Уважаемые коллеги! Кто подскажет, как избавиться от проблемы с кодировкой.
Суть в следующем. Имеется поле, в котором для события "Нажатие клавиши" прописана процедура. При вводе в поле знаков в русской раскладке отображаются совсем другие знаки - ð å é ò î ð и т.д., хотя процедурой они интерпретируются действительно как русские. Латинские буквы выводятся адекватно.
Как обеспечить отображение вводимых знаков в нормальном виде?
Владимир Саныч
Дата: 02.11.2009 14:56:37
А в других полях русские буквы показываются нормально?

Если да:
Приведите текст процедуры.

Если нет:
Ищите проблему в Windows.
Рейтор К.И.
Дата: 02.11.2009 15:08:22
Да, нормально.
Смысл процедуры состоит в том, что она отбирает в поле со списком только те записи, в которых присутствуют вводимые символы, начиная с любой позиции, а не с первого символа, как в стандартной автоподстановке.
поле называется cmbSub2. В нем запускается при нажатии любой клавиши ниже следующая процедура. Она пока сырая, экспериментирую. Название поля в ней указано еще прямо, не через переменную.

Private Sub SelectFromAscii(KeyAscii As Integer)
Dim strSql As String
If KeyAscii > 1000 Then KeyAscii = KeyAscii - 848
If cmbSub2 <> Null Then Exit Sub
If KeyAscii = 13 Then Exit Sub
If KeyAscii = 9 Then
varStr = "*"
GoTo Zapros
ElseIf varStr = "*" Then
varStr = Null
End If
If KeyAscii = 8 Then
If varStr = 0 Then GoTo varstrNull
varStr = left(varStr, IIf(Len(varStr) = 0, 0, Len(varStr) - 1))
GoTo Zapros
Else
If KeyAscii = 27 Then GoTo varstrNull
varStr = varStr & Chr$(KeyAscii)
Zapros:
strSql = "SELECT " & " subid, name"
strSql = strSql & " FROM " & "_Sub"
strSql = strSql & " WHERE Name Like '*" & varStr & "*' ORDER BY Name;"
cmbSub2.RowSource = strSql

SendKeys "%{DOWN}", True

End If
Exit Sub
varstrNull:
varStr = ""
mds_world
Дата: 02.11.2009 15:57:22
Рейтор К.И.
Смысл процедуры состоит в том, что она отбирает в поле со списком только те записи, в которых присутствуют вводимые символы, начиная с любой позиции, а не с первого символа, как в стандартной автоподстановке.

Поищите по форуму. Тема часто появляется. Вот например поле со списком, значения которого фильтруются по самому себе
Владимир Саныч
Дата: 02.11.2009 15:58:30
Рейтор К.И.
If KeyAscii > 1000 Then KeyAscii = KeyAscii - 848

Вот эта команда заменяет одни символы на другие.
Рейтор К.И.
Дата: 02.11.2009 16:29:28
Спасибо за подсказки. Решение нашел. Ввел дополнительную переменную для кода символа:
Dim KeyAsciiResult As Integer
If KeyAscii > 1000 Then
KeyAsciiResult = KeyAscii - 848
Else
KeyAsciiResult = KeyAscii
End If

Причина была в том, что для русских символов, код которых > 1000, нужно было возвращать их прежнее значение, т.е. вновь добавлять 848. В первом варианте программа интерпретировала KeyAscii уже не как русские символы (- 848) и соответственно отображала знаки с преобразованными кодами.
Анатолий ( Киев )
Дата: 02.11.2009 18:27:24
Как-то очень смело вы используете константу 848. Например:
?AscW("№")-Asc("№")
8285
?AscW("ё")-Asc("ё")
921
?AscW("Ё")-Asc("Ё")
857
И это далеко не все. Практически на всех символах с ANSI кодами 160-191 у вас будет другое смещение. Надежнее так:
If KeyAscii > 1000 Then KeyAscii = Asc(ChrW(KeyAscii))