Мы подключаемся к многопользовательской таблице 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 ... но должна быть разница. Может быть из-за того, что многопользовательский?
Итак ... есть ли у кого-нибудь какие-либо рекомендации о том, как получить правильные строковые данные для чтения?
Если вам нужна дополнительная информация, пожалуйста, спросите.
Грег