这个很简单,直接上码。
服务器端声明过程
[kbmMW_Rest('method:get, path:querytable')] [kbmMW_Method] function querytable( [kbmMW_Rest('value: "$tname", required: true')] const tblname:string; [kbmMW_Rest('value: "$id", required: true')] const id:string):Tkbmmemtable;
具体实现代码
function TkbmMWCustomHTTPSmartService1.querytable(const tblname, id: string): Tkbmmemtable; var sqls:string; begin if tblname='' then begin kbmMWRaiseHTTPError(500,'result:{"ok":"error","value":"table not exist! "}'); end; sqls:='select * from '+tblname; if id<>'' then begin sqls:=sqls+' where CustNo='+id; end; cx.sql.text:=sqls; try cx.open; except on e:exception do kbmMWRaiseHTTPError(500 ,e.Message); end; result:=Tkbmmemtable(cx); end;
运行结果
由于这个返回对象是 Tkbmmemtable.
因此出现错误后,服务器返回的是500, 没办法显示具体的错误。
其实对于这个问题,我们也可以解决。
首先我们增加一个 错误信息表
然后我们把错误信息写到这个表里面就可以了
function TkbmMWCustomHTTPSmartService1.querytable(const tblname, id: string): Tkbmmemtable; var sqls:string; begin result:=errtable; errtable.Active:=True; errtable.EmptyTable; if tblname='' then begin errtable.Append; errtable.FieldByName('ok').AsString:='error'; errtable.FieldByName('msg').AsString:='table not exist!'; errtable.Post; exit; end; sqls:='select * from '+tblname; if id<>'' then begin sqls:=sqls+' where CustNo='+id; end; cx.sql.text:=sqls; try cx.open; except on e:exception do begin errtable.Append; errtable.FieldByName('ok').AsString:='error'; errtable.FieldByName('msg').AsString:=e.Message; errtable.Post; exit; end; end; result:=Tkbmmemtable(cx); end;
我们访问一下试试
没问题了,一切消停了。