有同仁需要遠端方法傳輸自定義的資料型別,他以為要自己寫**會很複雜,其實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...