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

2021-09-07 22:39:49 字數 2340 閱讀 7511

有同仁需要遠端方法傳輸自定義的資料型別,他以為要自己寫**會很複雜,其實datasnap早就為我們想到了。

datasnap的資料序列和還原真是無與倫比的強大,其遠端方法支援自定義物件傳參,datasnap會自動使用json序列和還原自定義的物件。

1)自定義乙個物件

type

tmyinfo = class(tobject)

public

accountno: string;

sql: string;

params: string;

recsmax: integer;

end;

2)服務端遠端方法定義

function tservermethods1.querysql4(const myinfo: tmyinfo): tfdjsondatasets;

vard: tfrmdb;

i, ipos: integer;

sl: tstringlist;

lname, lvalue, lstr: string;

p: tfdparam;

begin

result := nil;

if not assigned(myinfo) then

exit;

if (myinfo.accountno = '') or (myinfo.sql = '') then

exit;

d := getdbpool(myinfo.accountno).lock;

if not assigned(d) then

exit;

trytry

d.qryopen.close;

d.qryopen.sql.clear;

d.qryopen.sql.text := myinfo.sql;

if myinfo.params <> '' then

begin

sl := tstringlist.create;

trysl.delimiter := ';';

sl.delimitedtext := myinfo.params;

for i := 0 to sl.count - 1 do

begin

lstr := sl.strings[i];

ipos := pos(':', lstr);

lname := leftstr(lstr, ipos - 1);

lvalue := rightstr(lstr, length(lstr) - ipos);

p := d.qryopen.findparam(lname);

if p <> nil then

p.value := lvalue;

end;

finally

sl.free;

end;

end;

d.qryopen.open;

result := tfdjsondatasets.create;

tfdjsondatasetswriter.listadd(result, '1', d.qryopen);

except

on e: exception do

begin

result := nil;

log.writelog('tservermethods1.querysql2 ' + e.message);

end;

end;

finally

d.qryopen.close;

getdbpool(myinfo.accountno).unlock(d);

end;

end;

3)客戶端呼叫

procedure tform1.button3click(sender: tobject);

varldatasets: tfdjsondatasets;

ldataset: tfddataset;

myinfo: tmyinfo;

begin

myinfo := tmyinfo.create;

myinfo.accountno := '0';

myinfo.sql := 'select * from t1 where c1=:c1';

myinfo.params := 'c1:55';

ldatasets := methods.querysql4(myinfo);

ldataset := tfdjsondatasetsreader.getlistvaluebyname(ldatasets, '1');

fdmemtable1.close;

fdmemtable1.data := ldataset;

end;

DATASNAP遠端方法返回TSTREAM正解

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

DATASNAP遠端方法返回TSTREAM正解

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

自簽名證書支援https

openssl req new newkey rsa 2048 nodes subj key ssl.key out ssl.csr主題可以空著,但是不能不寫這個引數,不然會讓你一行一行輸入 openssl req new newkey rsa 2048 nodes subj c cn st gua...