حالا باید نرم افزار کلاینت رو بنویسیم.
1- یک پروژه جدید از نوع vcl forms application ایجاد میکنیم و با نام دلخواه ذخیره میکنیم
2- فرم اصلی Form1 رو شامل این کامپوننت های مورد نیاز مثل عکس زیر میکنیم:
8.jpg
همونطور که میبینید از SQLConnection1 اینجا استفاده شده.
مراحل 3 تا 5 برای ایجاد اتوماتیک یک یونیت هست که امکان استفاده از توابع سرور رو در کلاینت به ما میده:
3- مشخصه Driver رو برای SQLConnection1 روی حالت DataSnap میزاریم. همونطور که قبلا گفتم یک سری خاصیت به کامپوننت اضافه میشه. مثلا میتونیم پورت اتصال رو انتخاب کنیم.
اگر از پورت 211 پیشفرض در سرور استفاده کرده باشید، اینجا نیاز به تغییرات نداریم.
4- مشخصه LoginPromp مربوط به SQLConnection1 رو False کنید و مشخصه Connected رو True کنید. (نرم افزار سرور که در پست قبلی نوشتیم باید حتما در حال اجرا باشه و سرور Start شده باشه)
5- روی کامپوننت SQLConnection1 راست کلیک کرده و گزینه Generate DataSnap Client Classes رو بزنید.
بطور خودکار یک یونیت ایجاد میشه. این یونیت رو در uses های یونیت مربوط به Form1 اضافه میکنیم.
unit Unit2;
interface
uses System.JSON, Data.DBXCommon, Data.DBXClient, Data.DBXDataSnap, Data.DBXJSON, Datasnap.DSProxy, System.Classes, System.SysUtils, Data.DB, Data.SqlExpr, Data.DBXDBReaders, Data.DBXCDSReaders, Data.DBXJSONReflect;
type
TServerMethods1Client = class(TDSAdminClient)
private
FCalcCommand: TDBXCommand;
public
constructor Create(ADBXConnection: TDBXConnection); overload;
constructor Create(ADBXConnection: TDBXConnection; AInstanceOwner: Boolean); overload;
destructor Destroy; override;
function Calc(Num1: Double; Num2: Double; Oprt: Integer): Double;
end;
implementation
function TServerMethods1Client.Calc(Num1: Double; Num2: Double; Oprt: Integer): Double;
begin
if FCalcCommand = nil then
begin
FCalcCommand := FDBXConnection.CreateCommand;
FCalcCommand.CommandType := TDBXCommandTypes.DSServerMethod;
FCalcCommand.Text := 'TServerMethods1.Calc';
FCalcCommand.Prepare;
end;
FCalcCommand.Parameters[0].Value.SetDouble(Num1);
FCalcCommand.Parameters[1].Value.SetDouble(Num2);
FCalcCommand.Parameters[2].Value.SetInt32(Oprt);
FCalcCommand.ExecuteUpdate;
Result := FCalcCommand.Parameters[3].Value.GetDouble;
end;
constructor TServerMethods1Client.Create(ADBXConnection: TDBXConnection);
begin
inherited Create(ADBXConnection);
end;
constructor TServerMethods1Client.Create(ADBXConnection: TDBXConnection; AInstanceOwner: Boolean);
begin
inherited Create(ADBXConnection, AInstanceOwner);
end;
destructor TServerMethods1Client.Destroy;
begin
FCalcCommand.DisposeOf;
inherited;
end;
end.
6- حالا میتونیم مشخصه Connected مربوط به SQLConnection1 رو False کنیم.
7- میتونیم در فرم اصلی اینجوری کد بزنیم:
uses Unit2;
// فراخوانی تابع مربوطه از سرور
procedure TForm1.Button1Click(Sender: TObject);
var
num1, num2, res: Double;
oprt: Integer;
SMC: TServerMethods1Client;
begin
num1 := StrToFloat(LabeledEdit1.Text);
num2 := StrToFloat(LabeledEdit2.Text);
oprt := RadioGroup1.ItemIndex;
SMC := TServerMethods1Client.Create(SQLConnection1.DBXCon nection);
res := SMC.Calc(num1, num2, oprt);
LabeledEdit3.Text := FloatToStr(res);
FreeAndNil(SMC);
end;
// اتصال به سرور هنگام ایجاد فرم
procedure TForm1.FormCreate(Sender: TObject);
begin
SQLConnection1.Connected:=True;
end;
حالا برنامه رو اجرا و تست میکنیم:
9.jpg