Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.29;
Скачать: CL | DM;

Вниз

Юникоды и компонент TOracleQuery   Найти похожие ветки 

 
Orxan   (2006-08-29 09:35) [0]

Мастера помогите пожалуйста с проблемкой.
БД- оракл 10g, делфи 5, компоненты TntUnicodeControls_2_1_11 и doa.

Данные в таблице содержатся в юникодах. Селектирую из таблицы. понимаю, что

     TntEdit1.Text:=Q.FieldasString("А");

уже не юникод. и выводится знак вопроса в не стандартных символах.
при написании

     TntEdit1.Text:=Q.Field("А");

уже выводится непонятный символ вместо "?".

помогите пожалуйста разрешить проблемку, может ктото встречался.

Спосибо.


 
sniknik ©   (2006-08-29 11:21) [1]

asString уже не юникод (от переобразований внутри метода/выдаваемого типа), на самом деле даже asVariant не гарантия... видел реализацию компонент где он из строки же и делался... что в общемто оправдано там было, работа с dBase у которого запись это большая строка, а значения полей это просто части с разными смещениями из этой строки.
это к тому что смотри доки самого TOracleQuery (вернее пакета доа к которому он относится) на предмет поддержки этим пакетом юникода в принципе.
ну или переходи на ADO где он гарантированно поддерживается.


 
ANB ©   (2006-08-29 11:22) [2]

NLSLANG настрой. Оракл сам все преобразует. По идее.


 
ANB ©   (2006-08-29 11:24) [3]

Проверь текст полей в тоаде или девелопере и только после этого начинай мучится с DOA.


 
Orxan   (2006-08-29 13:57) [4]

поменял на адо.  но опять же при присваивании значения этого поля в тнтедит показвает " ї "

 tntedit1.Text:=adoQuery1field1.Value;


 
ANB ©   (2006-08-29 14:00) [5]


> Orxan   (29.08.06 13:57) [4]

Для тех, кто в танке еще раз - в девелопере или тоаде все хорошо ?
ЗЫ. Не надо через ADO с ораклом работать при наличии хотя бы DOA.


 
Orxan   (2006-08-29 14:04) [6]

в тоаде тоже плохи дела. тотже символ выводится.


 
ANB ©   (2006-08-29 14:04) [7]


> Orxan   (29.08.06 14:04) [6]

См.
> ANB ©   (29.08.06 11:22) [2]


 
Orxan   (2006-08-29 14:09) [8]

а как?


 
ANB ©   (2006-08-29 14:12) [9]


> Orxan   (29.08.06 14:09) [8]

Ищещь в реестре поиском параметр NLSLANG (он там может встречатся не один раз). И правильно его настраиваешь : AMERICAN_AMERICA.CL8MSWIN1251.

Перед тем засунь в блокнот старое значение параметра (и запости его сюда).
Как правило, в результате сообщения об ошибках оракла станут английскими, но это даже лучше.


 
ANB ©   (2006-08-29 14:13) [10]

Упс, это. Параметр NLS_LANG называется. И переконнектится не забудь.


 
Sergey13 ©   (2006-08-29 14:19) [11]

> [10] ANB ©   (29.08.06 14:13)

Похоже ему не это надо.

> [6] Orxan   (29.08.06 14:04)
Я не работал ни с юникодом ни с 10-кой, но на
http://www.sql.ru/forum/actualtopics.aspx?bid=3
поиск по "UNICODE" дает несколько страниц топиков.


 
ANB ©   (2006-08-29 14:23) [12]


> Sergey13 ©   (29.08.06 14:19) [11]

тоад сам понимает юникодные поля. Если в нем неправильно показывает, проблема либо с NLS_LANG на клиенте, либо кривая база.

Но не факт, что когда заработает тоад, заработает делфовая программа :)
Просто проблемы надо решать поэтапно.

Кстати, Oracle XE автоматом все русские буквы перекидывает в юникод. При этом с одаком проблем не возникало.


 
Orxan   (2006-08-29 14:31) [13]

в реестре только в одном месте у меня стоял
AMERICAN_AMERICA.WE8MSWIN1252
а в остальных местах N/A


 
ANB ©   (2006-08-29 14:34) [14]


