前面写了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[];
qv.AsString:=Args[];
if length(Args)< then
kbmMWRaiseException(KBMMW_ERR_SERVICE_HTTP_URLMISSING,'Missing URL.'); try if args[]='/version' then
begin
result:='kbmmw 5.03';
exit;
end; if args[]='/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)> 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 :=
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 := to inparams.Count - 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 := to fields.Count - 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。

可以正常显示数据了。

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

等以后有机会再做。

kbmmw 与extjs 的初次结合的更多相关文章

  1. kbmmw 与extjs 通过JSON Base64 显示图片

    delphi 官网上开始也来越多的介绍delphi与extjs 结合的例子,今天我就把官方的例子翻版一下. 官方使用C++builder 和webbroker 实现. 我使用kbmmw 来实现一下. ...

  2. kbmmw 的HTTPSmartService中的跨域访问

    有同学在使用kbmmw 与extjs 结合的时候,涉及到了跨域访问,这个在 kbmmw 里面已经完全解决. extjs 在访问跨域的时候,首先会使用OPIONS  调用,服务端要根据浏览器请求的 he ...

  3. kbmmw 中简单返回 extjs 数据JSON

    以前,我们通过自己写json 来返回数据表的内容.在delphi 10.2.2中,官方自带了一个FDBatchMoveJSONWriter1 来直接处理数据库内容.把结果推送到浏览器客户端. 今天我们 ...

  4. ExtJS 4.2 业务开发(一)主页搭建

    本篇开始搭建一个ExtJS 4.2单页面应用, 这里先介绍主页的搭建,内容包括:主页结构说明.扩展功能等方面. 目录 1. 主页结构说明 2. 扩展功能 3. 在线演示 1. 主页结构说明 1.1 主 ...

  5. ExtJs 4.2.1 复选框数据项动态加载(更新一下)

    最近在做博客项目,后台管理用的是ExtJs4.2.1版本,因为是初学所以在使用的时候也遇到不少的这样或那样的问题,也写了不少这方面的博客,今天要写的博客是关于复选框数据项动态的加载功能,以前也没用过, ...

  6. ExtJs 自定义Vtype验证

    最近公司开发项目在用ExtJs,碰到验证的就大概的总结了一些常用的验证.自定义的验证主要有两种方式:一种是单字段的自定义验证,另一种是多字段间的验证.对于单字段的验证主要通过regex配置项指定自定义 ...

  7. ExtJS 4 树

    Tree Panel是ExtJS中最多能的组件之一,它非常适合用于展示分层的数据.Tree Panel和Grid Panel继承自相同的基类,所以所有从Grid Panel能获得到的特性.扩展.插件等 ...

  8. extjs表单验证

    extjs表单验证 //放在onReady的function(){}中 Ext.QuickTips.init(); //为组件提供提示信息功能,form的主要提示信息就是客户端验证的错误信息. Ext ...

  9. ExtJS 4.2 评分组件

    上一文章是扩展ExtJS自带的Date组件.在这里将创建一个评分组件. 目录 1. 介绍 2. 示例 3. 资源下载 1. 介绍 代码参考的是 Sencha Touch 2上的一个RatingStar ...

随机推荐

  1. php项目执行composer install时报错

    报错信息: Loading composer repositories with package informationInstalling dependencies (including requi ...

  2. Mac上反编译Android apk安装包

    什么是反编译 我们知道,Android的程序打包后会生成一个APK文件,这个文件可以直接安装到任何Android手机上,因此,反编译就是对这个APK进行反编译.Android的反编译分成两个部分: 一 ...

  3. openal支持的通道数和声道数

    alext.h:  #define AL_FORMAT_QUAD8 0x1204 101 #define AL_FORMAT_QUAD16 0x1205 102 #define AL_FORMAT_Q ...

  4. f5负载均衡算法

    负载均衡使用一种算法或公式来确定由哪一个后台服务器接收流量 负载均衡是基于连接的 1.静态负载均衡算法:以固定方式分发连接 轮询算法(Round Robin):将请求依次顺序循环地分发给服务器,从1到 ...

  5. redis 集群java.lang.NoSuchMethodError:SpringJAR包版本冲突错误解决方法

      项目中出现如下错误,记录下解决方法: org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exce ...

  6. [leetcode]347. Top K Frequent Elements K个最常见元素

    Given a non-empty array of integers, return the k most frequent elements. Example 1: Input: nums = [ ...

  7. python脚本netifaces模块的调用

    # vim get_ip.py # -*- coding: utf- -*- #complete local network card IP #need install netifaces modem ...

  8. 快速将磁盘的MBR分区方式改成GPT分区方式

    1.按Shift + F10打开命令提示符. 2.diskpart 3.list disk(列出所有磁盘) 4.select disk 0(选择磁盘) 5.clean(格式化所选的磁盘) 7.conv ...

  9. 编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串'welcome to masm!'

    80*25彩色字符模式显示缓冲区的结构: 内存地址空间中,B8000H~BFFFFH共32KB的空间,为80*25彩色字符模式的显示缓冲区.向这个地址空间写入数据,写入的内容将立即出现在显示器上. 在 ...

  10. shell加密工具shc的安装和使用

    1) 工具说明 shell脚本是可读写的, 很有可能会泄露敏感信息, 如用户名/密码/路径/IP等. 同样在shell脚本运行时会也泄露敏感信息. shc是一个加密shell脚本的工具, 它的作用是把 ...