11.04.2008, 11:52 | #1 |
Участник
|
Как средствами SQL QA разобрать контейнер по частям
Добрый день! Вопрос: можно ли только средствами SQL QA вытащить из Axapta таблицы контейнер и разобрать его по частям? Например, имеется таблица Batch, в ней поле Info - тип контейнер. Поле Info содержит описание запущенного батчем объекта. Из этого поля нужно только средствами SQL QA вытащить имя и тип объекта, запущенного в Batch'е. как это сделать?
|
|
11.04.2008, 12:06 | #2 |
Участник
|
В SQL поле info имеет тип image. Вот что написано в BOL по поводу этого типа данных:
Цитата:
Сведения в данных image хранятся в виде строки битов и не обрабатываются SQL Server. Любая обработка данных в столбце image должна проводиться приложением. Например приложение могло бы хранить данные в столбце image в форматах BMP, TIFF, GIF или JPEG. Приложение, считывающее данные из столбца image, должно распознавать и правильно отображать формат данных. Все, что делает столбец image, — это предоставление места для хранения потока битов, составляющих значение данных image.
|
|
11.04.2008, 12:23 | #3 |
Участник
|
Можно.
Если приведете здесь пример последовательности байтов в поле из SQL QA, ее вам помогут расшифровать, думаю |
|
11.04.2008, 12:30 | #4 |
Участник
|
проблема в том что эта самая последовательность битов каждый раз может меняться
Код: Info = 0x0701000000000042617463682070726F63657373696E67090952756E206A6F62202727206F7264657265642062792027494E5642412720696E2064617461626173652027616731272E00FF |
|
11.04.2008, 12:37 | #5 |
Участник
|
ой, еще бы хорошо и содержимое контейнера из АХ
И начните читать вот этот код: Посмотреть Dimension в контейнере Собственно, вам вот это нужно будет сделать Последний раз редактировалось kashperuk; 11.04.2008 в 12:42. |
|
11.04.2008, 12:48 | #6 |
Участник
|
Содержимое контейнера:
|
|
11.04.2008, 13:31 | #7 |
Участник
|
Ну, у вас видимо 4ка, и данные в Unicode
Соответственно, первый байт 07 - это начало контейнера, последний FF - окончание контейнера потом идет код типа 01 - целое число, и за ним 4 байта этого числа (8 нулей в строке). Потом идет код след. типа - 00 - это строка, и дальше строка, завершающаяся 00 в самом конце (перед FF) Соответственно, осталась вот эта строка для анализа, и мы знаем, что все это - строка в Unicode Код: 42617463682070726F63657373696E67090952756E206A6F62202727206F7264657265642062792027494E5642412720696E2064617461626173652027616731272E http://www.tamasoft.co.jp/en/general-info/unicode.html и по чуть-чуть начинаем расшифровывать: (замечу, что тут можно смотреть и на ASCII таблицу, потому как используются только эти символы, наскольку я вижу - http://www.asciitable.com/) 42 => 0040 на пересечении с 02 => B 61 => 0060 на пересечении с 01 => a .... 2E => 0020 на пересечении c 0E => . Вам осталось только это запрограммировать ) |
|
11.04.2008, 13:58 | #8 |
Участник
|
Вопрос ConPeek - здесь есть пример хранимой процедуры, разбирающей контейнерные поля. Только надо допилить для правильного разбора Unicode
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: aidsua (1). |
26.01.2015, 12:00 | #9 |
Участник
|
Версия AX: 4.0.
Если я применяю контейнер, содержащий другие контейнеры, то в БД получается что-то типа такого: X++: 0x07FD0707FD0102F001000061006C006200650031000000006E006C006F00620061000000FF0707FD0101F0010001E15F00000165790000FF0707FD0100F00100037004190370001EFF0707FD010AF0010001E0DAAA7301FB098073FF0707FD015B0001000052004F0057002D0033000000000000FFFF Маркер конца контейнера - FF. Вопрос: что такое FD? Начало контейнера? Т.е. контейнер определяется началом 07FD и концом FF. С внутренними контейнерами вообще непонятно, почему начало 0707FD? С самими данными все вроде бы понятно: 0: string 1: integer 2: real 3: date 4: enum 7: container 5: rstring скорее всего то же самое, что 0 (string) 6: datetime скорее всего для AX то же самое, что 1 (integer) Далее двигаться по нумерации, похоже, смысла нет. Так вот. Может ли кто-нибудь подсказать, откуда берутся в начале контейнера байт FD и лишний байт субконтейнера 07?
__________________
// no comments Последний раз редактировалось dech; 26.01.2015 в 12:03. |
|
|
|