unit fClientDataModule; interface uses {vcl:} SysUtils, Classes, DB, DBClient, {RemObjects:} uROClient, uROClientIntf, uRORemoteService, uROBinMessage, uROWinInetHTTPChannel, {Data Abstract:} uDADataTable, uDABin2DataStreamer, uDAInterfaces, uDARemoteDataAdapter, uDADataStreamer, uDAScriptingProvider, uDAMemDataTable, uRODynamicRequest, uROEventRepository; type TClientDataModule = class(TDataModule) Message: TROBinMessage; Channel: TROWinInetHTTPChannel; RemoteService: TRORemoteService; DataStreamer: TDABin2DataStreamer; RemoteDataAdapter: TDARemoteDataAdapter; drLoginRequest: TRODynamicRequest; tbl_Clients: TDAMemDataTable; ds_Clients: TDADataSource; EventReceiver: TROEventReceiver; procedure DataModuleCreate(Sender: TObject); procedure tbl_ClientsCalcFields(DataTable: TDADataTable); private { Private declarations } fLockedRows: TStringList; fIdField: TDAField; fLockedField: TDAField; public { Public declarations } property LockedRows: TStringList read fLockedRows; procedure LockRow(aId: string); procedure UnlockRow(aId: string); procedure Login; end; var ClientDataModule: TClientDataModule; implementation {$R *.dfm} uses DASampleLibrary_Intf; { TClientDataModule } procedure TClientDataModule.DataModuleCreate(Sender: TObject); begin fLockedRows := TStringList.Create; fIdField := tbl_Clients.FieldByName('ClientId'); fLockedField := tbl_Clients.FieldByName('Locked'); end; procedure TClientDataModule.LockRow(aId: string); begin if fLockedRows.IndexOf(aId) < 0 then fLockedRows.Add(aId); tbl_Clients.Refresh; end; procedure TClientDataModule.Login; begin with drLoginRequest do begin {$IFNDEF FPC} Params[0].Value := PlatformEnum_peWindowsDelphi; {$ELSE} {$IFDEF WINDOWS} Params[0].Value := PlatformEnum_peWindowsFPC; {$ELSE} {$IFDEF LINUX} Params[0].Value := PlatformEnum_peLinuxFPC; {$ELSE} Params[0].Value := PlatformEnum_peUnknown; {$ENDIF} {$ENDIF} {$ENDIF} Params[1].Value := 'DASQL Client'; Execute(Params); end; end; procedure TClientDataModule.tbl_ClientsCalcFields(DataTable: TDADataTable); begin if fLockedRows.IndexOf(DataTable.Fields[fIdField.Index].AsString) >=0 then DataTable.Fields[fLockedField.Index].AsString := 'X' else DataTable.Fields[fLockedField.Index].AsString := ''; end; procedure TClientDataModule.UnlockRow(aId: string); var i: integer; begin i := fLockedRows.IndexOf(aId); if i >= 0 then fLockedRows.Delete(i); tbl_Clients.Refresh; end; end.