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必須設定...