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