这个很简单,直接上码。
服务器端声明过程
[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(,'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( ,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;
我们访问一下试试
没问题了,一切消停了。