> Orxan   (29.08.06 14:31) [13]

Тады все понятно. У тебя русский язык порубан был. Воткни везде то, что я написал и проверь, что получилось в тоаде.
Кстати, оракла то какая ? Надеюсь не локализованный XE ?


 
Orxan   (2006-08-29 14:57) [15]

не локалка.
Я прогу не для себя пишу, и поэтому мне турецкие буквы нужны.
я прописал везде AMERICAN_AMERICA.WE8MSWIN1252 потому что этим чарсетом устанавливали оракл. но опять проблемка не разрешилась


 
ANB ©   (2006-08-29 15:03) [16]

Для тех, кто в танке - третий раз. У тебя указана западноевропейская кодировка и, есно, ничего не работает. Я ж написал, что воткнуть : AMERICAN_AMERICA.CL8MSWIN1251.


 
Orxan   (2006-08-29 15:10) [17]

воткнул везде  AMERICAN_AMERICA.CL8MSWIN1251
теперь знаки вопроса вышли


 
ANB ©   (2006-08-29 15:17) [18]


> Orxan   (29.08.06 15:10) [17]

Значит сервак таки локализованный обычный и при создании БД/инстанса указали западно-европейскую кодировку. Базу пересоздавать надо. А еще кто-нибудь на этой базе работает без проблем ?


 
sniknik ©   (2006-08-29 15:21) [19]

> поменял на адо.  но опять же при присваивании значения этого поля в тнтедит показвает " ї "
а ї это уже не вопросы (ошибки преобразований) это уже юникод, только не установленная на машине страница похоже (тогдо оно приводит к максимально похожей, но...).

возми ту, что у тебя есть (разные сайты пооткрывай) но точно юникодовскую, и сначала запиши в базу, после прочитай, должно быть одно и тоже... если нет, значит неправильно сделал. когда получиш номальную строку на выход замени tnt компонент на стандартный (убедится что юникод, он опять вопросами станет)
если все работает (и пишеш и чатаеш) то можеш смело прогу куда хочеш отправлять у них будет также.

> ЗЫ. Не надо через ADO с ораклом работать при наличии хотя бы DOA.
а ты уверен что он поддерживает юникод? я нет.


 
ANB ©   (2006-08-29 15:22) [20]

Еще можешь вот так попробовать RUSSIAN_CIS.CL8MSWIN1251.

Кстати, проведи эксперимент - создай тестовую таблицу с varchar2 полем и поковыряй ее на предмет русских букв.


 
ANB ©   (2006-08-29 15:24) [21]


> а ты уверен что он поддерживает юникод? я нет.

Я - тоже нет. Но одак прекрасно лопал ANSI, оракла сама конвертила в юникод и обратно. Критичен ли тут именно юникод на клиенте ?


 
Orxan   (2006-08-29 15:24) [22]

да есть готовая прога на жаве написана, без проблем работает. так что пересоздавать не получится.
да вот эта прога первая, и такая проблемка. да указывали  западно-европейскую кодировку, поэтомуто я прописывал AMERICAN_AMERICA.WE8MSWIN1252

спосибо за помощ.


 
sniknik ©   (2006-08-29 15:29) [23]

> Критичен ли тут именно юникод на клиенте ?
да, критичен. т.к. 3 используемых языка насчитал (английский (всегда есть), русский (ну не на турецкой же винде разработка), турецкий (нужен))


 
Orxan   (2006-08-29 16:07) [24]

не, винда английская стоит.
попытаюсь через адо опять сделать.


 
Anatoly Podgoretsky ©   (2006-08-29 16:07) [25]

ANB ©   (29.08.06 15:24) [21]
Конечно, конвертирование ANSI туда и обратно базируется на текущей локализации сторон. Если языков более двух, то вообще невозможно.


 
Anatoly Podgoretsky ©   (2006-08-29 16:09) [26]

Orxan   (29.08.06 16:07) [24]
Не играет роли, роль играет только текущая локализация, при том для конкретного потока, возможно даже разные локализации в разных потоках, кроме того еще вмешивается и сервер, если ANSI поступает в него.


 
ANB ©   (2006-08-29 16:16) [27]

