program First3Tier2009_Client;
uses
Forms,
First3Tier2009_ClientMainForm in 'First3Tier2009_ClientMainForm.pas' {FormFirst3Tier2009Client},
First3Tier2009_ClientClasses in 'First3Tier2009_ClientClasses.pas';
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TFormFirst3Tier2009Client, FormFirst3Tier2009Client);
Application.Run;
end. |
unit First3Tier2009_ClientMainForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, WideStrings, DbxDatasnap, DB, DBClient, SqlExpr, DSConnect, StdCtrls,
Grids, DBGrids, FMTBcd;
type
TFormFirst3Tier2009Client = class(TForm)
DSProviderConnection1: TDSProviderConnection;
SQLConnection1: TSQLConnection;
ClientDataSet1: TClientDataSet;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
btnOpen: TButton;
btnHello: TButton;
SqlServerMethod1: TSqlServerMethod;
procedure btnOpenClick(Sender: TObject);
procedure btnHelloClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormFirst3Tier2009Client: TFormFirst3Tier2009Client;
implementation
uses
First3Tier2009_ClientClasses;
var
ServerProxyObject: TDSFirst3TierServerModuleClient;
{$R *.dfm}
procedure TFormFirst3Tier2009Client.btnHelloClick(Sender: TObject);
begin
SqlServerMethod1.ExecuteMethod;
ShowMessage (SqlServerMethod1.Params[0].Value);
// or in alternative...
with TDSFirst3TierServerModuleClient.Create(SQLConnection1.DBXConnection) do
try
ShowMessage (GetHello);
finally
Free;
end;
// or even better...
ShowMessage (ServerProxyObject.GetHello);
end;
procedure TFormFirst3Tier2009Client.btnOpenClick(Sender: TObject);
begin
ClientDataSet1.Open;
end;
procedure TFormFirst3Tier2009Client.FormCreate(Sender: TObject);
begin
SQLConnection1.Open;
ServerProxyObject := TDSFirst3TierServerModuleClient.
Create(SQLConnection1.DBXConnection)
end;
procedure TFormFirst3Tier2009Client.FormDestroy(Sender: TObject);
begin
FreeAndNil (ServerProxyObject);
end;
end. |
//
// Created by the DataSnap proxy generator.
//
unit First3Tier2009_ClientClasses;
interface
uses DBXCommon, Classes, SysUtils, DB, SqlExpr, DBXDBReaders;
type
TDSFirst3TierServerModuleClient = class
private
FDBXConnection: TDBXConnection;
FInstanceOwner: Boolean;
FGetHelloCommand: TDBXCommand;
public
constructor Create(ADBXConnection: TDBXConnection); overload;
constructor Create(ADBXConnection: TDBXConnection; AInstanceOwner: Boolean); overload;
destructor Destroy; override;
function GetHello: string;
end;
implementation
function TDSFirst3TierServerModuleClient.GetHello: string;
begin
if FGetHelloCommand = nil then
begin
FGetHelloCommand := FDBXConnection.CreateCommand;
FGetHelloCommand.CommandType := TDBXCommandTypes.DSServerMethod;
FGetHelloCommand.Text := 'TDSFirst3TierServerModule.GetHello';
FGetHelloCommand.Prepare;
end;
FGetHelloCommand.ExecuteUpdate;
Result := FGetHelloCommand.Parameters[0].Value.GetWideString;
end;
constructor TDSFirst3TierServerModuleClient.Create(ADBXConnection: TDBXConnection);
begin
inherited Create;
if ADBXConnection = nil then
raise EInvalidOperation.Create('Connection cannot be nil. Make sure the connection has been opened.');
FDBXConnection := ADBXConnection;
FInstanceOwner := True;
end;
constructor TDSFirst3TierServerModuleClient.Create(ADBXConnection: TDBXConnection; AInstanceOwner: Boolean);
begin
inherited Create;
if ADBXConnection = nil then
raise EInvalidOperation.Create('Connection cannot be nil. Make sure the connection has been opened.');
FDBXConnection := ADBXConnection;
FInstanceOwner := AInstanceOwner;
end;
destructor TDSFirst3TierServerModuleClient.Destroy;
begin
FreeAndNil(FGetHelloCommand);
inherited;
end;
end. |