您的位置:首页 > 编程语言 > Delphi

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

2014-09-04 15:32 561 查看
在看本文章前,请参考 基本探索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



上面代码里面有.大家可以参考
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