-
Скажите, почему не результат функция возвращает True но пароль все равно не меняется
function TData.ChangePass(param : TUser): boolean; begin try CloseConnections; OpenConnections(SuperUser); IBSecurityService.Active := True; IBSecurityService.UserName := param.Name; IBSecurityService.Password := param.Pass; IBSecurityService.FirstName := ''; IBSecurityService.MiddleName := ''; IBSecurityService.LastName := ''; try IBSecurityService.ModifyUser; Result := True; except Result := False; end ; IBSecurityService.Active := False; except Result := False; end; CloseConnections; end;
где
type TUser = class Name: string; Pass: string; NewPass: string; Path: string; BaseName: string; Right: boolean; end;
-
Во-первых, что за "CloseConnections" и "OpenConnections"? Во-вторых, не ясно, указаны ли параметры пользователя при коннекте. И в-третьих, известный баг метода ModifyUser, приводящий к добавлению юзера, исправлен только в прошлом году в последней версии IBX.
-
procedure TData.CloseConnections; begin // Закрываем соединение try if IBDatabase <> nil then begin IBDatabase.Connected := False; IBDatabase.Close; end; except Application.MessageBox('Ошибка закрытия ИБ !','Внимание !',MB_ICONERROR); end; end;
function TData.OpenConnections(param: TUser): string; begin CloseConnections;
// Открываем соединение try if IBDatabase <> nil then begin IBDatabase.DatabaseName := param.Path; IBDatabase.LoginPrompt := False; IBDatabase.SQLDialect := 3; IBDatabase.Params.Clear; IBDatabase.Params.Add('CONNECT DATABASE '+param.BaseName); IBDatabase.Params.Add('USER_NAME='+param.Name); IBDatabase.Params.Add('PASSWORD='+param.Pass); IBDatabase.Params.Add('lc_ctype=WIN1251');
IBDatabase.Connected := True; Result := ''; end; except Result := param.Path; if GetLastError<>0 then Result := SysErrorMessage(GetLastError) +chr(13)+ Result; end; end;
SuperUser - SYSDBA в параметре процедуры передается "пользователь" для которого меняется пароль
-
Интересно, ты сам то понимаешь, что пишешь?
-
> Johnmen ©
Нет, может пояснишь ?
-
> psa247 (26.02.08 21:36) [4] > Нет, может пояснишь ?
Нет, я тоже не понимаю.
-
> Johnmen © (26.02.08 22:07) [5]
На том и договорились. Не понимаешь - проходим мимо
-
Может, уже поздно, но как вариант могу предложить. Эту часть
try
IBSecurityService.ModifyUser;
Result := True;
except
Result := False;
end ;
переписать следующим образом:
try
IBSecurityService.ModifyUser;
except
Result := False;
Exit;
end ;
Result := True;
IBSecurityService.Active := False;
Ну и как другой вариант попробуй переписать функцию так
function TData.ChangePass(param : TUser): boolean;
begin
CloseConnections;
try
OpenConnections(SuperUser);
except
Result := False;
Exit;
end;
IBSecurityService.Active := True;
IBSecurityService.UserName := param.Name;
IBSecurityService.Password := param.Pass;
IBSecurityService.FirstName := '';
IBSecurityService.MiddleName := '';
IBSecurityService.LastName := '';
try
IBSecurityService.ModifyUser;
except
Result := False;
Exit;
end ;
Result := True;
IBSecurityService.Active := False;
CloseConnections;
end;
-
> Может, уже поздно, но как вариант могу предложить.
Насколько помнится, в IBSecurityService параметры коннекта, заданные в design-time слетают. Их нужно заново указывать в run-time.
-
Ё-моё, ну что за мода пошла на гробокопательство и некрофилию? Заняться что-ли нечем? Словарик англо-русский почитал бы - узнал бы много полезного. Что Джей Ди это JD, а не то букоффсочетание, коем себя обозначил...
|