Кирилица, vbFromUnicode и т.н. ..

6 отговора 183 прегледа
#1

Кирилица, vbFromUnicode и т.н. ..

Привет,

имам ВБ6 приложение което чете от и пише в база данни (FireBird).
Проблема ми е че от ВБ не мога да запиша стринг на кирилица в БД (в поле тип CHAR c charset Windows-1251).

Директно в самата БД(не от ВБ) мога да записвам стрингове на кирилица, и после ВБ ги показва както трябва.
Но ако юзера въведе кирилски текст във ВБ форма (където текста си ОК) и после го запиша в БД, там излизат маймуни.

Предполагам проблема е в това че ВБ работи с уникод стрингове и праща такива към ДБ.
Но дори да му кажа да запише Chr(192)
което би трябвало да е голямо кирилско А според Windows-1251, пак записва маймун.

Плз. кажете кво да правя !
Пробвах да използвам vbFromUnicode което изглежда подходящо за целта, но нещо не мога да налучкам как.

10х
-----------
FireBird сървъра и БД са на същото РС, Вин ХР сп2

Отговор
в отговор на microsoft #2

Re: Кирилица, vbFromUnicode и т.н. ..

оправих се ..

Отговор
в отговор на microsoft #3

Re: Кирилица, vbFromUnicode и т.н. ..

Kak se opravi?

Отговор
в отговор на microsoft #4

Re: Кирилица, vbFromUnicode и т.н. ..

Vaprosat mi e savsem seriozen. Az imam, moje bi su6tija problem. Vkarvam danni v *.dbf database. Kogato ja otvorja se pojavjavat majmuni.

Отговор
в отговор на Bil #5

Re: Кирилица, vbFromUnicode и т.н. ..

Ами оправих се по доста странен начин, но работи. Прекарвам всеки стринг който искам да запиша през тая ф-я и записвам в БД резултата.
Така както е, работи само за буквите А-Я а-я защото това ми трябваше.
Ако ще го използваш често или с големи стрингове, не е зле да замениш
out = out & tchr
с нещо по-ефективно (потърси в planetsourcecode за addtostring, събира стрингове поне сто пъти по бързо)


Function toCyr(inp As String) As String
out$ = ""
For i = 1 To Len(inp)
tchr$ = Mid(inp, i, 1)
atchr& = AscW(tchr)
Select Case atchr&
Case 1040 To 1103 'unicode charcodes of cyr.letters
'848 - offset; big cyr A = 1040[unicode] or 192[Windows-1251]
atchr& = atchr& - 848
tchr$ = ChrW(atchr&)
End Select
out = out & tchr
Next
toCyr = out
End Function


Отговор
в отговор на microsoft #6

Re: Кирилица, vbFromUnicode и т.н. ..

Хммм, нещо друг май е бил проблема. Виж това от Immediate window:
? AscW(ChrW$(1040))

1040
? Asc(ChrW$(1040))
192
? AscW("А")
1040
? Asc("А")
192

cheers,
</wqw>

Отговор
в отговор на wqw #7

Re: Кирилица, vbFromUnicode и т.н. ..

тия експерименти ги правих и аз :)

При мене желания резултат се получава само по начина който съм постнал, т.е
ChrW(AscW("A")-848)
записва кирилско А [и после ВБ си го чете ОК], въпреки че в Immediate window това връща "?"

Ако опитам да запиша А или Chr(192) или ChrW(1040), в БД се записва маймун и после ВБ чете маймун.
Не знам защо става така, и може би е нещо специфично само за FireBird.

Така и не разбрах как да използвам StrConv + vbFromUnicode, и по-точно какво да задам за LCID ...

Отговор