unit UsersHashProvider; interface uses HashDBProvider, InterfaceDataProvider, SysUtils, WideStrings; type TUsersHashProvider = class(THashDBProvider) private function RemoverBridgeServerID(ALoginName: string): string; protected function GetTableName: string; override; procedure Insert(AKey, AValue: WideString; AVersion: Integer); overload; override; stdcall; procedure Insert(AHashs: TKeyValues); overload; override; stdcall; function FindKeyValue(AKey: WideString): TKeyValue; overload; override; stdcall; function Find(AKeys: array of WideString): TKeyValues; overload; override; stdcall; end; implementation { TUsersHashProvider } function TUsersHashProvider.Find(AKeys: array of WideString): TKeyValues; var iLoop, ALen: Integer; begin ALen := Length(AKeys); for iLoop := 0 to ALen - 1 do begin AKeys[iLoop] := RemoverBridgeServerID(AKeys[iLoop]); end; Result := inherited Find(AKeys); end; function TUsersHashProvider.FindKeyValue(AKey: WideString): TKeyValue; begin AKey := RemoverBridgeServerID(AKey); Result := inherited FindKeyValue(WideString(AKey)); end; function TUsersHashProvider.GetTableName: string; begin Result := 'UsersHash'; end; procedure TUsersHashProvider.Insert(AKey, AValue: WideString; AVersion: Integer); begin AKey := RemoverBridgeServerID(AKey); inherited; end; function TUsersHashProvider.RemoverBridgeServerID(ALoginName: string): string; var iStart: Integer; begin iStart := AnsiPos('+', ALoginName); if iStart < 0 then iStart := 0; Result := Copy(ALoginName, iStart + 1, Length(ALoginName) - iStart); end; procedure TUsersHashProvider.Insert(AHashs: TKeyValues); var iLoop, ALen: Integer; begin ALen := Length(AHashs); for iLoop := 0 to ALen - 1 do begin AHashs[iLoop][0] := RemoverBridgeServerID(AHashs[iLoop][0]); end; inherited; end; end.