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 ...
随机推荐
- soap协议有get方式
今天去面试,被问到了这个问题.一时没想起来.考官的说法是没有 get,使用post 发请求.restful 有get put delete等谓词. 特地查了一下.记在下边. <system.we ...
- apk反编译(6)ProGuard 工具 android studio版官方教程[作用,配置,解混淆,优化示例]
ProGuard In this document Enabling ProGuard (Gradle Builds) Configuring ProGuard Examples Decoding O ...
- ZOJ 3607 Lazier Salesgirl(贪心)
题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3607 题意:一个卖面包的小姑娘,给第i个来买面包的人的价格是pi, ...
- bzoj3983
显然我们得到这样几个结论 1.每次攻击对方一定是攻击最大的 2.自己合并也是合并最大和次大的 我们只要穷举下一开始是攻击还是合并,之后就是能攻击先攻击否则就合并 ..] of int64; var a ...
- 数据库锁机制(一)——概述
注:内容为自己的推理认知+网络,如有错误和不合理之处,敬请指出. 在多线程环境中我用使用线程锁处理并发问题,而在数据库系统中,并发问题可以细化到事务级别,而DBMS对此的处理方案就是使用锁. 为了适应 ...
- BZOJ2151: 种树
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2151 题解:此题=数据备份.喜闻乐见挂链表. 代码: #include<cstdio&g ...
- ASP.NET中POST提交数据并跳转页面
需求:先Post提交数据,然后跳转到目标页面 找了好久才发现这个神奇的类HttpHelper.原理很简单,利用html的from表单拼接,然后执行 使用方法: NameValueCollection ...
- Asp.Net微信登录-电脑版扫描二维码登录
像京东,一号店等网站都实现了用微信来登录的功能,就是用手机上的微信扫一扫网站上的二维码,微信上确认后,即可自动用微信的帐号登录网站. 一.创建网站应用 在微信开放平台创建一个网站应用 https:// ...
- POJ 1523 SPF (割点,连通分量)
题意:给出一个网络(不一定连通),求所有的割点,以及割点可以切分出多少个连通分量. 思路:很多种情况. (1)如果给的图已经不是连通图,直接“ No SPF nodes”. (2)求所有割点应该不难 ...
- MSSQL 2005数据库与SP4补丁安装
Sql Server 2005 正确安装之前的win7配置: http://wenku.baidu.com/link?url=6T3jzVnu2XY_sfqfe9ZqQ_6dUOdrZwHc83baW ...