Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];

Вниз

Юникоды и компонент 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.043 c
11-1136982335
Vadim Petrov
2006-01-11 15:25
2006.10.29
Кладову - KolAdd


2-1160997990
Jimmy
2006-10-16 15:26
2006.10.29
Работа с Sys Tray.


1-1158261697
oxffff
2006-09-14 23:21
2006.10.29
ВDS 2006 тоже не поддерживает custom variant byRef


2-1160719741
Alex_C
2006-10-13 10:09
2006.10.29
Почему мерцает TMemo


2-1159904838
mr1Andersen
2006-10-03 23:47
2006.10.29
Как сделать так что бы программа сделанная на делфи, работала вес





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский