kbmmw 中简单返回 extjs 数据JSON

以前,我们通过自己写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

就得到了输出结果

 其实也是很方便的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
winxp+delphi7+kbmmw4.0.3+unidac+mssql2000+dbgrideh 基本实现xalion所说的功能并加上自己的一些编写经验 1、远程方法调用 2、取图像(流的使用) 3、查询数据 4、编辑数据:增、删、改(如果操作错误会进行相应的提示) 5、存储过程使用方法(存储过程参数自动创建) 6、动态创建数据集并执行Insert操作 7、命名查询(namedQuery) 8、事务操作(直接写SQL语句更新表的事务操作,有个重要的属性要设置,否则会更新不成功) 9、使用的数据库:sqlserver 2000,请到服务器的FDM单元把连接参数改下 10、数据库kbm_test结构参见:kbm_test.sql 11、安装kbmMw时请把配置文件 kbmMWConfig.inc {$DEFINE KBMMW_UNIDAC_SUPPORT} // UNIDAC support. 前面的//去掉 12、使用delphi7 2012年8月新增功能与说明 1、客户端断线重连:kbmMWTCPIPIndyClientTransport1.MaxRetries := 2;//重连一次 2、对象传输 3、JSON传输(利用kbmmw带的json库实现) 4、客户端断开代码: if FDM.kbmMWSimpleClient1.Transport.IsConnected then begin //memo1.Lines.Add('程序已有300秒没有进行操作,断开连接'); FDM.kbmMWSimpleClient1.Disconnect; end; 5、新增远程过程调用函数(直接SQL语句操作数据库): startTran:启动事务 commitTran:提交事务 rollbackTran:回滚事务 openSql:打开SQL语句 execSql:执行SQL语句 注openSql、execSql两个函数体代码使用对象连接池技术,无对象创建与释放,以提高系统效率, 具体能提高多少,未实测 6、增加HTTP协议例子(参考资料:kbmMW_and_AJAX.pdf),提供http-get的功能,http-post的功能可参照http-get方法实现 7、提供数据集转jsonjson数据集 (CDSFromJSon(CDS:TClientDataSet;JsonStr:string):Boolean)单元:uDBJson.pas 参照代码可自行把jsonkbmmwQuery kbmmw编译unidac方法: 修改单元kbmMWUNIDAC.pas,本人在数据很少用到blob字段,所以在代码里屏蔽掉blob字段的处理, 经测试数据库表字段类型为Text时,程序可以正常处理 报OLE DB error occured. CoInitialize has not been called (server)错误解决: unidac41src\Source\UniProviders\SQLServer\OLEDBAccessUni.pas constructor TOLEDBConnection.Create; begin inherited; CoInitialize(nil);//加此句 FCommand := nil; ... end; destructor TOLEDBConnection.Destroy; begin Disconnect; FCommand.Free; CoUninitialize;//加此句 inherited; end; 作者:chensm@vip.qq.com kbmmw开发交流群:209321818

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值