kbmmw 与extjs 的初次结合

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 前面写了extjs 的安装,今天写一下kbmmw 与extjs 的结合,参照delphi 产品经理marco文章 。 由于extjs 设计时要读取服务器端的数据,所以先要做一个rest 服务器。 先要用kbmmw 建一个web 服务器,可以参照我以前写的例子。

前面写了extjs 的安装,今天写一下kbmmw 与extjs 的结合,参照delphi 产品经理marco文章

由于extjs 设计时要读取服务器端的数据,所以先要做一个rest 服务器。

先要用kbmmw 建一个web 服务器,可以参照我以前写的例子。

由于要返回数据库,因此加入对应的数据库访问控件,我使用unidac 加postgresql,需要的可以在

www.hoasql.com 去下载。

我们开始写服务器端。加上必要的数据库访问控件,并保证运行正常。

进入webservice 单元,加对应的代码。

function Twebsrv.Performget(ClientIdent:TkbmMWClientIdentity; const AURL:string; const Args:array of Variant):Variant;
var
  mystringstream:Tstringstream;
  MimeType,s,scallback:string;
  Charset,tablename:string;
  qv:TkbmMWHTTPQueryValues;
  dataurl,mysql,swhere:string;
    I: Integer;
begin

    qv:=TkbmMWHTTPQueryValues.Create;
    dataurl:=args[0];
    qv.AsString:=Args[2];
   if length(Args)<1 then
        kbmMWRaiseException(KBMMW_ERR_SERVICE_HTTP_URLMISSING,'Missing URL.');

  try

    if args[0]='/version' then
    begin
        result:='kbmmw 5.03';
        exit;
    end;


    if args[0]='/getdata' then

        begin


          tablename:=qv.ValueByName['tname'] ;

          if tablename='' then
            begin

                  result:='表名不能为空!';
                  exit;
            end;

          swhere:= qv.ValueByName['where'];    //where 需要编码。注意注入

          if swhere<>'' then
            begin
                if pos(';',swhere)>0 then
                  begin
                      result:='非法条件!';
                      exit;
                  end;
             swhere:=' where '+swhere;
            end;


             mysql:='select *  from '+tablename;

             mysql:=mysql+swhere;


             s:=datatojson(tablename, mysql,'','');

             scallback:=qv.ValueByName['callback'];
             if scallback<>''  then
                result:=scallback+'('+s+')'
              else
                Result:=s;
             exit;


         end;

      result:=inherited Performget(ClientIdent,aurl,Args) ;
   finally
        qv.Free;
        mystringstream.Free;

   end;
end;

下面是数据库转json 的代码

function Twebsrv.datatojson(tname,datasql, startp, endp: string;
  inparams: tstringlist = nil): string;
var
   sjosn:TkbmMWJSONStreamer;
  alljson: TkbmMWJSONObject;
  datajson: TkbmMWJSONArray;
  recordjson: TkbmMWJSONObject;
   starti, endi, i: integer;
  idate:int64;
  mydate:Tdatetime;
begin

    if startp = '' then
    starti := 0
  else
    starti := strtoint(startp);

  alljson := TkbmMWJSONObject.Create;// ( (stobject);

  sjosn:=TkbmMWJSONStreamer.Create;
  try
    with cx do
    begin
      sql.clear;
      sql.add(datasql);

      if inparams <> nil then
      begin
        for i := 0 to inparams.Count - 1 do
        begin
          if inparams.Names[i] <> '' then
          begin
            cx.Parambyname[inparams.Names[i]].AsString :=
              inparams.ValueFromIndex[i];
          end;
        end;
      end;
        try
              Open;
         except
              result:='数据库打开错误!2';
               exit;

          end;
      datajson :=TkbmMWJSONArray.Create;//(starray);
     while not eof do
      begin
        recordjson :=TkbmMWJSONObject.Create;

            for i := 0 to fields.Count - 1 do
            begin
              case fields[i].DataType of
                 ftDate, ftTime, ftDateTime:
                     begin
                        mydate:=fields[i].AsDateTime;

                      recordjson.AsString[fields[i].FieldName]:=formatdatetime('yyyy-mm-dd hh:nn:ss',mydate);
                     end

                 else
                        recordjson .AsString[fields[i].FieldName ]:= fields[i].AsString;

                end;
            end;
        datajson.add(recordjson);

        next;
      end;

    alljson.AsArray[tname] := datajson;
   end;
     result := sjosn.SaveToUTF16String(alljson);
  finally
     sjosn.Free;
     alljson.Free;
  end;



end;

 

