Delphi TBytesField - Как правильно увидеть текст - Источник - HIT OLEDB AS400 - PullRequest
0 голосов
/ 28 апреля 2010

Мы подключаемся к многопользовательской таблице AS400 iSeries через HIT OLEDB и HIT ODBC.

Вы подключаетесь к этой таблице через псевдоним, чтобы получить доступ к определенному мульти-члену. Мы создаем псевдоним на AS400 следующим образом:

CREATE ALIAS aliasname FOR table(membername)

Затем мы можем запросить каждого члена таблицы следующим образом:

SELECT * FROM aliasname

Сначала мы тестируем это в Delphi6, но позже переместим его на D2010

Мы используем HIT OLEDB для AS400.

Мы собираем записи из таблицы, и поле рассматривается как поле tBytesField. Я также попробовал драйвер ODBC, и он также выглядит как tBytesField.

Непосредственно на AS400 я могу запрашивать данные и видеть читаемый текст. Я могу использовать инструмент навигации iSeries и также видеть читаемый текст.

Однако когда я передаю его клиенту Delphi через HIT OLEDB или HIT ODBC и пытаюсь просмотреть через asString, я просто вижу нечитаемый текст ... что-то вроде этого:

NDD @ ðõñððððñ ÷ @ õôððõñòøóóöøñðÂÁÕÒ @ oÆ @ ÁÔÅÙÉÃÁ @@@@@@@@ ÂÈÙÉâãæÁðòñè @ @ OK K @ ÉÕÃK @@@@@@@@@ ç

Я перемешал текст выше, но это типы символов, которые появляются.

Когда я делал тест в D2010, текст выглядит как японские или китайские символы, но если я отображаю как AnsiString, то он выглядит так же, как в Delphi 6.

Я думаю, что это может иметь какое-то отношение к кодовым страницам или наборам символов, но я не имею никакого опыта в этом, поэтому для меня это ново, если это связано. Когда я смотрю на Набор кодированных символов на AS400, он установлен на 65535.

Что мне нужно сделать, чтобы сделать этот текст читабельным?

У нас есть сторонний компонент (Delphi400), который заставляет вещи вести себя более естественным образом AS400. Когда я использую его соединение AS400 и компоненты запроса AS400, оно показывает поле как tStringField и отображается просто отлично. НО мы отказываемся от этого продукта (по ряду причин) и действительно хотели бы, чтобы OLEDB с компонентами ADO работал.

Просто для пояснения, в HIT OLEDB с tADOQuery есть некоторые поля, отображаемые как tStringFields для многих других таблиц, которые мы используем ... не уверен, почему в этом случае он отображается как tBytesField. Я не эксперт по AS400, но, глядя на определения полей на AS400, те, которые отображаются как tBytesField, выглядят так же, как и те, которые отображаются как tStringFields ... но должна быть разница. Может быть из-за того, что многопользовательский?

Итак ... есть ли у кого-нибудь какие-либо рекомендации о том, как получить правильные строковые данные для чтения?

Если вам нужна дополнительная информация, пожалуйста, спросите.

Грег

Ответы [ 2 ]

0 голосов
/ 04 мая 2010

Я нашел ответ ... и в HIT ODBC 400, и в HIT OLEDB 400 есть свойство, которое называется: «Преобразовать CCSID 65535 = True» или в OLEDB UDL оно выглядит как «Двоичные символы = True».

Не знаю, как я скучал по ним, но это помогло!

Спасибо за отзыв.

0 голосов
/ 29 апреля 2010

Одна проблема состоит в том, что ваш клиент не знает, что ему следует преобразовать данные из EBCDIC в ASCII, поскольку CCSID в таблице сервера был установлен неправильно.

Предполагается, что CCSID 65535 означает, что поле содержит двоичные данные. Ваш клиент не знает, что столбец содержит строку в кодировке EBCDIC, и поэтому не пытается преобразовать ее.

На моих серверах все наши символьные поля имеют CCSID 37, который является EBCDIC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...