DataSnap与FireDAC三层

相交资料:
http://blog.csdn.net/shuaihj/article/details/6129131
http://www.cnblogs.com/hnxxcxg/p/4007876.html
http://www.cnblogs.com/hnxxcxg/p/4008789.html
http://www.dfwlt.com/forum.php?mod=viewthread&tid=729 (生成Unit2)
PS:
右键点击TSQLConnection选择“Generate DataSnap client classes”生成,Uuit2。
服务端实例:
unit ServerMethodsUnit1; interface uses System.SysUtils, System.Classes, System.Json,
Datasnap.DSServer, Datasnap.DSAuth, DataSnap.DSProviderDataModuleAdapter,
Datasnap.Provider, FireDAC.Stan.ExprFuncs, FireDAC.Phys.SQLiteDef,
FireDAC.UI.Intf, FireDAC.VCLUI.Wait, FireDAC.Stan.Intf, FireDAC.Stan.Option,
FireDAC.Stan.Error, FireDAC.Phys.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool,
FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Stan.Param, FireDAC.DatS,
FireDAC.DApt.Intf, FireDAC.DApt, Data.DB, FireDAC.Comp.DataSet,
FireDAC.Comp.Client, FireDAC.Comp.UI, FireDAC.Phys.SQLite,
FireDAC.Stan.Storage,//未知
FireDAC.Stan.StorageBin,//未知
FireDAC.Stan.StorageJSON,//未知
FireDAC.Stan.StorageXML,//未知
Data.FireDACJSONReflect;//TFDJSONDataSets返回表使用 type
TServerMethods1 = class(TDSServerModule)
DataSetProvider1: TDataSetProvider; //要增加的控件
FDPhysSQLiteDriverLink1: TFDPhysSQLiteDriverLink;//要增加的控件
FDGUIxWaitCursor1: TFDGUIxWaitCursor; //要增加的控件
FDConnection1: TFDConnection; //要增加的控件
FDQuery1: TFDQuery;//要增加的控件
DataSource1: TDataSource;//要增加的控件
private
{ Private declarations }
public
{ Public declarations }
function EchoString(Value: string): string;
function ReverseString(Value: string): string;
//用户查询数据
function GetDataTable(Value: string): TFDJSONDataSets;
//用户删除记录
function DeleteData(Value:string):string; end; implementation {$R *.dfm} uses System.StrUtils; function TServerMethods1.EchoString(Value: string): string;
begin
Result := Value;
end; function TServerMethods1.ReverseString(Value: string): string;
begin
Result := System.StrUtils.ReverseString(Value);
end; //用户查询数据
function TServerMethods1.GetDataTable(Value: string): TFDJSONDataSets;
begin
//指定数据库
FDConnection1.DriverName := 'SQLite';
FDConnection1.Params.Add('Database=E:\diarydate.db');
//控件的联接情况
FDQuery1.Connection := FDConnection1;
DataSource1.DataSet := FDQuery1;
//用户查询
FDQuery1.SQL.Text := Value;//SELECT * FROM tproject
//打开数据集
FDConnection1.Open();
FDQuery1.Open();
//建立多个数据集返回集
Result := TFDJSONDataSets.Create;
//你也可以给自己的数据集起外名字
//TFDJSONDataSetsWriter.ListAdd(Result, 'A123', FDQuery1);
TFDJSONDataSetsWriter.ListAdd(Result, FDQuery1);
end; //用户删除记录
function TServerMethods1.DeleteData(Value: string): string;
begin
//代表空
Result := '';
//指定数据库
FDConnection1.DriverName := 'SQLite';
FDConnection1.Params.Add('Database=E:\diarydate.db');
//控件的联接情况
FDQuery1.Connection := FDConnection1;
DataSource1.DataSet := FDQuery1;
//用户查询
FDQuery1.SQL.Text := Value;//delete from tproject where fid=2
//打开数据集
FDConnection1.Open();
FDQuery1.ExecSQL;
//代表完成
Result := '';
end; end.
客户端实例:
unit Unit1; interface uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DBXDataSnap, IPPeerClient,
Data.DBXCommon, Data.DB, Data.SqlExpr, Data.FMTBcd, Vcl.StdCtrls,
FireDAC.Stan.Intf, FireDAC.Comp.DataMove,
FireDAC.Stan.Option, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf,
FireDAC.DApt,
FireDAC.Comp.Client,
FireDAC.Stan.Param, FireDAC.Stan.Error,
FireDAC.Comp.DataSet, Vcl.Grids, Vcl.DBGrids, Datasnap.DBClient,
Datasnap.DSConnect,
Unit2,//DataSnap单元
Data.FireDACJSONReflect,//TFDJSONDataSets使用
FireDAC.Stan.StorageJSON,//未知
FireDAC.Stan.StorageBin, //未知
FireDAC.Stan.StorageXML,//未知
FireDAC.Stan.Storage, //未知
Datasnap.Provider; type
TForm1 = class(TForm)
SQLConnection1: TSQLConnection; //要增加的控件
SqlServerMethod1: TSqlServerMethod; //要增加的控件
button1: TButton; //要增加的控件
button2: TButton; //要增加的控件
FDStanStorageJSONLink1: TFDStanStorageJSONLink; //要增加的控件
FDStanStorageBinLink1: TFDStanStorageBinLink; //要增加的控件 FDMemTable1: TFDMemTable; //要增加的控件
DBGrid1: TDBGrid; //要增加的控件
DataSource1: TDataSource; //要增加的控件
Button3: TButton; //要增加的控件
procedure button1Click(Sender: TObject);
procedure button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm} procedure TForm1.button1Click(Sender: TObject);
begin
SqlServerMethod1.ParamByName('Value').AsString:='Hello world';
SqlServerMethod1.ExecuteMethod;
ShowMessage(SqlServerMethod1.ParamByName('ReturnParameter').AsString);
end; procedure TForm1.button2Click(Sender: TObject);
var
oDSList: TFDJSONDataSets;
oDataModel: TServerMethods1Client;
begin
try
//连接指定IP和Port的应用服务器
SQLConnection1.Close;
//这我用的是本机的,所以就没有写
//SQLConnection1.Params.Values['HostName'] := edtIP.Text;
//SQLConnection1.Params.Values['Port'] := edtPort.Text;
try
SQLConnection1.Open;
try
//创建应用服务器上的Sample Methods在客户端的实现类
oDataModel := TServerMethods1Client.Create(SQLConnection1.DBXConnection);
//执行服务器上的方法
FDMemTable1.Close;
oDSList := oDataModel.GetDataTable('SELECT * FROM tproject');
FDMemTable1.AppendData(TFDJSONDataSetsReader.GetListValue(oDSList, ));
FDMemTable1.Open;
finally
oDataModel.Free;
end;
except
on E: Exception do
ShowMessage(E.Message);
end;
finally
SQLConnection1.Close;
end;
end; procedure TForm1.Button3Click(Sender: TObject);
var
oDataModel: TServerMethods1Client;
bIsTrue: string;
begin
try
//连接指定IP和Port的应用服务器
SQLConnection1.Close;
//这我用的是本机的,所以就没有写
//SQLConnection1.Params.Values['HostName'] := edtIP.Text;
//SQLConnection1.Params.Values['Port'] := edtPort.Text;
try
SQLConnection1.Open;
try
//创建应用服务器上的Sample Methods在客户端的实现类
oDataModel := TServerMethods1Client.Create(SQLConnection1.DBXConnection);
bIsTrue := oDataModel.DeleteData('delete from tproject where fid=2');
ShowMessage(bIsTrue);
finally
oDataModel.Free;
end;
except
on E: Exception do
ShowMessage(E.Message);
end;
finally
SQLConnection1.Close;
end;
end; end.
DataSnap与FireDAC三层的更多相关文章
- 论DATASNAP结合FIREDAC的使用方法
论DATASNAP结合FIREDAC的使用方法 自DELPHI XE5开始引入FIREDAC数据引擎以来,FIREDAC就正式成为了官方的数据引擎.一直到XE10.1 UPDATE1,据笔者观察,FI ...
- Delphi 使用 Datasnap 的几种三层应用技术总结
Delphi 使用 Datasnap 进行三层应用开发,积累了几种技术,总结如下: 1.(推荐!)在 Datasnap 服务端 使用 TDatasetProvider,客户端 使用 TDSProv ...
- DataSnap 多层返回数据集分析FireDAC JSON
采用服务器返回数据,一种是返回字符串数据例如JSON,跨平台跨语言,任何语言调用都支持兼容,类似WEBService. 第二种是紧密结合c++builder语言,传输DataSet,可以是Client ...
- FireDAC 接占线导致另一个 hstmt DataSnap
[FireDAC][Phys][ODBC][Microsoft][ODBC SQL Server Driver]连接占线导致另一个 hstmt 同样的程序,在2台win10 正常,1台win10 报连 ...
- 基于Delphi的三层数据库系统的实现方法
基于Delphi的三层数据库系统的实现方法 1 引言 当前的数据库应用系统中,按其结构划分为两类,一类是两层结构的数据库应系统,另一类是多层结构的数据库应用系统. 两层结构的数据库应用系统包括客 ...
- 客户端如何连接 DataSnap Server 调用服务的方法
一般http访问的地址是 http://localhost:8099/datasnap/rest/TServerMethods1/EchoString/abc 一.用FDConnection1连接Da ...
- Android开发数据库三层应用-DataSnap
Android开发数据库三层应用-DataSnap http://www.2ccc.com/news/Html/?1517.html 核心提示:我觉得Delphi最强大的的功能之一就是开发数据库三层应 ...
- DATASNAP为支持FIREDAC而增加的远程方法的数据类型TFDJSONDataSets
前面的博客提到用FIREDAC全面替代COM那一套东西:DATAPROVIDER,OLEVARIANT,CLIENTDATASET,DBEXPRESS... 显然,DATASNAP的远程方法必须增加对 ...
- 一个例子说明如何在DataSnap中使用FireDAC
一.FireDAC调用DataSnap远程方法查询数据示例 1.服务端使用FDQUERY查询数据并返回TDATASET: function TServerMethods1.GetData(var sq ...
随机推荐
- html5 touch事件实现触屏页面上下滑动(二)
五一小长假哪都没去,睡了三天,今天晕晕沉沉的投入工作了,但还是做出了一点点效果 上周用html5的touch事件把简单的滑动做出来了,实现了持续页面上下滑动的效果,参考之前 的文章及代码html5 t ...
- Windows Tomcat 安装
JDK的安装可以参考 http://www.cnblogs.com/emanlee/p/3702535.html ,然后安装apache-tomcat step1:http://tomcat.apac ...
- Linux“Bash”漏洞大爆发
9月25日,国外曝出一个“毁灭级”的Bash漏洞,黑客可利用此漏洞远程执行任意命令,完全控制目标系统! 该漏洞编号为CVE-2014-6271,主要存在于bash 1.14 - 4.3版本中,受影响的 ...
- android-async-http
安装 http://blog.csdn.net/wangwei_cq/article/details/9453345 包内的一些基本的参数 http://www.cnblogs.com/manuose ...
- uva 11624 Fire!(搜索)
开始刷题啦= = 痛并快乐着,学到新东西的感觉其实比看那些无脑的小说.电视剧有意思多了 bfs裸体,关键是先把所有的着火点放入队列,分开一个一个做bfs会超时的 发现vis[][]是多余的,完全可以用 ...
- 图解VS2010打包全过程
原文转自:http://blog.csdn.net/shan9liang/article/details/6957308 最近刚刚打包发布了用VS2010开发的一个收费系统,借此讲一讲打包过程,供大家 ...
- Azure SQL 数据库新服务级别现已正式发布
T.K.Ranga Rengarajan 2014 年 9 月 10 日上午 11:00 我们很高兴地宣布,新的 SQL 数据库服务级被基本.标准和高级级别现已正式发布.这些服务级别中含有内置且可 ...
- poj 1787 Charlie's Change
// 题意 给定一个数p,要求用四种币值为1,5,10,25的硬币拼成p,并且硬币数要最多,如果无解输出"Charlie cannot buy coffee.",1<=p&l ...
- CKEditor如何统计文字数量
今天在修改v5后台的比赛系统时,发现文本框需要限制输入字数.我们这个系统用的是3.6.3版本的,前台代码是这样的 <script> //编辑器 CKEDITOR.replace('matc ...
- HDU 5882 Balanced Game
Balanced Game Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...