DATASNAP遠端方法返回TSTREAM正解

2021-09-07 22:40:51 字數 1354 閱讀 2041

datasnap遠端方法返回tstream正解

datasnap遠端方法返回tstream,如果資料大小超過32k是會報錯的。許多delphier栽在這個上頭,甚至開始懷疑tstream返回資料的可行性。

因為datasnap遠端方法返回tstream,資料報大小有最大32k限制。

怎麼解決?客戶端要做幷包處理。

function copystream(const astream: tstream): tmemorystream;

const

lbufsize = $f000;

varlbuffer: tbytes;

lreadlen: integer;

begin

result := nil;

if astream = nil then

exit;

result := tmemorystream.create;

tryif astream.size = -1 then

begin

setlength(lbuffer, lbufsize);

repeat

lreadlen := astream.read(lbuffer[0], lbufsize);

if lreadlen > 0 then

result.writebuffer(lbuffer[0], lreadlen);

if lreadlen < lbufsize then

break;

until lreadlen < lbufsize;

endelse

result.copyfrom(astream, 0);

result.position := 0;

except

result.free;

end;

end;

procedure tform1.btnqry3click(sender: tobject);

varlstream: tstream;

lmemstream: tmemorystream;

begin

datasource1.dataset := fdmemtable1;

lstream := methods.querysql3('0', 'select * from t1');

if lstream <> nil then

begin

lmemstream := copystream(lstream);

fdmemtable1.loadfromstream(lmemstream, tfdstorageformat.sfbinary);

lmemstream.free;

end;

end;

DATASNAP遠端方法返回TSTREAM正解

datasnap遠端方法返回tstream正解 datasnap遠端方法返回tstream,如果資料大小超過32k是會報錯的。許多delphier栽在這個上頭,甚至開始懷疑tstream返回資料的可行性。因為datasnap遠端方法返回tstream,資料報大小有最大32k限制。怎麼解決?客戶端要做...

datasnap遠端方法支援自定義物件傳參

有同仁需要遠端方法傳輸自定義的資料型別,他以為要自己寫 會很複雜,其實datasnap早就為我們想到了。datasnap的資料序列和還原真是無與倫比的強大,其遠端方法支援自定義物件傳參,datasnap會自動使用json序列和還原自定義的物件。1 自定義乙個物件 type tmyinfo class...

DataSnap 2009 系列之二 (方法篇)

在過去客戶端要呼叫遠端伺服器的方法需要通過在tlb裡新增介面並且在伺服器物件中實現,在datasnap 2009中呼叫遠端伺服器的方法是基於delphi的rtti機制的,想要乙個類允許被遠端呼叫需要做以下兩點 1.把該類和dsserverclass連線在一起 注意 dsserverclass必須設定...