Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.06.02;
Скачать: CL | DM;

Вниз

Формат пакета TClientDataSet D7 и XE2   Найти похожие ветки 

 
Медвежонок Пятачок ©   (2013-01-28 20:49) [0]

Ищется элегантный временный костыль.
Реанимируется самопальная трехзвенка десятилетней давности, в которой используется TClientdataset. (D7 -> XE2)
Первым этапом мигрирует апп-сервер, обеспечивая поддержку древних клиентов (их сто триллионов тысяч).

Суть проблемы:
Длинное имя поля клиент-датасета (длиннее чем 16 символов) в семерке:

<DATAPACKET Version="2.0">
<METADATA>
<FIELDS>
 <FIELD fieldname="очень длинное имя поля датасета" attrname="очень_длинное_имя_поля_датасета" fieldtype="string" WIDTH="50"/>
</FIELDS>

Оно же в XE2
<DATAPACKET Version="2.0">
<METADATA>
 <FIELDS>
  <FIELD fieldname="" attrname="очень_длинное_им&#65533;" fieldtype="string" WIDTH="50">
   <PARAM Name="FIELDNAME" Value="очень длинное имя поля датасета" Roundtrip="True"/>
  </FIELD>
 </FIELDS>

Как видно филднейм пустой, аттрнейм обрезан до 16 символов, в конце встален символ нечитаемый парсерами, а нормальное имя переехало в чайлд узел.
Та же картина и в узлах с данными.
Семерочный клиентдатасет такого пакета не понимает.

Засада в том, что добавленный гадский символ не дает мне открыть пакет как xml и пофиксить его перед отправкой старому клиенту.
Вот.

Временно решено с помощью DLL собранной на семерке, которую юзает аппсервер.


 
DVM ©   (2013-01-28 23:04) [1]


> Медвежонок Пятачок ©   (28.01.13 20:49) 


> Как видно филднейм пустой, аттрнейм обрезан до 16 символов,
>  в конце встален символ нечитаемый парсерами

Какие парсеры пробовал, кроме msxml?


 
sniknik ©   (2013-01-29 07:57) [2]

это TClientdataset так коверкает данные? замени его на TAdoDataset. функциональности в основном хватает (чего нет, мне встретилось, так это возможности отобрать/фильтровать измененные данные. остальное вроде присутствует).


 
sniknik ©   (2013-01-29 08:11) [3]

> не дает мне открыть пакет как xml и пофиксить его перед отправкой старому клиенту.
а ты открывай как текст...

и с TAdoDataset тоже придется подгонять формат xml под старого клиента, т.к. отличается, но вот такого как описано не будет. он работает одинаково (т.к. не зависит) на любой версии дельфи.


 
Медвежонок Пятачок ©   (2013-01-29 08:55) [4]

Заменить клиент датасет не проблема. Но надо чтобы старые клиенты остались рабочими.
Парсер думаю любой обломается, так так там символ BCD1 все остальное - честный utf-8.
В общем пока остановился на двух вариантах.
Сохранить, убрать символ, загрузить в дом, исправить имена.
Или семерочная длл.


 
sniknik ©   (2013-01-29 10:07) [5]

> Но надо чтобы старые клиенты остались рабочими.
предполагал, что ты подсунешь им xml старого формата... просто для начала вместо -
> Сохранить, убрать символ, загрузить в дом, исправить имена.
будет на шаг меньше, типа с - загрузить в дом, подкорректировать структуру под старое.

хотя сейчас думаю текстом было бы проще символ "выкусить", без сохранения, одним stringreplace. т.к. структуры ADO и Client сильно отличаются.



Страницы: 1 вся ветка

Текущий архив: 2013.06.02;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
15-1359232203
Юрий
2013-01-27 00:30
2013.06.02
С днем рождения ! 27 января 2013 воскресенье


15-1359033022
картман
2013-01-24 17:10
2013.06.02
отопление


15-1359173042
Студент
2013-01-26 08:04
2013.06.02
Сломался USB-Разъём.


15-1359145803
Юрий
2013-01-26 00:30
2013.06.02
С днем рождения ! 26 января 2013 суббота


15-1358864685
Nucer
2013-01-22 18:24
2013.06.02
Исключение при доступе к памяти