Marco Web Center

[an error occurred while processing this directive]

Home: Code Repository: Delphi 2009 Handbook

Project: ThinPlus2009Server.dproj

Project Structure

ThinPlus2009Server.dpr
program ThinPlus2009Server;

uses
  Forms,
  AppSForm in 'AppSForm.pas' {ServerForm},
  AppSRDM in 'AppSRDM.pas' {AppServerPlus: TRemoteDataModule} {AppServerPlus: CoClass};

{$R *.RES}

begin
  Application.Initialize;
  Application.CreateForm(TServerForm, ServerForm);
  Application.Run;
end.
AppSForm.pas
unit AppSForm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, DSCommonServer, DSTCPServerTransport, DSServer;

type
  TServerForm = class(TForm)
    lbLog: TListBox;
    DSServer1: TDSServer;
    DSServerClass1: TDSServerClass;
    DSTCPServerTransport1: TDSTCPServerTransport;
    procedure DSServerClass1GetClass(DSServerClass: TDSServerClass;
      var PersistentClass: TPersistentClass);
  private
    { Private declarations }
  public
    procedure Add (strLog: string);
  end;

var
  ServerForm: TServerForm;

implementation

{$R *.DFM}

uses
  AppSRDM;

{ TServerForm }

procedure TServerForm.Add(strLog: string);
begin
  // add item and move to it
  lbLog.ItemIndex := lbLog.Items.Add (strLog);
end;

procedure TServerForm.DSServerClass1GetClass(DSServerClass: TDSServerClass;
  var PersistentClass: TPersistentClass);
begin
  PersistentClass := TAppServerPlus;
end;

end.
AppSForm.pas.dfm
object ServerForm: TServerForm
  Left = 281
  Top = 286
  Caption = 'AppServerPlus'
  ClientHeight = 240
  ClientWidth = 400
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object lbLog: TListBox
    Left = 0
    Top = 0
    Width = 400
    Height = 240
    Align = alClient
    ItemHeight = 13
    TabOrder = 0
  end
  object DSServer1: TDSServer
    AutoStart = True
    HideDSAdmin = False
    Left = 72
    Top = 96
  end
  object DSServerClass1: TDSServerClass
    OnGetClass = DSServerClass1GetClass
    Server = DSServer1
    LifeCycle = 'Session'
    Left = 160
    Top = 96
  end
  object DSTCPServerTransport1: TDSTCPServerTransport
    PoolSize = 0
    Server = DSServer1
    BufferKBSize = 32
    Left = 72
    Top = 160
  end
end
AppSRDM.pas
unit AppSRDM;

interface

uses
  Windows, Messages, SysUtils, Classes, DataBkr, DBClient, DB,
  Provider, DBTables, Variants, SqlExpr, FMTBcd, WideStrings,
  DBXInterbase;

type
  TAppServerPlus = class(TRemoteDataModule)
    DataSourceDept: TDataSource;
    ProviderDepartments: TDataSetProvider;
    ProviderQuery: TDataSetProvider;
    SQLMonitor1: TSQLMonitor;
    SQLConnection1: TSQLConnection;
    SQLWithParams: TSQLDataSet;
    SQLDepartments: TSQLDataSet;
    SQLEmployees: TSQLDataSet;
    procedure RemoteDataModuleCreate(Sender: TObject);
    procedure ProviderQueryGetDataSetProperties(Sender: TObject;
      DataSet: TDataSet; out Properties: OleVariant);
    procedure ProviderDepartmentsUpdateData(Sender: TObject;
      DataSet: TCustomClientDataSet);
    procedure ProviderDepartmentsBeforeUpdateRecord(Sender: TObject;
      SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
      UpdateKind: TUpdateKind; var Applied: Boolean);
    procedure ProviderDepartmentsBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure ProviderEmployeeBeforeUpdateRecord(Sender: TObject;
      SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
      UpdateKind: TUpdateKind; var Applied: Boolean);
    procedure ProviderEmployeeAfterApplyUpdates(Sender: TObject;
      var OwnerData: OleVariant);
    procedure ProviderEmployeeUpdateError(Sender: TObject;
      DataSet: TCustomClientDataSet; E: EUpdateError;
      UpdateKind: TUpdateKind; var Response: TResolverResponse);
  private
    { Private declarations }
  public
    procedure Login(const Name, Password: WideString);
  end;

implementation

uses AppSForm;

{$R *.DFM}

procedure TAppServerPlus.Login(const Name, Password: WideString);
begin
  if Password <> Name then
    raise Exception.Create ('Wrong name/password combination received');
  ProviderDepartments.Exported := True;
  ServerForm.Add ('Login:' + Name + '/' + Password);
end;

procedure TAppServerPlus.ProviderQueryGetDataSetProperties(Sender: TObject;
  DataSet: TDataSet; out Properties: OleVariant);
begin
  Properties := VarArrayCreate([0,1], varVariant);
  Properties[0] := VarArrayOf(['Time', Now, True]);
  Properties[1] := VarArrayOf(['Param', SQLWithParams.Params[0].AsString, False]);
