一、创建服务端。RIO 10.3版本
1、向导生成server端。
2、打开data explore窗口,选中mysql中的test数据库,选中表如cp_member,拖入servermethodsunit窗体。
将Cp_memberTable的属性设置如下:
Cp_memberTable.Name := 'Cp_memberTable';
Cp_memberTable.Connection := MysqlConnection;
Cp_memberTable.SchemaAdapter := FDSchemaAdapter1;
Cp_memberTable.SQL.Clear;
Cp_memberTable.SQL.Add('SELECT * FROM test.cp_member');
3、按图所示,放置fdquery、fdschemaadapter、fdstanstoragebinlink、fdstanstoragejsonlink组件。
fdquery1的属性如下设置“
FDQuery1.Connection := MysqlConnection;
FDQuery1.SQL.Clear;
FDQuery1.SQL.Add('SELECT');
FDQuery1.SQL.Add('cp_member.mer_id,');
FDQuery1.SQL.Add('cp_member.mer_username,');
FDQuery1.SQL.Add('cp_member.mer_phone,');
FDQuery1.SQL.Add('cp_member.mer_password');
FDQuery1.SQL.Add('FROM');
FDQuery1.SQL.Add('cp_member');
4、在servermethodsunit的代码中加入。
public
{ Public declarations }
function EchoString(Value: string): string;
function ReverseString(Value: string): string;
function GetTaipeiHotels: TStream;
end;
{$METHODINFO OFF}
implementation
{$R *.dfm}
uses
System.StrUtils;
function TServerMethods1.GetTaipeiHotels: TStream;
begin
Result := TMemoryStream.Create;
try
with FDQuery1 do
begin
Close;
open;
SaveToStream(Result, TFDStorageFormat.sfBinary);
Result.Position := 0;
end;
except
raise;
end;
end;
5、编译并运行。
二、编写客户端。
右击projectgroup
注意在uses中要加入ippeerclient单元引用。(否则汇报错误,参看http://blog.sina.com.cn/s/blog_541686150102vsgq.html)
2、在headerfooterformwithnavigation窗体中拖入。
2个button、一个fdconnection、fdmemtable、fdstoreproc、fdguixwaitcursor、fdstanstoragebinlink、fdphysdsdriverlink组件
2、设置FDConnection1的属性。(保证第一步骤中的server运行的前提)
FDConnection1.Params.Clear;
FDConnection1.Params.Add('Protocol=tcp/ip');
FDConnection1.Params.Add('Server=127.0.0.1');
FDConnection1.Params.Add('DriverID=DS');
FDConnection1.Connected := True;
FDConnection1.LoginPrompt := False;
也可以如图所示进行设置。
3、设置FDStoredProc1的属性。
FDStoredProc1.Connection := FDConnection1;
FDStoredProc1.StoredProcName := 'TServerMethods1.GetTaipeiHotels';
FDStoredProc1.Name := 'ReturnValue';
并参看params子属性如下。
4、编写查询和显示代码。
查询。
procedure THeaderFooterwithNavigation.Button1Click(Sender: TObject);
var
lstringstream: TStringStream;
begin
self.FDStoredProc1.ExecProc;
lstringstream := TStringStream.Create(FDStoredProc1.Params[0].asBlob);
try
if (lstringstream <> nil) then
begin
lstringstream.Position := 0;
self.FDMemTable1.LoadFromStream(lstringstream, TFDStorageFormat.sfBinary);
end;
finally
lstringstream.Free;
end;
end;
显示。
procedure THeaderFooterwithNavigation.Button2Click(Sender: TObject);
var
Ivi: TListViewItem;
begin
Self.ListView1.Items.Clear;
Self.FDMemTable1.First;
while (not FDMemTable1.Eof) do
begin
Ivi := ListView1.Items.Add;
Ivi.Text := FDMemTable1.FieldByName('mer_phone').AsString;
Ivi.Detail := FDMemTable1.FieldByName('mer_password').AsString;
FDMemTable1.Next;
end;
end;
结果。
以上根据《Delphi 10.1 Berlin DataSnap 开发手册 高清版 V2017-5-22.PDF》第9章编写。只可惜sample中缺少代码。