Текс. Насколько я помню, при работе с юникодом нужно ораклу явно указывать, что строка в юникоде. Что то в этом роде DOA обязан поддерживать.


 
Anatoly Podgoretsky ©   (2006-08-29 16:18) [28]

ANB ©   (29.08.06 16:16) [27]
Я не знаю Оракл, но думаю что это так, поскольку с других именно так и в разных по разному указывается, при том это относитстя не только к Юникоду, но особенно к ANSI


 
ANB ©   (2006-08-29 16:25) [29]

Текс. Провел эксперимент на 8-ке.

create table Table1_T (ID number, S nvarchar2 (2000))

select dump(S) from Table1_T

select S from Table1_T

update Table1_T
set S = "Вася"

update Table1_T
set S = N"Петя"

Жрет и васю и петю и показывает все по русски. Работал в тоаде. dump показывает, что строка лежит в юникоде.


 
ANB ©   (2006-08-29 16:26) [30]

Кстати, помнится 9-ка хотела явного указания N"". Без этого работать не хотела. Не помню, как я через параметры это запихал, но запихал.


 
ANB ©   (2006-08-29 16:27) [31]

Вру - эсперимент это я провел на 9.2. Запутался я с нашими серваками.


 
Anatoly Podgoretsky ©   (2006-08-29 16:28) [32]

Конечно в Юникоде, не не может запрос изменить тип поля.
Второй запрос гарантирует правильность, а вот первый нет, будет зависить от текущей локализации. Попробуй установи кодовую кодировку для клиента отличной от русской, например 1252 и повтори эксперимент.


 
ANB ©   (2006-08-29 16:34) [33]

попробовал - не могу законнектится :)


 
sniknik ©   (2006-08-29 16:42) [34]

> Жрет и васю и петю и показывает все по русски.
а теперь, на бис, то же самое для молдавского/грузинского/любого какой найдеш но не русского языка! (и не английского. знаем вас...)
;о))


 
Orxan   (2006-08-29 16:44) [35]

на 1252 пробовал, тоже самое получилось


 
Anatoly Podgoretsky ©   (2006-08-29 16:49) [36]

ANB ©   (29.08.06 16:34) [33]
Ну тебе не повезло, а если бы смог, то Петю бы не увидел.


 
Anatoly Podgoretsky ©   (2006-08-29 16:49) [37]

Orxan   (29.08.06 16:44) [35]
Тебе доверия нет.


 
ANB ©   (2006-08-29 16:56) [38]


> sniknik ©   (29.08.06 16:42) [34]

А как по молдавски в тоаде набрать то ?


> Anatoly Podgoretsky ©   (29.08.06 16:49) [36]

Попробовал на 1250 - коннект прошел, но ничего не сломалось.

Короче - надо N писать перед константой, как это в параметр запихать - х.з., не помню. Есть смысл сходить на SQL.RU и поспрошать тамошних знатоков.

Автор - проведи эксперимент по образцу и подобию. И запости результат.


 
Anatoly Podgoretsky ©   (2006-08-29 17:04) [39]

ANB ©   (29.08.06 16:56) [38]
Короче - надо N писать перед константой, как это в параметр запихать - х.з., не помню.

Естесвенно, только это гарантирует правильность, а написать примерно так
"set S = N:P"


 
ANB ©   (2006-08-29 17:13) [40]


> "set S = N:P"

Не а. Так не жрет.



Страницы: 1 2 вся ветка

Текущий архив: 2006.10.29;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.03 c
1-1158675326
buzz
2006-09-19 18:15
2006.10.29
Загадка для знатоков VCL


3-1157526169
worldmen
2006-09-06 11:02
2006.10.29
Select -обыкновенный (с like и upper)


15-1159933925
[DUH]
2006-10-04 07:52
2006.10.29
Работа с теодолитом


1-1158687621
parasolka
2006-09-19 21:40
2006.10.29
DBGrid с нумерацией строк


2-1160467962
Монг
2006-10-10 12:12
2006.10.29
Как узнать из какой формы вызвана форма ?