体验 Delphi2009 的 JSON

 

自从Delphi2009添加了JSON这个特性之后,相信很多人都对它十分感兴趣吧,我抽了个空做一个小小的Demo,演示了JSON传递数据的情况。

首先建立一个Server,放入DSServer, DSServerClass, TCPServerTransport各一个,然后把DSServerClass和TCPServerTransport关联到DSServer。再放入 ADOConnection, ADOQuery, DataSetProvider, ClientDataSet各一个,做好关联。这些组件将完成生成XML数据的作用。

做好后界面如图所示:

 

 

然后切换到代码视图,添加一个ServerClass,注意添加支持反射的预处理。

 

  1. {$MethodInfo ON}
  2. TServerDemo =class(TPersistent)
  3. public
  4.   function GetData(aSql:string):string;
  5. end;
  6. {$MethodInfo OFF}

然后实现这个方法,跟据SQL语句查出数据,然后返回相关的XML。

 

 

  1. function TServerDemo.GetData(sSql:string):string;
  2. begin
  3.   CoInitialize(nil);
  4.   Form1.ADOConnection1.Close;
  5.   Form1.ADOConnection1.connectionString :=
  6.     'Provider = Microsoft.Jet.OLEDB.4.0;'+
  7.     'Data Source = DelphiNotes.mdb;'+
  8.     'Persist Security Info = False ';
  9.   Form1.ADOConnection1.Open;
  10.   Form1.ADOQuery1.SQL.Text := aSql;
  11.   Form1.ADOQuery1.Open;
  12.   Form1.ClientDataSet1.Open;
  13.   Result := Form1.ClientDataSet1.XMLData;
  14.   CoUninitialize;
  15. end;

编写DSServerClass的OnGetClass事件。

 

  1. procedure TForm1.DSServerClass1GetClass(DSServerClass:TDSServerClass;
  2.     var PersistentClass:TPersistentClass);
  3. begin
  4.   PersistentClass :=TServerDemo;
  5. end;
好了,现在可以编译并执行Server程序。在Server启动着的情况下,进行Client的开发。
首先设计Client的界面,如下图所示:

 

 

注意把SqlServerMethod控件关联到SqlConnection控件上,并且SQlConnection控件的Driver属性设置为DataSnap。其他的数据组件按常规的方法进行关联即可。
编写Call按钮的事件,如下:

 

 

编译并启动Client,然后点击Call按钮,即可看到数据从Server端返回来了。

 

 

到此为止,一个简单的Demo就做好了,但是有一些事情还不简单,如下:
我把Server放到了公网的服务器上,然后用Client去调用,却发生了以下的情况,如图所示,连接超时了

 

 

我找了一下,并没有在DataSnap的组件上找到Timeout属性,但是它内定的Timeout时间实在是太短了,在公网上Call几次,成功的几率大概也就是50%,网络状况稍微差一些,就会超时。
这应该是DataSnap组件有所疏漏吧,至少Timeout属性是必须有的,还需要继续等待相关的补丁。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DELPHI彫和JSON代码* Copyright (c) 2006,2007,2008,2009 Leonid Koninin * leon_kon@users.sourceforge.net * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY Leonid Koninin ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL Leonid Koninin BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值