![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Пересылка variant массива по T*Socket
ISP © (2006-10-13 15:59:00)Схема клиент/сервер. По запросу клиента, сервер генерирует таблицу и передает клиенту. Сложность в том, что структура таблицы на сервере не определена заранее и может состоять из различных переменных. В данной версии, таблица зашивается в 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;
Подскажите где покопатся?
ISP (2006-10-16 15:53:00) [1]
> Сергей М. © (16.10.06 13:47) [8]
Во теперь понял, оно самое :)
> Polevi © (13.10.06 17:42) [5]
> Сергей М. © (16.10.06 13:47) [8]
Спасибо за помощь.
Сергей М. (2006-10-16 13:47:00) [2]
> ISP © (13.10.06 18:50) [6]
см. в кач-ве примера сериализации методы TDataBlockInterpreter.Read/WriteArray, TDataBlockInterpreter.Read/WriteVariant в юните sconnect.pas
SpellCaster (2006-10-16 12:38:00) [3]Хм, а что мешает передавать поток байт, а на принимающей стороне уже его декодировать?
ISP (2006-10-13 18:50:00) [4]
> Polevi © (13.10.06 17:42) [5]
Благодаствуем. Не уверен что до конца понял, но попробую поискать там...
Polevi (2006-10-13 17:42:00) [5]сериализуй варианты в поток и затем обратно
посмотри VarArray ф-ии - VarArrayLock, VarArrayCreate итд
ISP (2006-10-13 17:32:00) [6]
> Орион © (13.10.06 17:22) [3]
>
> > [2] ISP © (13.10.06 16:37)
>
> А что мешает ввести поле формата данных и в зависимости
> от него конвертировать?
В данном случае с xml я ни чего не выигрываю по сравнению со StringList. Таже конвертация туда/обратно, а хотелось от этого избавиться. Как-то не верится что нет иного решения.
Орион (2006-10-13 17:22:00) [7]> [2] ISP © (13.10.06 16:37)
А что мешает ввести поле формата данных и в зависимости от него конвертировать?
ISP (2006-10-13 16:37:00) [8]
> Reindeer Moss Eater © (13.10.06 16:08) [1]
>
> Универсальный вариант - пересылать xml документ.
Но ведь в xml переменые типа TDateTime, Currency тоже записываются в виде текста (или я что-то пропустил?), а значит опять возникает проблема с форматами при обратном конвертировании. В моём случае желательно не менять форматы установленные в системе на клиенте.
Reindeer Moss Eater (2006-10-13 16:08:00) [9]Универсальный вариант - пересылать xml документ.