• 使用kbmmw smarthttpservice 简单返回数据库结果


    这个很简单,直接上码。

    服务器端声明过程

    [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;

    我们访问一下试试

    没问题了,一切消停了。

  • 相关阅读:
    BZOJ3578:GTY的人类基因组计划2(集合hash,STL)
    【BZOJ 1022】 [SHOI2008]小约翰的游戏John
    【BZOJ 1295】 [SCOI2009]最长距离
    【BZOJ 1103】 [POI2007]大都市meg
    【BZOJ 3172】 [Tjoi2013]单词
    【BZOJ 1067】 [SCOI2007]降雨量
    【BZOJ 1491】 [NOI2007]社交网络
    【BZOJ 1087】[SCOI2005]互不侵犯King
    【BZOJ 1009】 [HNOI2008]GT考试
    【BZOJ 1053】[HAOI2007]反素数ant
  • 原文地址:https://www.cnblogs.com/xalion/p/10164798.html
Copyright © 2020-2023  润新知