Delphi Xe DataSnap Rest + Flex 开发 基本探索3(取得后台 DataSet 数据集)
2014-09-04 15:32
561 查看
在看本文章前,请参考 基本探索1 中的部分内容
本文介绍如何取得 后台delphi 生成的Tdataset 数据集,该功能需要后台链接数据库
后台代码
本人用的ado组件,也可以用其他的数据库驱动 ,形式是一样的 只要返回Tdataset就可以了
(注意了,前台用delphi开发的话 直接返回Tdataset 中文字段是乱码,应该是不能直接返回Tdataset了,所以delphi的客户端建议直接使用datasetprovider 数据服务,当然也有其他办法,可以在网上在看看,有相关的文章 如何用Json 封装返回Tclientdataset)
前台效果
![](http://img.blog.csdn.net/20140904153743281?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGVjb25nemhlbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
前台代码
注意 返回的dataset 是以Json格式封装的,不能直接绑定到Grid上面,需要解析出来
本人 自己写了一个 解析函数
上面代码里面有.大家可以参考
本文介绍如何取得 后台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
上面代码里面有.大家可以参考
相关文章推荐
- Delphi Xe DataSnap Rest + Flex 开发 基本探索2(取得Json 数组)
- Delphi Xe DataSnap Rest + Flex 开发 基本探索1
- Delphi Xe DataSnap Rest + Flex 开发 基本探索6(flex 前台 Post 字节流 参数)
- Delphi Xe DataSnap Rest + Flex 开发 基本探索4(返回字节流 stream)
- Delphi Xe DataSnap Rest + Flex 开发 基本探索5(Rest 服务参数传递)
- 我的在线讨论和白皮书关于Delphi XE开发REST服务用DataSnap
- delphi xe datasnap rest 相關
- 多层数据库应用基于Delphi DataSnap方法调用的实现(一)返回数据集
- 多层数据库应用基于Delphi DataSnap方法调用的实现(一)返回数据集
- delphi XE Datasnap SERVER 在windows 7 下为服务添加描述信息
- Delphi XE程序设计系列 2-开发DataSnap/REST服务器
- 桥接让XE2 DATASNAP中间层支持DELPHI低版本开发客户端
- Delphi XE8中开发DataSnap程序常见问题和解决方法 (三)用TClientDataSet的“ProviderName”属性连接服务器时,无法找到服务器端的“DatasetProvier”
- Delphi XE8中开发DataSnap程序常见问题和解决方法 (二)想对DBExpress的TSQLDataSet写对数据库操作的SQL语句出错了!
- Delphi XE程序设计系列 2-开发DataSnap/REST服务器
- Delphi XE程序设计系列 2-开发DataSnap/REST服务器
- Delphi XE8中开发DataSnap程序常见问题和解决方法 (三)用TClientDataSet的“ProviderName”属性连接服务器时,无法找到服务器端的“DatasetProvier”
- ASP如何调用Delphi开发的DataSnap/Restful接口服务
- Delphi XE8中开发DataSnap程序常见问题和解决方法 (二)想对DBExpress的TSQLDataSet写对数据库操作的SQL语句出错了!
- (DELPHI_XE)Datasnap 'ERROR_CODE'. The allowed range is 0 to 4294967295'