Форум: "Базы";
Текущий архив: 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