end;

procedure TAppServerPlus.ProviderDepartmentsUpdateData(Sender: TObject;
  DataSet: TCustomClientDataSet);
begin
  ServerForm.Add ('ProviderCustomer.OnUpdateData');
end;

procedure TAppServerPlus.ProviderDepartmentsBeforeUpdateRecord(
  Sender: TObject; SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
  UpdateKind: TUpdateKind; var Applied: Boolean);
begin
  ServerForm.Add ('ProviderCustomer.UpdateRecord');
end;

procedure TAppServerPlus.ProviderDepartmentsBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  ServerForm.Add ('ProviderCustomer.BeforeGetRecords');
end;


procedure TAppServerPlus.ProviderEmployeeBeforeUpdateRecord(
  Sender: TObject; SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
  UpdateKind: TUpdateKind; var Applied: Boolean);
begin
  ServerForm.Add ('fix hire date');
  DeltaDS.FieldByName('HIRE_DATE').NewValue := Now;
end;

procedure TAppServerPlus.ProviderEmployeeAfterApplyUpdates(Sender: TObject;
  var OwnerData: OleVariant);
begin
  ServerForm.Add ('after apply...');
end;

procedure TAppServerPlus.ProviderEmployeeUpdateError(Sender: TObject;
  DataSet: TCustomClientDataSet; E: EUpdateError; UpdateKind: TUpdateKind;
  var Response: TResolverResponse);
begin
  ServerForm.Add ('Error: ' + E.Message);
end;

procedure TAppServerPlus.RemoteDataModuleCreate(Sender: TObject);
begin
  ProviderDepartments.Exported := False;
end;

end.
AppSRDM.pas.dfm
object AppServerPlus: TAppServerPlus
  OldCreateOrder = False
  OnCreate = RemoteDataModuleCreate
  Height = 255
  Width = 573
  object DataSourceDept: TDataSource
    DataSet = SQLDepartments
    Left = 56
    Top = 104
  end
  object ProviderDepartments: TDataSetProvider
    DataSet = SQLDepartments
    Exported = False
    OnUpdateData = ProviderDepartmentsUpdateData
    BeforeUpdateRecord = ProviderDepartmentsBeforeUpdateRecord
    BeforeGetRecords = ProviderDepartmentsBeforeGetRecords
    Left = 56
    Top = 40
  end
  object ProviderQuery: TDataSetProvider
    DataSet = SQLWithParams
    OnGetDataSetProperties = ProviderQueryGetDataSetProperties
    Left = 48
    Top = 200
  end
  object SQLMonitor1: TSQLMonitor
    SQLConnection = SQLConnection1
    Left = 416
    Top = 80
  end
  object SQLConnection1: TSQLConnection
    ConnectionName = 'IBCONNECTION'
    DriverName = 'Interbase'
    GetDriverFunc = 'getSQLDriverINTERBASE'
    LibraryName = 'dbexpint.dll'
    LoginPrompt = False
    Params.Strings = (
      'DriverName=Interbase'

              'Database=C:\Program Files\Common Files\CodeGear Shared\Data\Empl' +
        'oyee.GDB'
      'RoleName=RoleName'
      'User_Name=sysdba'
      'Password=masterkey'
      'ServerCharSet='
      'SQLDialect=3'
      'ErrorResourceFile='
      'LocaleCode=0000'
      'BlobSize=-1'
      'CommitRetain=False'
      'WaitOnLocks=True'
      'Interbase TransIsolation=ReadCommited')
    VendorLib = 'GDS32.DLL'
    Left = 416
    Top = 144
  end
  object SQLWithParams: TSQLDataSet
    SchemaName = 'SYSDBA'
    CommandText = 'select * from employee where job_code = :job_code'
    DbxCommandType = 'Dbx.SQL'
    MaxBlobSize = -1
    Params = <
      item
        DataType = ftString
        Name = 'job_code'
        ParamType = ptInput
        Value = 'Eng'
      end>
    SQLConnection = SQLConnection1
    Left = 128
    Top = 200
  end
  object SQLDepartments: TSQLDataSet
    SchemaName = 'sysdba'
    CommandText = 'select * from DEPARTMENT'
    DbxCommandType = 'Dbx.SQL'
    MaxBlobSize = -1
    Params = <>
    SQLConnection = SQLConnection1
    Left = 136
    Top = 56
  end
  object SQLEmployees: TSQLDataSet
    SchemaName = 'sysdba'
    CommandText = 'select * from EMPLOYEE where dept_no = :dept_no'
    DbxCommandType = 'Dbx.SQL'
    DataSource = DataSourceDept
    MaxBlobSize = -1
    Params = <
      item
        DataType = ftUnknown
        Name = 'dept_no'
        ParamType = ptInput
      end>
    SQLConnection = SQLConnection1
    Left = 136
    Top = 104
  end
end
HTML file generated by PasToWeb, a tool by Marco Cantù
Copyright 2008 Marco Cantù