Delphi Xe DataSnap Rest + Flex 开发 基本探索3(取得后台 DataSet 数据集)

来源:互联网 发布:windows光盘怎么安装 编辑:程序博客网 时间:2024/04/30 09:50

在看本文章前,请参考 基本探索1 中的部分内容

本文介绍如何取得 后台delphi 生成的Tdataset 数据集,该功能需要后台链接数据库

后台代码

声明TSMTest = class(TDSServerModule)    ADOConnection1: TADOConnection;    ADOQuery1: TADOQuery;    dsp: TDataSetProvider;    procedure DSServerModuleCreate(Sender: TObject);  private      { Private declarations }  public    { Public declarations }     function GetDataset:Tdataset;   end;实现function TSMTest.GetDataset: Tdataset;begin ADOQuery1.Close; ADOQuery1.Open; result := ADOQuery1;end;

本人用的ado组件,也可以用其他的数据库驱动 ,形式是一样的 只要返回Tdataset就可以了

(注意了,前台用delphi开发的话 直接返回Tdataset 中文字段是乱码,应该是不能直接返回Tdataset了,所以delphi的客户端建议直接使用datasetprovider 数据服务,当然也有其他办法,可以在网上在看看,有相关的文章 如何用Json 封装返回Tclientdataset)

前台效果

前台代码

protected function btndataset_clickHandler(event:MouseEvent):void{var read :ReadDataFromServer  = new ReadDataFromServer;read.onLoadComplete = onDatasetLoad;read.Load('datasnap/rest/TSMTest/GetDataset');}public function JsonDatasetToArr(JsonObj:Object):ArrayCollection{    var fieldname:String;var arrFields:Array = new Array();var arrGrid:Array = new Array();var arrC:ArrayCollection = new ArrayCollection(arrGrid);var fieldcount:int;var i:int;for( i=0;i<JsonObj.table.length;i++ ){  fieldname = JsonObj.table[i][0].toString();trace(fieldname);    var objItem :Object = new Object();objItem = JsonObj[fieldname];objItem['fieldname']= fieldname;arrFields.push(objItem);}if (arrFields.length>0){//有数据  var recCount:int= arrFields[0].length; // var oneArr:Array = new Array();//临时存储  for(var j:int=0;j<recCount;j++){ // oneArr.splice(0);  var obj:Object = new Object();      for(i=0;i<arrFields.length;i++)  {   fieldname =arrFields[i]['fieldname'];   obj[fieldname] = arrFields[i][j] ;  }  arrGrid.push(obj);  } return new ArrayCollection(arrGrid);}else return null;}public function onDatasetLoad(e:Event):void{  var obj:Object;  obj = JSON.decode(e.target.data).result[0];//  var arrlist:ArrayCollection = JsonDatasetToArr(obj); grid.dataProvider = arrlist;  /*    var arrDesc :Array = obj['describe'];  var arrSerialNo:Array = obj['serial_no'];  var arrGrid:Array=new Array();  for(var i:int=0;i<arrDesc.length;i++){  arrGrid.push({'describe':arrDesc[i], 'serial_no':arrSerialNo[i]} );  }  var arrlist:ArrayCollection = new ArrayCollection(arrGrid);  grid.dataProvider = arrlist;  /* var arr:Array =new Array({'describe':obj.describe});  var arr2:Array= new Array({'serial_no':obj.serial_no});  var list:Array = new Array();  list.push(arr,arr2);  var arrlist:ArrayCollection= new ArrayCollection(list);    grid.dataProvider = arrlist;  */  }

注意 返回的dataset 是以Json格式封装的,不能直接绑定到Grid上面,需要解析出来 

本人 自己写了一个 解析函数

<pre name="code" class="plain">public function JsonDatasetToArr(JsonObj:Object):ArrayCollection

上面代码里面有.大家可以参考

0 0
原创粉丝点击