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

Вниз

Пересылка variant массива по T*Socket   Найти похожие ветки 

 
ISP ©   (2006-10-13 15:59) [0]

Схема клиент/сервер. По запросу клиента, сервер генерирует таблицу и передает клиенту. Сложность в том, что структура таблицы на сервере не определена заранее и может состоять из различных переменных. В данной версии, таблица зашивается в StringList и пересылается клиенту, который в свою очередь конвертирует её в свой типизированый массив, но возникают проблеммы с форматом данных (TDate, TTime, Extended и т.д.) и лишней конвертацией, что весьма заметно при крупных объемах. Может посоветуете другой вариант?
Появилась идея пересылать variant массив, но не получается.
С типизированным делаю примерно так:

type TRec = record
     int:array of array of integer;
end;

procedure TForm1.SendData(Socket:TCustomWinSocket; rec:TRec);
var msData : TMemoryStream;
begin
.....
 msData := TMemoryStream.Create;
 msData.Write(rec, SizeOf(rec));
 msData.Position := 0;
 Socket.SendStream(mydata);
end.


но с вариантом это не прокатывает.

type TRec = record
       int:array of array of variant;
end;

Подскажите где покопатся?


 
Reindeer Moss Eater ©   (2006-10-13 16:08) [1]

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


 
ISP ©   (2006-10-13 16:37) [2]


> Reindeer Moss Eater ©   (13.10.06 16:08) [1]
>
> Универсальный вариант - пересылать xml документ.

Но ведь в xml переменые типа TDateTime, Currency тоже записываются в виде текста (или я что-то пропустил?), а значит опять возникает проблема с форматами при обратном конвертировании. В моём случае желательно не менять форматы установленные в системе на клиенте.


 
Орион ©   (2006-10-13 17:22) [3]

> [2] ISP ©   (13.10.06 16:37)

А что мешает ввести поле формата данных и в зависимости от него конвертировать?


 
ISP ©   (2006-10-13 17:32) [4]


> Орион ©   (13.10.06 17:22) [3]
>
> > [2] ISP ©   (13.10.06 16:37)
>
> А что мешает ввести поле формата данных и в зависимости
> от него конвертировать?

В данном случае с xml я ни чего не выигрываю по сравнению со StringList. Таже конвертация туда/обратно, а хотелось от этого избавиться. Как-то не верится что нет иного решения.


 
Polevi ©   (2006-10-13 17:42) [5]

сериализуй варианты в поток и затем обратно
посмотри VarArray ф-ии - VarArrayLock, VarArrayCreate итд


 
ISP ©   (2006-10-13 18:50) [6]


> Polevi ©   (13.10.06 17:42) [5]

Благодаствуем. Не уверен что до конца понял, но попробую поискать там...


 
SpellCaster   (2006-10-16 12:38) [7]

Хм, а что мешает передавать поток байт, а на принимающей стороне уже его декодировать?


 
Сергей М. ©   (2006-10-16 13:47) [8]


> ISP ©   (13.10.06 18:50) [6]


см. в кач-ве примера сериализации методы TDataBlockInterpreter.Read/WriteArray, TDataBlockInterpreter.Read/WriteVariant в юните sconnect.pas


 
ISP ©   (2006-10-16 15:53) [9]


> Сергей М. ©   (16.10.06 13:47) [8]

Во теперь понял, оно самое :)


> Polevi ©   (13.10.06 17:42) [5]
> Сергей М. ©   (16.10.06 13:47) [8]


Спасибо за помощь.



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

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

Наверх




Память: 0.49 MB
Время: 0.038 c
15-1173265660
alex-drob
2007-03-07 14:07
2007.04.01
Компьютер зависает на приветствии


2-1173280010
pasha star
2007-03-07 18:06
2007.04.01
OnRestart , OnShutdown..


1-1170938140
linox
2007-02-08 15:35
2007.04.01
Форма и панель задач


4-1163524472
Wadim
2006-11-14 20:14
2007.04.01
Как сделать обновление экрана как при нажатии кнопки Windows


3-1168937991
pavel_guzhanov
2007-01-16 11:59
2007.04.01
Как проверить содержимое поле типа DateTime на null