ADO + MSSQL + поля типа NTEXT
rozen
Дата: 27.02.2003 09:16:41
Проблема в следующем. Имеется запрос, возвращающий в том числе и поле типа NTEXT (специфика такова, что там действительно многоязыковое содержимое).
Сервер на котором работает и SQL-сервер и Delphi-программа чисто-американский.
Проблема в том, что Дельфи получая результат такого запроса обрабатывает возвращеный результат как TMemoField и значения из него преобразует к AnsiString и выдает "на гора" в виде именно AnsiString.
Естественно, что все Unicode-разнообразие "мапится" в основной набор ANSI-символов и много чего заменяется знаками '?'
Вопрос -- как извлечь в Дельфи содержимое поля типа NTEXT напрямую в WideString без промежуточного преобразования в ANSI-текст, приводящего к потерям смысла?
Рассматривался вариант сделать некую кодирующую функцию на сервере, преобразующую NTEXT в некий промежуточный формат. Не подходит из-за ограничений на длину возвращаемого поля типа VARCHAR
ziktuw
Дата: 27.02.2003 09:58:43
Попробуй присвоить Field.AsVariant в переменную типа Variant, а потом проанализируй тип. Если varOleStr, то все не так безнадежно, можно сразу присваивать Field.AsVariant в WideString переменную.
ziktuw
Дата: 27.02.2003 10:02:17
Только что ты будешь с этим делать? При выводе на экран, unicode-строка будет все равно преобразовываться в обычную, основываясь на региональных настройках, заменяя неподпадающие под рег. настройки символы знаком вопроса. Наличие UNICODE-шрифта с полным набором символов, правда, может выручить. Но это редкость.
rozen
Дата: 28.02.2003 07:19:47
Что с этим делать -- я знаю. Отображаться текст будет на той же самой станции, откуда он был введен в базу. И на многих других, которые тоже запросто могут с этим работать.
Сообщения "насквозь" проходят замечательно -- и на макинтоше и на пи-си и в дельфи-клиенте и в любом ява-клиенте нормально выводятся на экран символы латинского, греческого, западноевропейского, русского алфавитов ОДНОВРЕМЕННО. А вот из базы дельфи-приложением не читаются :(
А asp-скриптом читаются на ура :(
Кстати, совет с Variant оказался не рабочим -- vartype(MyMemoField.AsVariant) возвращает 256 = varString.
TBlobField тоже не работает....