一、建立服務端。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中缺少代碼。
代碼下載下傳