以前,我们通过自己写json 来返回数据表的内容。在delphi 10.2.2中,官方自带了一个FDBatchMoveJSONWriter1
来直接处理数据库内容。把结果推送到浏览器客户端。
今天我们就利用kbmmw 自身的功能,做一个类似的东西。
在主界面放上相关的数据库访问控件
首先在服务上放两个东西
一个查询,一个kbmmwjsonstreamformat.
定义相关的函数
[kbmMW_Rest('method:get, path:getdata')] [kbmMW_Method] function getdata([kbmMW_Rest('value: "$tname", required: true')] const tname:string):string;
并完成对应的执行代码
function TkbmMWCustomHTTPSmartService1.getdata(const tname: string): string; var ms:Tstringstream; sjson:TkbmMWJSONStreamer; alljson,outjson: TkbmMWJSONObject; datajson: TkbmMWJSONArray; begin if tname='' then begin result:='{"result":"表名为空!"}'; exit; end; cx.SQL.Clear; cx.SQL.Add('select * from '+tname); cx.Open; if cx.IsEmpty then begin result:='{"result":"数据为空!"}'; exit; end; ms:=Tstringstream.Create; sjson:=TkbmMWJSONStreamer.Create; outjson:=TkbmMWJSONObject.Create; try cx.SaveToStreamViaFormat(ms,kbmMWJSONStreamFormat1); ms.Position:=0; alljson:=TkbmMWJSONObject(sjson.LoadFromUTF8Stream(ms)); datajson:=TkbmMWJSONArray(alljson.AsArray['data']); outjson.AsArray[tname]:=datajson; result:= sjson.SaveToUTF16String(outjson) finally ms.Free; sjson.Free; outjson.Free; end; end;
由于kbmmw 的数据库存json , 包含了其它信息,我们就把不用的信息干掉。
完成后,运行程序
浏览器中输入对应的URL
http://127.0.0.1/xalionrest/getdata?tname=emp
就得到了输出结果
其实也是很方便的。