保存并运行。可以在浏览器里面输入http://localhost/getdata?tname=emp 访问服务器。

firefox 会返回这样

 

原始数据

好了,服务器做好,让它正常运行。

我们下载打开extjs 设计器

开启一个空白新工程

点击加号,选择一个新模型。

再新建一个Stores.选择JSONStore.

再右面属性栏,设置它的model.并选择autoload。

 

 

把MyajaxProxy 转换成MyJSONPProxy

设置myJSONPProxy 的URL.

 

 

ok, 可以右键选择datastore, loaddata, 然后就会出现一下眼睛图标。点击就可以看见服务器返回的数据了。

 

说明服务器工作正常。

 现在拖一个gridpanel 到设计器上。

 

 系统自动生成几个列。先不要管它,选择它的datastore 为myjsonstore.

右键选择,开始gird builder.

加入对应的字段,就可以生成gird了

ok, 保存工程文件。

在主文件菜单选择发布 命令(或者按F5)。

选择kbmmw 的web 服务器的文件目录并发布文件。

发布完成。

回到浏览器,输入http://localhost/index.html。

可以正常显示数据了。

当然了,还没有添加增、删、改的功能,这些对应服务器上也要做对应的处理,今天就不做了。

等以后有机会再做。

 

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
9
分享
相关文章
SSLError: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590)
SSLError: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590)
479 0
kbmmw 的HTTPSmartService中的跨域访问
有同学在使用kbmmw 与extjs 结合的时候,涉及到了跨域访问,这个在 kbmmw 里面已经完全解决。 extjs 在访问跨域的时候,首先会使用OPIONS  调用,服务端要根据浏览器请求的 head 来回应客户端,如果正确,则客户端再调用GET 方式访问服务器。
1549 0
使用kbmmw smart service 属性时的一个注意事项
kbmmw 5.0 以后支持smart service, 这个用起来非常方便,kbmmw 通过 定制属性来简化编程,可以参考我以前的文章。但是这个意味着使用单元引用一定要小心, 否则出了问题,都不知道怎么回事?浪费大量的时间。
1408 0
kbmmw 的HTTPSmartService入门
前面介绍过kbmmw 中的smartservice. 这个既可以用于kbmmw 的客户端,也可以使用http 访问。 在新版的kbmmw里面,作者加强了http 的支持,我们可以只使用HTTPSmartService ,这样可以省去很多代码,可以更方便、简单的实现REST 服务。
1860 0
kbmmw 中JSON 中使用SQL 查询
前面讲到了kbmmw 的JSON 对象操作,如何快速的查找JSON 中的值? 一种办法就是通过遍历的方法,其实在kbmmw 还有一种灵活的查询方式, 就是通过SQL 方式查询JSON 中的值。也就是说用TKbmmwmemSQL 控件来实现。
1234 0
KbmMW 服务器架构简介
kbmmw 由于文档比较少,很多同学开始用时很难理解。一直准备写一个关于kbmmw 架构的东西。 这几天与红鱼儿(blog)   研究服务器线程时,整理了一下,大概画了一下kbmmw (版本4.5)服务器的架构图,这里未涉及消息传输。
1219 0
unidac 访问sql server 字符查询参数失效问题及解决办法
在帮朋友调试kbmmw 服务器的时候,发现用uindac 访问sql server作为后台时,碰见一个问题。 具体如下: cx.Close; cx.sql.add('select * from T where id=:id'); // 这里id 是整数字段 cx.Prepare; cx.ParamByName('id').AsString:='1475'; cx.Open; 这一句运行时不出现错误,但是返回结果为空,很是奇怪。
1038 0
推荐一款pascal 语言的web 开发工具
这几天仔细研究了一款使用Pascal 语言开发web 的工具 具体介绍可以参照这里。 先上几张他开发的页面照。 这是他的开发页面 经过几天的摸索,基本上了解了他的工作原理: 1.使用类似delphi界面编辑器,绘出所见即所得的页面。
1359 0
[转载红鱼儿]kbmmw 开发点滴:kbmMW:Unknown property:indexes
利用kbmMW的QueryServices,对数据集进行提交,当改用JSON格式时,客户端提交时,会产生这个错误,明明已经更新数据库,也产生这个错误!如果换成Bin格式,则正常。 能过查看kbmMWJSONStreamFormat单元,问题产生在这行代码:nIndexDefs:=nDefs.AsArray['indexes']; 可以这样理解: 客户端提交数据后,服务器会返回一个错误结果数据集,不管有无错误,都要返回这个结果集。
961 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问