|
|
|
| Хочу создать пойск по б.д пойск по адресу или по имени или по тел. номеру это всё понятно зделую
но проблема в том что б\д я получаю из другой компании на работе стоит виндовс XP sp3 English
как я понимаю винда по умалченю пишет в юникоде ни так ли ? а в б\д даные в анси как это зделать ? и ещё StrConv непридлогать пробывал непомагает(может быть я неправилно исползывал если можно пример) | |
|
| |
|
|
|
| базу в каком файле присылают (тип)?
и на каком языке (я имею язык шрифта) | |
|
| |
|
|
|
| базу в dbf ну я инпортирую в accdb а шрифт arial armenian | |
|
| |
|
|
|
| и что - иероглифы в итоге?
а если не импортировать, а связать с dbf | |
|
| |
|
|
|
|
ник: snipe
и что - иероглифы в итоге?
а если не импортировать, а связать с dbf
| нет всё нормално не каких ироглифов! | |
|
| |
|
|
|
| тогда я ни чего не понял
если инфа нормально импортируется
то в чем проблема | |
|
| |
|
|
|
|
| ну - тут зависит от того как вы хотите реализовать интерфейс
можно менять RecordSource формы (поля для поиска разместить в верхнем колонтитуле)
можно использовать свойство формы Filter
можно по нажатию кнопки вызывать форму ввода данных а после чего мучать основную форму
можно устроить динамический поиск - по мере ввода символов в поисковые поля фильтровать инфу
да мало ли способов как можно изголиться | |
|
| |
|
|
|
| способов много но не савпадаёт написоное слово в пойске с словом в б/д но если копировать слово из б/д то работает | |
|
| |
|
|
|
| если акс под себя затянул и инфа не исказилась
то на счет кодировки голову забивать не стоит
видимо в самой реализации поиска есть ошибки
но без базы я сказать ни чего не могу
желательно в 2003 | |
|
| |
|
|
|
|
| ну тогда код который запускает поиск | |
|
| |
|
14 Кб. |
|
| вот 2007 | |
|
| |
|
|
|
| Люди не ужели никто не может помоч ? есть таблица внём всё в Анси надо конвертировать всё в Юникод но желателно юникод в анси | |
|
| |
|
|
|
| Help | |
|
| |
|
31 Кб. |
|
| А у меня крякозябры - не установлена ваша кодовая страница==>>
Самый простой способ отделить проблемы с поиском от проблем кодировок - пробовать все с английским текстом. Тогда проблемы кодировок отпадают. И если поиск работает правильно - тогда уже копать дальше. | |
|
| |
|
|
|
| AlexSyr пойск работает но текст в б\д анси а винда по умалчению пишет в юникоде мне нужно конвертировать юникод в анси | |
|
| |
|
|
|
| http://allo.usaaa.ru/workshop/extreme/unicode/unicode.htm
http://www.microsoft.com/Rus/Msdn/Activ/MSVB/Archive/VBA/Decoder/VBVariables1_2.mspx
поищи в яндексе UNICODE ANSI VBA | |
|
| |
|
|
|
| Дядя Федор знаеш сколко искал. StrConv не помагает или я чтото не так исползую ? | |
|
| |
|
|
|
| У меня такая идея есть написать такую функцию:
например если буква А в юникоде то изминить его в еквивалент в Анси исползуя ChrW и Chr | |
|
| |
|
|
|
| Внимательно почитай вторую ссылку. Особенно про установки в реестре | |
|
| |
|
|
|
| Так я про то-же и говорю.
При импорте из dbf идет преобразование ASCII -> Unicode, причем в той кодовой странице, которая указывается. Т.е. это будут диапазоны:
0400 - 04FF - Cyrillic
0530 - 058F - Armenian
|
Отсюда я и вижу крякозябры, т.к. ddi выложил уже преобразованную таблицу в диапазоне, которого у меня нет.
Я не пойму одного - зачем преобразовывать - программа сама должна все это делать автоматически.
Или сам поиск построен у ddi именно на преобразованиях кодировок - тогда нужно в StrConv использовать соответствующий LocaleID.
Или я туплю?!! | |
|
| |
|
|
|
|
нет
Просню ситуацию я палучаю б\д в форматье дбф(фокс про) там инфа записана с помащю програмы KDWIN такая дурацкая прога (это для линтайев или которые незнают что через винду тоже можна включить подержку армянского языка !)она по умалчению пишат в анси ! я импартирую эту базу в акссес версия 2007 всё работает всё видноно пойс не работает точнее нет совпадений причина Юникод и анси или я не прав но пойск работает если анси - анси или юникод - юникод ! вот и мне нужно конвертировать юникод в анси! | |
|
| |
|
|
|
| Вы можете подготовить тестовый dbf в той же программе, с парой строчек типа: "Проверка" и "Test"? | |
|
| |
|
|
24 Кб. |
|
| Ну для начала удивлен фразой:
она по умалчению пишат в анси !
|
dbf файл пишет в ASCII (для русского - это кодовая страница DOS866).
Вы же говорите, что пишет в ANSI (для русского - это кодовая страница WIN1251).
И при всем при этом импорт у вас проходит без крякозябр - вот я и удивлен.
Попытки у себя повторить Вашу ситуацию не проходят.
Для примера ==>>
там таблица TableFromDBF получена путем импорта из dbf файла (тоже прицепил), а форма FormFromDBF делает поиск по этой таблице. | |
|
| |
|
|
|
| AlexSyr я про КДВИН говарю он в анси пишет ......... я уже запутолся((((((((((
есть инет сайт он он кадирует армянскую анси в армянскый юникод и обратно написал текст конвертировал пойск заработал так не палучаеца что в анси ? я про сваю Б\Д гаварю (акссес 2007) там анси | |
|
| |
|
|
|
| 1.А поиск по ID не катит? Тогда не надо мучиться с кодировками.
2.А в строке для поиска отображается нормально? На армянском? | |
|
| |
|
|
|
| Нет пойск по Ф.И.О. да но если изменён шрифт | |
|
| |
|
|
|
|
| посмотрите в сторону
DoCmd. TransferDatabase
там вроде язык можно задавать | |
|
| |
|
|
|
|
| Интересно!!!
Во как получается:
- Если копируется ячейка из поля, затем перекодируется на сайте, затем вставляется в поле, то в базе все ОК - сохраняется строка в Юникоде
- Если использовать StrConv(<поле>, vbUnicode, 1067), где 1067 - Армянский LocaleID (вроде как ), то функция считает, что на входе ANSI и перекодирует КАЖДЫЙ байт, хотя на входе 2-байтный Unicode. Т.е. получается добавление лишней пары 0000.
- Если использовать StrConv(StrConv(<поле>, vbFromUnicode, 1067), vbUnicode, 1067), т.е сначала в ANSI, а потом в Unicode, то в начало поля добавляется FFFE-признак Unicode, а затем на каждый символ 1 байт.
Чудеса!!! | |
|
| |
|
|
|
|
| - это в смысле несогласен? | |
|
| |
|
|
|
| Да нет. Удивление с почтением. | |
|
| |
|
|
|
|
| так что делать неужели выхода нет ? | |
|
| |
|
|
157 Кб. |
|
| Никак не могу повторить Вашу ситуацию - отсюда и недостаток в вариантах решения.
Т.е. вот так происходит импорт, ... у меня:
1. при импорте из dbf файла Access не предлагает выбор кодовых страниц, а автоматом конвертирует из ASCII (у меня DOS866) в Unicode. Таблицу переконвертации можно посмотреть Пуск -> Стандартные -> Служебные -> Таблица символов (для русского см левая картинка ==>>)
В данном случае все СТАНДАРТНО - все РАБОТАЕТ
2. Вы утверждаете (для этого и просил Ваш dbf), что драйвер KDWIN вместо ASCII вставляет ANSI. Я и это пытался сделать - заменил в dbf коды (у меня - WIN1251).
При импорте ОПЯТЬ идет конвертация согласно вышеописанному, но исходными уже являются другие коды - отсюда КРЯКОЗЯБРЫ.
У Вас же текст конвертируется НОРМАЛЬНО. Значит - скорее всего отсутствует перекодировка, значит надо смотреть коды символов в dbf и уже сконвертированные а Access'е. И далее уже по результату - если коды совпадают, за исключением того, что они становятся 2-байтовые, то достаточно в старшие разряды Unicode добавить Ваш диапазон (конкретно для Армянского - 05). Если нет, то копать дальше - ...
Есть правда одна задумка - через буфер обмена - пытаюсь проверить, но нужно время | |
|
| |
|
|
|
| Давй так ты говариш что текст в таблице юникод не так ли а почиму пойск не работает но писать текст через тот сайт конвертировать в анис всё работает спрашеваеца Why? | |
|
| |
|
|
|
| Я бы хотел такую функцию написать по мойему будет работать (для конвертации текста из из юникода в анси для армянсково) исползуя функцию chr() и chrW() но я незнаю откуда найти коды синволв для армянского языка в юникоде и в анис | |
|
| |
|
73 Кб. |
|
| ну юникод Ворд - вставка символа и там все расписано | |
|
| |
|
|
|
| А какой он - армянский алфавит?
Какие символы?
Свои?
==============
http://oleg-borisov.narod.ru/4-auth/smilo/ab5.htm | |
|
| |
|
|
|
| а юникод в ОЕМ конвертор есть ? такого кода тоже нету ? | |
|
| |
|
|
|
| ASC(Символ) - Возворшает код
CHR(код) - Возврошает символ
CHR$(код) - возврашеает тоже. | |
|
| |
|
|
|
|
ник: час
ASC(Символ) - Возворшает код
CHR(код) - Возврошает символ
CHR$(код) - возврашеает тоже.
|
Знаю но спасибо | |
|
| |
|
|
|
| Ну тогда - введя буквы - можешь узнать коды символов Армянского алфавита. | |
|
| |
|
|
|
| вот такие знаки ???????????????????????????????????????????????????? | |
|
| |
|
|
|
| Это - не похожэ на алфавит
http://www.eanc.net/ru/transliteration/ | |
|
| |
|
|
|
| Час где найти юникодв анси конвертор код в вба ? или юникод в оем у меня есть конвертор оем в анси ) | |
|
| |
|
|
|
| Чтобы все встало на свои места составь вот такую табличку (только со своим словом и кодами):
DOS866 WIN1251 UNICODE RUS-04
Hex Dec Hex Dec Low Byte High Byte
Hex Dec Hex Dec
--------------------------------------------
П - 8F (143) - CF (207) - 1F (31) 04 (4)
р - E0 (224) - F0 (240) - 40 (64) 04 (4)
о - AE (174) - EE (238) - 3E (62) 04 (4)
в - A2 (162) - E2 (226) - 32 (50) 04 (4)
е - A5 (165) - E5 (229) - 35 (53) 04 (4)
р - E0 (224) - F0 (240) - 40 (64) 04 (4)
к - AA (170) - EA (234) - 3A (58) 04 (4)
а - A0 (160) - E0 (224) - 30 (48) 04 (4)
--------------------------------------------
|
То что в колонке DOS - это должно быть в dbf файле - нужно посмотреть. Если же, KDWIN подменяет коды на ANSI, то там должны быть коды из колонки WIN.
Колонка UNICODE - "Как должно быть". Все колонки можно взять из Таблицы символов.
Далее интереснее - нужно посмотреть какие коды в поле таблицы после импорта. Можно таким способом:
Dim x() As Byte
x = <поле>
|
Ставится Breakpoint и в Locals Window смотрятся коды - дозаполняешь табличку еще одной колонкой "Как есть". Кидаешь сюда - далее будем поглядеть что куда переконвертируется. | |
|
| |
|
|
|
| хачю вот такую фнукцию написать пракатит ли она или нет П.С. я не очен селён в ВБА так что не сильно ругайте(и В русском языке)
есть форма в форме поле P в этом поле водица текст для ройска в юникоде надо конвертировать ево в анси и вставит в поле P1
Начну
Private Sub find_Click()
Dim i As Long
Dim a As String
Dim z As Long
i = Len(Me.p)
For z = 1 To i
a = Mid(Me.p, z, 1)
a = AscW(a)
Select Case a
Case ChrW(561) ' дапустим еквиволент символа 561 это 33 в анси
Me.P1 = Chr(33)
'************
End Select
Next z
End Sub
прокатит ли ? | |
|
| |
|
|
|
|
a = AscW(a)
Select Case a
Case ChrW(561) ' дапустим еквиволент символа 561 это 33 в анси
|
Во первых перед Select Case переменная a ,будет содержать СТРОКУ с кодом, значит как минимум нужно:
не Case ChrW(561)
а Case "561"
|
Кроме того Вы думаете, что если Me.P1 = Chr(33), то вставили ОДНОБАЙТОВЫЙ код.
Проверяйте:
Dim x() As Byte
...
Me.P1 = Chr(33)
MsgBox LenB(Me.P1) 'выведется 2, т.е. ДВА БАЙТА
x = Me.P1 'Ставим Breakpoint, нажимаем один раз F8, смотрим в Locals Window
|
Видим в массиве х ДВА БАЙТА - 33 и 0, т.е. вставили UNICODE, причем для Basic Latin кодовой страницы. Вы этого добиваетесь???
из хелпа:
Text is stored in ANSI format within Access Basic code and in Unicode format in Visual Basic (Access Basic was used in early versions of Microsoft Access).
|
| |
|
| |
|
|
|
| нет так как зделать вроде алфавит гатов уже есть их коды | |
|
| |
|
|
|
| Смотрите выше табличку - как только Вы заполните ее как описано, так и станет ясно что дальше делать. | |
|
| |
|
|
|
| ? | |
|
| |
|
|
|
|
|
| AlexSyr Гаварю же я не очень силён в вба | |
|
| |
|
|
|
| Поэтому я и просил заполнить табличку кодами - ну НЕТ у меня армянского.
Или непонятно как заполнить табличку? | |
|
| |
|
|
|
| http://unicodenow.com/ там с права армянские букви жиёш на них вводит еквивалент в анси и юникод но правдо у мена в вба не получилось вроде не те коды( | |
|
| |
|
106 Кб. |
|
| вот | |
|
| |
|
11 Кб. |
|
| И в аксее | |
|
| |
|
|
|
| коды(юникода) работают но анси нет или пишет синволы на англиском или вобше пробелы | |
|
| |
|
|
|
|
Private Sub find_Click()
Dim i As Long
Dim z As Long
Dim a As Long
If IsNull(Me.p) Then
MsgBox "Напишитье ФИО"
Me.p.SetFocus
Exit Sub
End If
For z = 1 To Len(Me.p)
If IsNull(DLookup(" [Usysconvert]![ansi] ", "Usysconvert", " [Usysconvert]![unicode] = " & AscW(Mid(Me.p, z, 1)))) _
Or IsError(DLookup(" [Usysconvert]![ansi] ", "Usysconvert", " [Usysconvert]![unicode] = " & AscW(Mid(Me.p, z, 1)))) Then
MsgBox "Напишитье армянскими буквами"
Exit Sub
End If
a = DLookup(" [Usysconvert]![ansi] ", "Usysconvert", " [Usysconvert]![unicode] = " & AscW(Mid(Me.p, z, 1)))
'Me.P1 = ????????
Next z
End Sub
|
| |
|
| |
|
|
|
| Начинаем с начала.
Создаем модуль, в него кладем:
Declare Function GetACP Lib "kernel32" () As Long
Declare Function GetOEMCP Lib "kernel32" () As Long
Public Sub TestCP()
MsgBox "WIN" & GetACP & " - DOS" & GetOEMCP
End Sub
|
Нажимаем F5, т.е. запускаем TestCP. Что выводит?
Кстати, ICQ есть? | |
|
| |
|
|
|
| AlexSyr телефоный номер дай с кодом позваню с рабочево))))(бесплатно ) | |
|
| |
|
|
|
| Зделал Ура Ура Ура | |
|
| |
|
|
|
| Но не так как бы хотелась но конвертирует не Из юникода в анси а из анси в юникод правда в роле паказывает не ФИО целиком а только толко фамилию если нажать на поле то тагда целиком наверное пробел не конвертировал (((( | |
|
| |
|
|
|
| Function f(i As String)
Dim z As Long
Dim a As String
For z = 1 To Len(i)
a = a & ChrW(Nz(DLookup(" [Usysconvert]![unicode] ", "Usysconvert", " [Usysconvert]![ansi] = " & AscW(Mid(i, z, 1))), 0))
Next z
f = a
End Function | |
|
| |
|
|
|
| вроде всё зделал наверно нада в NZ(*****,здесь написать код пробела в юникоде ) | |
|
| |
|
|
|
|
| оказываеца что не все буквы единтичны по кодои (есть разница ) например ес буква в анси а в юникоде этот код сотвествуеь запитой изминел солко нашол но осталась проблема с пробелом в анси и юникоде например в анси с | |
|
| |
|
|
|
| Тогда, наверное, и так будет работать:
Private Function TwoAnsi2Unicode(ByVal strIN As String) As String
Dim bytTmp() As Byte
Dim intI As Integer
bytTmp = strIN
For intI = 0 To UBound(bytTmp) Step 2
TwoAnsi2Unicode = TwoAnsi2Unicode & Chr(bytTmp(intI))
Next
End Function
|
| |
|
| |
|
|
|
|
|
Function f(i As String)
Dim z As Long
Dim a As String
For z = 1 To Len(i)
a = a & ChrW(DLookup(" [Usysconvert]![unicode] ", "Usysconvert", " [Usysconvert]![ansi] = " & AscB(Mid(i, z, 1))))
Next z
f = a
End Function
|
Подскажитье где здесь ошибка | |
|
| |
|
|
|
| А что за ошибка?
Функция выглядит работоспособной | |
|
| |
|
|
|
| Давай я сам для сибя происню а ты скажеш в чём разница ?Майл агент есть ? | |
|
| |
|
|
|
| как я понимаю AscB(Mid(i, z, 1))))
ета функция возврашает цфричный код буквы в анси кадировке вроде так ? | |
|
| |
|
|
|
| Коды цыфер в анси и в юникоде стандартны ? | |
|
| |
|
|
|
| и ещё как передать НУЛ значения поля а то есть такие поля где нет ничево а при конвертациипишет ошибка не в функции а в поле где сохрянаюца данные | |
|
| |
|
|
|
| Никаких Null НЕЛЬЗЯ допускать.
Вы должны полностью заполнить таблицу перекодировки. 96 кодов ANSI-UNICODE для кодовой страницы 1067, остальные из кодовой страницы 1033 (English - United States) - иначе не будут перекодироваться цифры, знаки пунктуации, ... А все что останется пустым заполнить кодом пробела/вопроса/... | |
|
| |
|
|
|
| можно поставить Nz и что-то вставлять в случае отсутствия значения - пробел, например | |
|
| |
|
|
|
| нет так пробывал не катит | |
|
| |
|
|
|
| Если быть более точно, то AscB(Mid(i, z, 1)))) возвратит МЛАДШИЙ БАЙТ выбранного символа.
В Вашей КОНКРЕТНОЙ ситуации - код ANSI. | |
|
| |
|
|
|
|
| 2 вапроса как из двух слов (в одном поле) напремер Фамилия (пробел) Имя зделать два поля где в первом будит фамилия а в втаром имя ? | |
|
| |
|
|
|
| Наверно для каждой ячейки надо прочитать слово до пробела и копровать с первова до пробела и для втаров после пробела до конца ? | |
|
| |
|
|
|
| а если фамилия двойная "Бендер Задунайский" (а злобный юзер черточку пробелом заменил) или имя двойное "Гаcсан Абдуррахман" | |
|
| |
|
|
|
| можно так
=Split(поле_ФИО, " ")
получим массив содержащий Фамилию (0-й элемент массива) Имя (1-й) Отчество (2-й)
если больше т.е. Ubound(нашмассив) > 2 - то тогда нужно разруливать где двойные имя или фамилия а мож отчество | |
|
| |
|
|
|
|
ник: kot_k_k
а если фамилия двойная "Бендер Задунайский" (а злобный юзер черточку пробелом заменил) или имя двойное "Гаcсан Абдуррахман"
|
Нет такова нету а б/д не юзера а Газывой фирмы или Электросетьи или водоканал вобшум там всё тончно проблема была в анси вроде работает не шита 4-5 ошибок ;)(при конвертации) | |
|
| |
|
|
|
| я не про конвертацию грил
2 вапроса как из двух слов (в одном поле) напремер Фамилия (пробел) Имя зделать два поля где в первом будит фамилия а в втаром имя ?
Наверно для каждой ячейки надо прочитать слово до пробела и копровать с первова до пробела и для втаров после пробела до конца ?
|
я про то что таким методом мы найдем только 2 или 3 слова из которых обычно состоит ФИО - нужно строку добивать до конца, а Split это делает сразу.
а юзер злобный он вездесущь | |
|
| |
|
|
|
|
|
Код пробела можно было бы и самому посмотреть (Hex - 20; Dec - 32 -> Chr(32))
| | |
|
| |
|
|
|
| прокатит ли
Select Case a
Case ""
Me.P = Chr(32)
или Me.P = " "
просто немагу исползывать даные очень велики при кждой папытки уходит 5 минут | |
|
| |
|
|
|
| me.P=iif(a="","пробел","не пустое") | |
|
| |
|
|
|
| Зделал всё работает всем спасибо | |
|
| |