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

在看本文章前,请参考 基本探索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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值