program AppSPlus;
uses
Forms,
AppSForm in 'AppSForm.pas' ,
AppSPlus_TLB in 'AppSPlus_TLB.pas',
AppSRDM in 'AppSRDM.pas' ;
begin
Application.Initialize;
Application.CreateForm(TServerForm, ServerForm);
Application.Run;
end.
|
unit AppSForm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TServerForm = class(TForm)
lbLog: TListBox;
private
public
procedure Add (strLog: string);
end;
var
ServerForm: TServerForm;
implementation
procedure TServerForm.Add(strLog: string);
begin
lbLog.ItemIndex := lbLog.Items.Add (strLog);
end;
end.
|
unit AppSPlus_TLB;
interface
uses ActiveX, Classes, Graphics, Midas, StdVCL, Variants, Windows;
const
AppSPlusMajorVersion = 1;
AppSPlusMinorVersion = 0;
LIBID_AppSPlus: TGUID = '{E31849A6-4A82-11D3-B9F1-00000100A27B}';
IID_IAppServerPlus: TGUID = '{E31849A7-4A82-11D3-B9F1-00000100A27B}';
CLASS_AppServerPlus: TGUID = '{E31849A9-4A82-11D3-B9F1-00000100A27B}';
type
IAppServerPlus = interface;
IAppServerPlusDisp = dispinterface;
AppServerPlus = IAppServerPlus;
IAppServerPlus = interface(IAppServer)
['{E31849A7-4A82-11D3-B9F1-00000100A27B}']
procedure Login(const Name: WideString; const Password: WideString); safecall;
end;
IAppServerPlusDisp = dispinterface
['{E31849A7-4A82-11D3-B9F1-00000100A27B}']
procedure Login(const Name: WideString; const Password: WideString); dispid 1;
function AS_ApplyUpdates(const ProviderName: WideString; Delta: OleVariant;
MaxErrors: Integer; out ErrorCount: Integer; var OwnerData: OleVariant): OleVariant; dispid 20000000;
function AS_GetRecords(const ProviderName: WideString; Count: Integer; out RecsOut: Integer;
Options: Integer; const CommandText: WideString;
var Params: OleVariant; var OwnerData: OleVariant): OleVariant; dispid 20000001;
function AS_DataRequest(const ProviderName: WideString; Data: OleVariant): OleVariant; dispid 20000002;
function AS_GetProviderNames: OleVariant; dispid 20000003;
function AS_GetParams(const ProviderName: WideString; var OwnerData: OleVariant): OleVariant; dispid 20000004;
function AS_RowRequest(const ProviderName: WideString; Row: OleVariant; RequestType: Integer;
var OwnerData: OleVariant): OleVariant; dispid 20000005;
procedure AS_Execute(const ProviderName: WideString; const CommandText: WideString;
var Params: OleVariant; var OwnerData: OleVariant); dispid 20000006;
end;
CoAppServerPlus = class
class function Create: IAppServerPlus;
class function CreateRemote(const MachineName: string): IAppServerPlus;
end;
implementation
uses ComObj;
class function CoAppServerPlus.Create: IAppServerPlus;
begin
Result := CreateComObject(CLASS_AppServerPlus) as IAppServerPlus;
end;
class function CoAppServerPlus.CreateRemote(const MachineName: string): IAppServerPlus;
begin
Result := CreateRemoteComObject(MachineName, CLASS_AppServerPlus) as IAppServerPlus;
end;
end.
|
unit AppSRDM;
interface
uses
Windows, Messages, SysUtils, Classes, ComServ, ComObj, VCLCom, DataBkr,
DBClient, AppSPlus_TLB, StdVcl, Db, Provider, DBTables, Variants;
type
TAppServerPlus = class(TRemoteDataModule, IAppServerPlus)
TableCustomer: TTable;
TableCustomerCustNo: TFloatField;
TableCustomerCompany: TStringField;
TableCustomerAddr1: TStringField;
TableCustomerAddr2: TStringField;
TableCustomerCity: TStringField;
TableCustomerState: TStringField;
TableCustomerZip: TStringField;
TableCustomerCountry: TStringField;
TableCustomerPhone: TStringField;
TableCustomerFAX: TStringField;
TableCustomerTaxRate: TFloatField;
TableCustomerContact: TStringField;
TableCustomerLastInvoiceDate: TDateTimeField;
Query: TQuery;
TableOrders: TTable;
DataSourceCust: TDataSource;
ProviderCustomer: TDataSetProvider;
ProviderQuery: TDataSetProvider;
procedure ProviderQueryGetDataSetProperties(Sender: TObject;
DataSet: TDataSet; out Properties: OleVariant);
procedure ProviderCustomerUpdateData(Sender: TObject;
DataSet: TCustomClientDataSet);
procedure ProviderCustomerBeforeUpdateRecord(Sender: TObject;
SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
UpdateKind: TUpdateKind; var Applied: Boolean);
private
protected
class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override;
procedure Login(const Name, Password: WideString); safecall;
public
end;
implementation
uses AppSForm;
class procedure TAppServerPlus.UpdateRegistry(Register: Boolean; const ClassID, ProgID: string);
begin
if Register then
begin
inherited UpdateRegistry(Register, ClassID, ProgID);
EnableSocketTransport(ClassID);
EnableWebTransport(ClassID);
end else
begin
DisableSocketTransport(ClassID);
DisableWebTransport(ClassID);
inherited UpdateRegistry(Register, ClassID, ProgID);
end;
end;
procedure TAppServerPlus.Login(const Name, Password: WideString);
begin
if Password <> Name then
raise Exception.Create ('Wrong name/password combination received')
else
Query.Active := 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', Query.Params[0].AsString, False]);
end;
procedure TAppServerPlus.ProviderCustomerUpdateData(Sender: TObject;
DataSet: TCustomClientDataSet);
begin
ServerForm.Add ('ProviderCustomer.OnUpdateData');
end;
procedure TAppServerPlus.ProviderCustomerBeforeUpdateRecord(
Sender: TObject; SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
UpdateKind: TUpdateKind; var Applied: Boolean);
begin
ServerForm.Add ('ProviderCustomer.UpdateRecord');
end;
initialization
TComponentFactory.Create(ComServer, TAppServerPlus,
Class_AppServerPlus, ciMultiInstance, tmApartment);
end.
|